Skip to content

Commit

Permalink
rbd: set up devices only for mapped images
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Alex Elder authored and Sage Weil committed May 2, 2013
1 parent 8ad42cd commit b536f69
Showing 1 changed file with 5 additions and 7 deletions.
12 changes: 5 additions & 7 deletions drivers/block/rbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit b536f69

Please sign in to comment.