diff options
author | Alex Elder <elder@inktank.com> | 2012-08-30 01:16:38 -0400 |
---|---|---|
committer | Alex Elder <elder@inktank.com> | 2012-10-01 15:30:52 -0400 |
commit | cd789ab9cacbda1aad43304b89cff29004b793ea (patch) | |
tree | 1338d6dd30abd2b1828bc724c84599afbac9751e | |
parent | 4bb1f1ed0063870f34ae5783cda08924964bac0b (diff) |
rbd: don't register snapshots in bus_add_dev()
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>
-rw-r--r-- | drivers/block/rbd.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 214c937a6de5..144694ee03a5 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
@@ -2244,29 +2244,21 @@ static int rbd_dev_snap_devs_update(struct rbd_device *rbd_dev) | |||
2244 | 2244 | ||
2245 | static int rbd_bus_add_dev(struct rbd_device *rbd_dev) | 2245 | static int rbd_bus_add_dev(struct rbd_device *rbd_dev) |
2246 | { | 2246 | { |
2247 | int ret; | ||
2248 | struct device *dev; | 2247 | struct device *dev; |
2249 | struct rbd_snap *snap; | 2248 | int ret; |
2250 | 2249 | ||
2251 | mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING); | 2250 | mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING); |
2252 | dev = &rbd_dev->dev; | ||
2253 | 2251 | ||
2252 | dev = &rbd_dev->dev; | ||
2254 | dev->bus = &rbd_bus_type; | 2253 | dev->bus = &rbd_bus_type; |
2255 | dev->type = &rbd_device_type; | 2254 | dev->type = &rbd_device_type; |
2256 | dev->parent = &rbd_root_dev; | 2255 | dev->parent = &rbd_root_dev; |
2257 | dev->release = rbd_dev_release; | 2256 | dev->release = rbd_dev_release; |
2258 | dev_set_name(dev, "%d", rbd_dev->dev_id); | 2257 | dev_set_name(dev, "%d", rbd_dev->dev_id); |
2259 | ret = device_register(dev); | 2258 | ret = device_register(dev); |
2260 | if (ret < 0) | ||
2261 | goto out; | ||
2262 | 2259 | ||
2263 | list_for_each_entry(snap, &rbd_dev->snaps, node) { | ||
2264 | ret = rbd_register_snap_dev(snap, &rbd_dev->dev); | ||
2265 | if (ret < 0) | ||
2266 | break; | ||
2267 | } | ||
2268 | out: | ||
2269 | mutex_unlock(&ctl_mutex); | 2260 | mutex_unlock(&ctl_mutex); |
2261 | |||
2270 | return ret; | 2262 | return ret; |
2271 | } | 2263 | } |
2272 | 2264 | ||