diff mbox series

blk-mq: fix queue reference leak on blk_mq_alloc_disk_for_queue failure

Message ID 20221122072753.426077-1-hch@lst.de (mailing list archive)
State New, archived
Headers show
Series blk-mq: fix queue reference leak on blk_mq_alloc_disk_for_queue failure | expand

Commit Message

Christoph Hellwig Nov. 22, 2022, 7:27 a.m. UTC
Drop the disk reference just acquired when __alloc_disk_node failed.

Fixes: 6f8191fdf41d ("block: simplify disk shutdown")
Reported-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 block/blk-mq.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Damien Le Moal Nov. 22, 2022, 7:30 a.m. UTC | #1
On 11/22/22 16:27, Christoph Hellwig wrote:
> Drop the disk reference just acquired when __alloc_disk_node failed.

s/disk reference/request queue reference

Apart from that, looks good to me.

Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>

> 
> Fixes: 6f8191fdf41d ("block: simplify disk shutdown")
> Reported-by: Al Viro <viro@zeniv.linux.org.uk>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>  block/blk-mq.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/block/blk-mq.c b/block/blk-mq.c
> index a3a5fb4d4ef667..02a1f6e501ea8d 100644
> --- a/block/blk-mq.c
> +++ b/block/blk-mq.c
> @@ -4108,9 +4108,14 @@ EXPORT_SYMBOL(__blk_mq_alloc_disk);
>  struct gendisk *blk_mq_alloc_disk_for_queue(struct request_queue *q,
>  		struct lock_class_key *lkclass)
>  {
> +	struct gendisk *disk;
> +
>  	if (!blk_get_queue(q))
>  		return NULL;
> -	return __alloc_disk_node(q, NUMA_NO_NODE, lkclass);
> +	disk = __alloc_disk_node(q, NUMA_NO_NODE, lkclass);
> +	if (!disk)
> +		blk_put_queue(q);
> +	return disk;
>  }
>  EXPORT_SYMBOL(blk_mq_alloc_disk_for_queue);
>
Jens Axboe Nov. 22, 2022, 10:58 p.m. UTC | #2
On Tue, 22 Nov 2022 08:27:53 +0100, Christoph Hellwig wrote:
> Drop the disk reference just acquired when __alloc_disk_node failed.
> 
> 

Applied, thanks!

[1/1] blk-mq: fix queue reference leak on blk_mq_alloc_disk_for_queue failure
      commit: 22c17e279a1b03bad7987e4a4192b289b890f293

Best regards,
diff mbox series

Patch

diff --git a/block/blk-mq.c b/block/blk-mq.c
index a3a5fb4d4ef667..02a1f6e501ea8d 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -4108,9 +4108,14 @@  EXPORT_SYMBOL(__blk_mq_alloc_disk);
 struct gendisk *blk_mq_alloc_disk_for_queue(struct request_queue *q,
 		struct lock_class_key *lkclass)
 {
+	struct gendisk *disk;
+
 	if (!blk_get_queue(q))
 		return NULL;
-	return __alloc_disk_node(q, NUMA_NO_NODE, lkclass);
+	disk = __alloc_disk_node(q, NUMA_NO_NODE, lkclass);
+	if (!disk)
+		blk_put_queue(q);
+	return disk;
 }
 EXPORT_SYMBOL(blk_mq_alloc_disk_for_queue);