rbd: encapsulate new rbd id selection
authorAlex Elder <elder@dreamhost.com>
Sun, 29 Jan 2012 19:57:43 +0000 (13:57 -0600)
committerAlex Elder <elder@dreamhost.com>
Thu, 22 Mar 2012 15:47:47 +0000 (10:47 -0500)
Move the loop that finds a new unique rbd id to use into
its own helper function.

Signed-off-by: Alex Elder <elder@dreamhost.com>
Signed-off-by: Sage Weil <sage@newdream.net>
drivers/block/rbd.c

index d8d052d422588a1518130bd42b4a3d1a336a50b6..aaa19d8c367049f93c6ca90f684b3e32e770b2e7 100644 (file)
@@ -2149,6 +2149,23 @@ static int rbd_init_watch_dev(struct rbd_device *rbd_dev)
        return ret;
 }
 
+/* caller must hold ctl_mutex */
+static int rbd_id_get(void)
+{
+       struct list_head *tmp;
+       int new_id = 0;
+
+       list_for_each(tmp, &rbd_dev_list) {
+               struct rbd_device *rbd_dev;
+
+               rbd_dev = list_entry(tmp, struct rbd_device, node);
+               if (rbd_dev->id >= new_id)
+                       new_id = rbd_dev->id + 1;
+       }
+
+       return new_id;
+}
+
 static ssize_t rbd_add(struct bus_type *bus,
                       const char *buf,
                       size_t count)
@@ -2156,8 +2173,7 @@ static ssize_t rbd_add(struct bus_type *bus,
        struct ceph_osd_client *osdc;
        struct rbd_device *rbd_dev;
        ssize_t rc = -ENOMEM;
-       int irc, new_id = 0;
-       struct list_head *tmp;
+       int irc;
        char *mon_dev_name;
        char *options;
 
@@ -2187,15 +2203,7 @@ static ssize_t rbd_add(struct bus_type *bus,
        /* generate unique id: find highest unique id, add one */
        mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING);
 
-       list_for_each(tmp, &rbd_dev_list) {
-               struct rbd_device *rbd_dev;
-
-               rbd_dev = list_entry(tmp, struct rbd_device, node);
-               if (rbd_dev->id >= new_id)
-                       new_id = rbd_dev->id + 1;
-       }
-
-       rbd_dev->id = new_id;
+       rbd_dev->id = rbd_id_get();
 
        /* add to global list */
        list_add_tail(&rbd_dev->node, &rbd_dev_list);