In rbd_get_client(), if a client is reused, a number of things
get done while still holding the list lock unnecessarily.
This just moves a few things that need no lock protection outside
the lock.
Signed-off-by: Alex Elder <elder@xxxxxxxxxxxxx>
---
drivers/block/rbd.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 4c5bb39..4bf8300 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -383,13 +383,15 @@ static int rbd_get_client(struct rbd_device
*rbd_dev, const char *mon_addr,
spin_lock(&node_lock);
rbdc = __rbd_client_find(opt);
if (rbdc) {
- ceph_destroy_options(opt);
- kfree(rbd_opts);
-
/* using an existing client */
kref_get(&rbdc->kref);
- rbd_dev->rbd_client = rbdc;
spin_unlock(&node_lock);
+
+ rbd_dev->rbd_client = rbdc;
+
+ ceph_destroy_options(opt);
+ kfree(rbd_opts);
+
return 0;
}
spin_unlock(&node_lock);
--
1.7.5.4
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html