rbd: set up devices only for mapped images
Stop setting up Linux devices during the image probe operation. Instead, set up the devices as a separate step after the image probe, in rbd_add(). A consequence of this is that only mapped images get devices assigned to them, which is pretty sweet. This resolves: http://tracker.ceph.com/issues/4774 Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
This commit is contained in:
parent
8ad42cd0c0
commit
b536f69a3a
|
@ -4879,10 +4879,6 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev)
|
|||
goto err_out_snaps;
|
||||
|
||||
ret = rbd_dev_probe_parent(rbd_dev);
|
||||
if (ret)
|
||||
goto err_out_snaps;
|
||||
|
||||
ret = rbd_dev_device_setup(rbd_dev);
|
||||
if (!ret)
|
||||
return 0;
|
||||
|
||||
|
@ -4964,9 +4960,12 @@ static ssize_t rbd_add(struct bus_type *bus,
|
|||
if (rc < 0)
|
||||
goto err_out_rbd_dev;
|
||||
|
||||
return count;
|
||||
rc = rbd_dev_device_setup(rbd_dev);
|
||||
if (!rc)
|
||||
return count;
|
||||
|
||||
rbd_dev_image_release(rbd_dev);
|
||||
err_out_rbd_dev:
|
||||
kfree(rbd_dev->header_name);
|
||||
rbd_dev_destroy(rbd_dev);
|
||||
err_out_client:
|
||||
rbd_put_client(rbdc);
|
||||
|
@ -5029,7 +5028,6 @@ static void rbd_dev_remove_parent(struct rbd_device *rbd_dev)
|
|||
second = third;
|
||||
}
|
||||
rbd_assert(second);
|
||||
rbd_bus_del_dev(second);
|
||||
rbd_dev_image_release(second);
|
||||
first->parent = NULL;
|
||||
first->parent_overlap = 0;
|
||||
|
|
Loading…
Reference in New Issue