rbd: don't register snapshots in bus_add_dev()
authorAlex Elder <elder@inktank.com>
Thu, 30 Aug 2012 05:16:38 +0000 (00:16 -0500)
committerAlex Elder <elder@inktank.com>
Mon, 1 Oct 2012 19:30:52 +0000 (14:30 -0500)
When rbd_bus_add_dev() is called (one spot--in rbd_add()), the rbd
image header has not even been read yet.  This means that the list
of snapshots will be empty at the time of the call.  As a result,
there is no need for the code that calls rbd_register_snap_dev()
for each entry in that list--so get rid of it.

Once the header has been read (just after returning), a call will
be made to rbd_dev_snap_devs_update(), which will then find every
snapshot in the context to be new and will therefore call
rbd_register_snap_dev() via __rbd_add_snap_dev() accomplishing
the same thing.

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
drivers/block/rbd.c

index 214c937a6de5292a9ff7f4426b28928df7987d1f..144694ee03a59fd2e344c03c76eb333991cd6143 100644 (file)
@@ -2244,29 +2244,21 @@ static int rbd_dev_snap_devs_update(struct rbd_device *rbd_dev)
 
 static int rbd_bus_add_dev(struct rbd_device *rbd_dev)
 {
-       int ret;
        struct device *dev;
-       struct rbd_snap *snap;
+       int ret;
 
        mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING);
-       dev = &rbd_dev->dev;
 
+       dev = &rbd_dev->dev;
        dev->bus = &rbd_bus_type;
        dev->type = &rbd_device_type;
        dev->parent = &rbd_root_dev;
        dev->release = rbd_dev_release;
        dev_set_name(dev, "%d", rbd_dev->dev_id);
        ret = device_register(dev);
-       if (ret < 0)
-               goto out;
 
-       list_for_each_entry(snap, &rbd_dev->snaps, node) {
-               ret = rbd_register_snap_dev(snap, &rbd_dev->dev);
-               if (ret < 0)
-                       break;
-       }
-out:
        mutex_unlock(&ctl_mutex);
+
        return ret;
 }