]> Pileus Git - ~andy/linux/commitdiff
rbd: move ctl_mutex lock inside rbd_get_client()
authorAlex Elder <elder@dreamhost.com>
Sun, 29 Jan 2012 19:57:44 +0000 (13:57 -0600)
committerAlex Elder <elder@dreamhost.com>
Thu, 22 Mar 2012 15:47:47 +0000 (10:47 -0500)
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 <elder@dreamhost.com>
Signed-off-by: Sage Weil <sage@newdream.net>
drivers/block/rbd.c

index bccd350a0323cb6c50e34e251a384209a78ee6f1..7f60ff28ac29c61fd4b804eccc5da3dfc440431e 100644 (file)
@@ -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;