Skip to content

Commit

Permalink
rbd: consolidate rbd_dev init in rbd_add()
Browse files Browse the repository at this point in the history
Group the allocation and initialization of fields of the rbd device
structure created in rbd_add().  Move the grouped code down later in
the function, just prior to the call to rbd_dev_probe().  This is
for the most part simple code movement.

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
  • Loading branch information
Alex Elder committed Nov 1, 2012
1 parent 9d3997f commit bd4ba65
Showing 1 changed file with 18 additions and 19 deletions.
37 changes: 18 additions & 19 deletions drivers/block/rbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -3232,29 +3232,16 @@ static ssize_t rbd_add(struct bus_type *bus,
if (!try_module_get(THIS_MODULE))
return -ENODEV;

rbd_dev = kzalloc(sizeof(*rbd_dev), GFP_KERNEL);
if (!rbd_dev)
return -ENOMEM;

/* static rbd_device initialization */
spin_lock_init(&rbd_dev->lock);
INIT_LIST_HEAD(&rbd_dev->node);
INIT_LIST_HEAD(&rbd_dev->snaps);
init_rwsem(&rbd_dev->header_rwsem);

/* parse add command */
rc = rbd_add_parse_args(buf, &ceph_opts, &rbd_opts, &spec);
if (rc < 0)
goto err_out_mem;

rbd_dev->mapping.read_only = rbd_opts->read_only;
goto err_out_module;

rbdc = rbd_get_client(ceph_opts);
if (IS_ERR(rbdc)) {
rc = PTR_ERR(rbdc);
goto err_out_args;
}
rbd_dev->rbd_client = rbdc;
ceph_opts = NULL; /* ceph_opts now owned by rbd_dev client */

/* pick the pool */
Expand All @@ -3264,11 +3251,22 @@ static ssize_t rbd_add(struct bus_type *bus,
goto err_out_client;
spec->pool_id = (u64) rc;

rbd_dev = kzalloc(sizeof (*rbd_dev), GFP_KERNEL);
if (!rbd_dev)
goto err_out_client;

spin_lock_init(&rbd_dev->lock);
INIT_LIST_HEAD(&rbd_dev->node);
INIT_LIST_HEAD(&rbd_dev->snaps);
init_rwsem(&rbd_dev->header_rwsem);
rbd_dev->rbd_client = rbdc;
rbd_dev->spec = spec;

rbd_dev->mapping.read_only = rbd_opts->read_only;

rc = rbd_dev_probe(rbd_dev);
if (rc < 0)
goto err_out_client;
goto err_out_mem;

/* no need to lock here, as rbd_dev is not registered yet */
rc = rbd_dev_snaps_update(rbd_dev);
Expand Down Expand Up @@ -3348,19 +3346,20 @@ static ssize_t rbd_add(struct bus_type *bus,
rbd_remove_all_snaps(rbd_dev);
err_out_probe:
rbd_header_free(&rbd_dev->header);
err_out_client:
kfree(rbd_dev->header_name);
err_out_mem:
kfree(rbd_dev);
err_out_client:
rbd_put_client(rbdc);
err_out_args:
if (ceph_opts)
ceph_destroy_options(ceph_opts);
kfree(rbd_opts);
rbd_spec_put(spec);
err_out_mem:
kfree(rbd_dev);
err_out_module:
module_put(THIS_MODULE);

dout("Error adding device %s\n", buf);
module_put(THIS_MODULE);

return (ssize_t) rc;
}
Expand Down

0 comments on commit bd4ba65

Please sign in to comment.