From: Alex Elder Date: Sun, 29 Jan 2012 19:57:44 +0000 (-0600) Subject: rbd: move ctl_mutex lock inside rbd_get_client() X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=d97081b0c7bdb55371994cc6690217bf393eb63e;p=deliverable%2Flinux.git rbd: move ctl_mutex lock inside rbd_get_client() Since rbd_get_client() is only called in one place, move the acquisition of the mutex around that call inside that function. Furthermore, within rbd_get_client(), it appears the mutex only needs to be held while calling rbd_client_create(). (Moving the lock inside that function will wait for the next patch.) Signed-off-by: Alex Elder Signed-off-by: Sage Weil --- diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index bccd350a0323..7f60ff28ac29 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c @@ -396,7 +396,10 @@ static int rbd_get_client(struct rbd_device *rbd_dev, const char *mon_addr, } spin_unlock(&node_lock); + mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING); rbdc = rbd_client_create(opt, rbd_opts); + mutex_unlock(&ctl_mutex); + if (IS_ERR(rbdc)) { ret = PTR_ERR(rbdc); goto done_err; @@ -2276,10 +2279,7 @@ static ssize_t rbd_add(struct bus_type *bus, /* initialize rest of new object */ snprintf(rbd_dev->name, DEV_NAME_LEN, DRV_NAME "%d", rbd_dev->id); - mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING); rc = rbd_get_client(rbd_dev, mon_dev_name, options); - mutex_unlock(&ctl_mutex); - if (rc < 0) goto err_out_slot;