| From bae595110f8582b6138b34cd4adb1c57ab3fd3b0 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 7 Feb 2022 21:48:19 +0100 |
| Subject: block/rnbd: Remove a useless mutex |
| |
| From: Christophe JAILLET <christophe.jaillet@wanadoo.fr> |
| |
| [ Upstream commit 24afc15dbe218f860994f627b4ba1fb09225a298 ] |
| |
| According to lib/idr.c, |
| The IDA handles its own locking. It is safe to call any of the IDA |
| functions without synchronisation in your code. |
| |
| so the 'ida_lock' mutex can just be removed. |
| It is here only to protect some ida_simple_get()/ida_simple_remove() calls. |
| |
| While at it, switch to ida_alloc_XXX()/ida_free() instead to |
| ida_simple_get()/ida_simple_remove(). |
| The latter is deprecated and more verbose. |
| |
| Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> |
| Acked-by: Jack Wang <jinpu.wang@ionos.com> |
| Link: https://lore.kernel.org/r/7f9eccd8b1fce1bac45ac9b01a78cf72f54c0a61.1644266862.git.christophe.jaillet@wanadoo.fr |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Stable-dep-of: c9b5645fd8ca ("block: rnbd-clt: Fix leaked ID in init_dev()") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/block/rnbd/rnbd-clt.c | 11 +++-------- |
| 1 file changed, 3 insertions(+), 8 deletions(-) |
| |
| diff --git a/drivers/block/rnbd/rnbd-clt.c b/drivers/block/rnbd/rnbd-clt.c |
| index 71b86fee81c2..ced9c4d7b926 100644 |
| --- a/drivers/block/rnbd/rnbd-clt.c |
| +++ b/drivers/block/rnbd/rnbd-clt.c |
| @@ -23,7 +23,6 @@ MODULE_LICENSE("GPL"); |
| |
| static int rnbd_client_major; |
| static DEFINE_IDA(index_ida); |
| -static DEFINE_MUTEX(ida_lock); |
| static DEFINE_MUTEX(sess_lock); |
| static LIST_HEAD(sess_list); |
| |
| @@ -55,9 +54,7 @@ static void rnbd_clt_put_dev(struct rnbd_clt_dev *dev) |
| if (!refcount_dec_and_test(&dev->refcount)) |
| return; |
| |
| - mutex_lock(&ida_lock); |
| - ida_simple_remove(&index_ida, dev->clt_device_id); |
| - mutex_unlock(&ida_lock); |
| + ida_free(&index_ida, dev->clt_device_id); |
| kfree(dev->hw_queues); |
| kfree(dev->pathname); |
| rnbd_clt_put_sess(dev->sess); |
| @@ -1381,10 +1378,8 @@ static struct rnbd_clt_dev *init_dev(struct rnbd_clt_session *sess, |
| goto out_alloc; |
| } |
| |
| - mutex_lock(&ida_lock); |
| - ret = ida_simple_get(&index_ida, 0, 1 << (MINORBITS - RNBD_PART_BITS), |
| - GFP_KERNEL); |
| - mutex_unlock(&ida_lock); |
| + ret = ida_alloc_max(&index_ida, 1 << (MINORBITS - RNBD_PART_BITS), |
| + GFP_KERNEL); |
| if (ret < 0) { |
| pr_err("Failed to initialize device '%s' from session %s, allocating idr failed, err: %d\n", |
| pathname, sess->sessname, ret); |
| -- |
| 2.51.0 |
| |