lkml.org 
[lkml]   [2022]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6.0 550/862] md: Remove extra mddev_get() in md_seq_start()
    Date
    From: Logan Gunthorpe <logang@deltatee.com>

    [ Upstream commit 3bfc3bcd787c48aa31e4fde4a6dfcef4cd7ee2c2 ]

    A regression is seen where mddev devices stay permanently after they
    are stopped due to an elevated reference count.

    This was tracked down to an extra mddev_get() in md_seq_start().

    It only happened rarely because most of the time the md_seq_start()
    is called with a zero offset. The path with an extra mddev_get() only
    happens when it starts with a non-zero offset.

    The commit noted below changed an mddev_get() to check its success
    but inadvertently left the original call in. Remove the extra call.

    Fixes: 12a6caf27324 ("md: only delete entries from all_mddevs when the disk is freed")
    Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Acked-by: Guoqing Jiang <Guoqing.jiang@linux.dev>
    Signed-off-by: Song Liu <song@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/md/md.c | 1 -
    1 file changed, 1 deletion(-)

    diff --git a/drivers/md/md.c b/drivers/md/md.c
    index 729be2c5296c..470a975e4be9 100644
    --- a/drivers/md/md.c
    +++ b/drivers/md/md.c
    @@ -8156,7 +8156,6 @@ static void *md_seq_start(struct seq_file *seq, loff_t *pos)
    list_for_each(tmp,&all_mddevs)
    if (!l--) {
    mddev = list_entry(tmp, struct mddev, all_mddevs);
    - mddev_get(mddev);
    if (!mddev_get(mddev))
    continue;
    spin_unlock(&all_mddevs_lock);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-19 11:17    [W:6.333 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site