mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client: (23 commits) ceph: fix cap flush race reentrancy libceph: subscribe to osdmap when cluster is full libceph: handle new osdmap down/state change encoding rbd: handle online resize of underlying rbd image ceph: avoid inode lookup on nfs fh reconnect ceph: use LOOKUPINO to make unconnected nfs fh more reliable rbd: use snprintf for disk->disk_name rbd: cleanup: make kfree match kmalloc rbd: warn on update_snaps failure on notify ceph: check return value for start_request in writepages ceph: remove useless check libceph: add missing breaks in addr_set_port libceph: fix TAG_WAIT case ceph: fix broken comparison in readdir loop libceph: fix osdmap timestamp assignment ceph: fix rare potential cap leak libceph: use snprintf for unknown addrs libceph: use snprintf for formatting object name ceph: use snprintf for dirstat content libceph: fix uninitialized value when no get_authorizer method is set ...
This commit is contained in:
commit
57bb559574
11 changed files with 173 additions and 75 deletions
|
|
@ -1191,14 +1191,19 @@ static int rbd_req_sync_notify_ack(struct rbd_device *dev,
|
|||
static void rbd_watch_cb(u64 ver, u64 notify_id, u8 opcode, void *data)
|
||||
{
|
||||
struct rbd_device *dev = (struct rbd_device *)data;
|
||||
int rc;
|
||||
|
||||
if (!dev)
|
||||
return;
|
||||
|
||||
dout("rbd_watch_cb %s notify_id=%lld opcode=%d\n", dev->obj_md_name,
|
||||
notify_id, (int)opcode);
|
||||
mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING);
|
||||
__rbd_update_snaps(dev);
|
||||
rc = __rbd_update_snaps(dev);
|
||||
mutex_unlock(&ctl_mutex);
|
||||
if (rc)
|
||||
pr_warning(DRV_NAME "%d got notification but failed to update"
|
||||
" snaps: %d\n", dev->major, rc);
|
||||
|
||||
rbd_req_sync_notify_ack(dev, ver, notify_id, dev->obj_md_name);
|
||||
}
|
||||
|
|
@ -1597,7 +1602,7 @@ static int rbd_header_add_snap(struct rbd_device *dev,
|
|||
int name_len = strlen(snap_name);
|
||||
u64 new_snapid;
|
||||
int ret;
|
||||
void *data, *data_start, *data_end;
|
||||
void *data, *p, *e;
|
||||
u64 ver;
|
||||
|
||||
/* we should create a snapshot only if we're pointing at the head */
|
||||
|
|
@ -1614,16 +1619,16 @@ static int rbd_header_add_snap(struct rbd_device *dev,
|
|||
if (!data)
|
||||
return -ENOMEM;
|
||||
|
||||
data_start = data;
|
||||
data_end = data + name_len + 16;
|
||||
p = data;
|
||||
e = data + name_len + 16;
|
||||
|
||||
ceph_encode_string_safe(&data, data_end, snap_name, name_len, bad);
|
||||
ceph_encode_64_safe(&data, data_end, new_snapid, bad);
|
||||
ceph_encode_string_safe(&p, e, snap_name, name_len, bad);
|
||||
ceph_encode_64_safe(&p, e, new_snapid, bad);
|
||||
|
||||
ret = rbd_req_sync_exec(dev, dev->obj_md_name, "rbd", "snap_add",
|
||||
data_start, data - data_start, &ver);
|
||||
data, p - data, &ver);
|
||||
|
||||
kfree(data_start);
|
||||
kfree(data);
|
||||
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
|
@ -1659,6 +1664,9 @@ static int __rbd_update_snaps(struct rbd_device *rbd_dev)
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* resized? */
|
||||
set_capacity(rbd_dev->disk, h.image_size / 512ULL);
|
||||
|
||||
down_write(&rbd_dev->header.snap_rwsem);
|
||||
|
||||
snap_seq = rbd_dev->header.snapc->seq;
|
||||
|
|
@ -1716,7 +1724,8 @@ static int rbd_init_disk(struct rbd_device *rbd_dev)
|
|||
if (!disk)
|
||||
goto out;
|
||||
|
||||
sprintf(disk->disk_name, DRV_NAME "%d", rbd_dev->id);
|
||||
snprintf(disk->disk_name, sizeof(disk->disk_name), DRV_NAME "%d",
|
||||
rbd_dev->id);
|
||||
disk->major = rbd_dev->major;
|
||||
disk->first_minor = 0;
|
||||
disk->fops = &rbd_bd_ops;
|
||||
|
|
|
|||
Loading…
Reference in a new issue