From: Alex Elder Date: Sun, 29 Jan 2012 19:57:43 +0000 (-0600) Subject: rbd: encapsulate new rbd id selection X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=b7f23c361b65a0bdcc81acd8d38471b7810df3ff;p=openwrt%2Fstaging%2Fblogic.git rbd: encapsulate new rbd id selection Move the loop that finds a new unique rbd id to use into its own helper function. Signed-off-by: Alex Elder Signed-off-by: Sage Weil --- diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index d8d052d42258..aaa19d8c3670 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c @@ -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);