From: Ming Lei <ming.lei@redhat.com>
To: Nilay Shroff <nilay@linux.ibm.com>
Cc: linux-block@vger.kernel.org, hch@lst.de, hare@suse.de,
axboe@kernel.dk, gjoyce@ibm.com
Subject: Re: [PATCH] block: fix module reference leak in mq-deadline I/O scheduler
Date: Sun, 20 Jul 2025 20:22:58 +0800 [thread overview]
Message-ID: <aHzfoqDm2wB9tvGq@fedora> (raw)
In-Reply-To: <20250719132722.769536-1-nilay@linux.ibm.com>
On Sat, Jul 19, 2025 at 06:56:47PM +0530, Nilay Shroff wrote:
> During probe, when the block layer registers a request queue, it
> defaults to the mq-deadline I/O scheduler if the device is single-queue
> and the mq-deadline module is available. To determine availability, the
> elevator_set_default() invokes elevator_find_get(), which increments the
> module's reference count. However, this reference is never released,
> resulting in a module reference leak that prevents the mq-deadline module
> from being unloaded.
>
> This patch fixes the issue by ensuring the acquired module reference is
> properly released.
>
> Fixes: 1e44bedbc921 ("block: unifying elevator change")
> Signed-off-by: Nilay Shroff <nilay@linux.ibm.com>
> ---
> Note: This patch is based on https://lore.kernel.org/all/20250718133232.626418-1-nilay@linux.ibm.com/
> So please apply this patch after the above is merged.
> ---
> block/elevator.c | 19 +++++++++++++------
> 1 file changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/block/elevator.c b/block/elevator.c
> index 83d0bfb90a03..2bbf7ad7f4db 100644
> --- a/block/elevator.c
> +++ b/block/elevator.c
> @@ -719,7 +719,8 @@ void elevator_set_default(struct request_queue *q)
> .name = "mq-deadline",
> .no_uevent = true,
> };
> - int err = 0;
> + int err;
> + struct elevator_type *e;
>
> /* now we allow to switch elevator */
> blk_queue_flag_clear(QUEUE_FLAG_NO_ELV_SWITCH, q);
> @@ -732,12 +733,18 @@ void elevator_set_default(struct request_queue *q)
> * have multiple queues or mq-deadline is not available, default
> * to "none".
> */
> - if (elevator_find_get(ctx.name) && (q->nr_hw_queues == 1 ||
> - blk_mq_is_shared_tags(q->tag_set->flags)))
> + e = elevator_find_get(ctx.name);
> + if (!e)
> + return;
> +
> + if ((q->nr_hw_queues == 1 ||
> + blk_mq_is_shared_tags(q->tag_set->flags))) {
> err = elevator_change(q, &ctx);
> - if (err < 0)
> - pr_warn("\"%s\" elevator initialization, failed %d, "
> - "falling back to \"none\"\n", ctx.name, err);
> + if (err < 0)
> + pr_warn("\"%s\" elevator initialization, failed %d, falling back to \"none\"\n",
> + ctx.name, err);
> + }
> + elevator_put(e);
Looks fine,
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Thanks,
Ming
next prev parent reply other threads:[~2025-07-20 12:23 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-19 13:26 [PATCH] block: fix module reference leak in mq-deadline I/O scheduler Nilay Shroff
2025-07-20 12:22 ` Ming Lei [this message]
2025-07-21 7:14 ` Hannes Reinecke
2025-07-21 12:48 ` Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aHzfoqDm2wB9tvGq@fedora \
--to=ming.lei@redhat.com \
--cc=axboe@kernel.dk \
--cc=gjoyce@ibm.com \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=linux-block@vger.kernel.org \
--cc=nilay@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.