All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yi Zhang <yi.zhang@redhat.com>
To: Adam Manzanares <a.manzanares@samsung.com>
Cc: "sagi@grimberg.me" <sagi@grimberg.me>,
	"Keith Busch" <kbusch@kernel.org>, "Jens Axboe" <axboe@fb.com>,
	"Christoph Hellwig" <hch@lst.de>,
	"Javier González" <javier.gonz@samsung.com>,
	"Minwoo Im" <minwoo.im.dev@gmail.com>,
	"open list:NVM EXPRESS DRIVER" <linux-nvme@lists.infradead.org>,
	"open list" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] nvme: Cleanup per-namespace chardev deletion
Date: Thu, 14 Oct 2021 09:25:03 +0800	[thread overview]
Message-ID: <CAHj4cs_2Dip8PzoiHoXaHNyicBxWp5uxnfQj_yXLGwwwBMtq=Q@mail.gmail.com> (raw)
In-Reply-To: <20211013150413.320133-1-a.manzanares@samsung.com>

Verified this patch on top of 5.15.0-rc5.

Tested-by: Yi Zhang <yi.zhang@redhat.com>

On Wed, Oct 13, 2021 at 11:04 PM Adam Manzanares
<a.manzanares@samsung.com> wrote:
>
> Decrease reference count of chardevice during char device deletion in order to
> fix a kmemleak. Add relese function for the device associated chardev and moved
> ida_simple_remove into the release function.
>
> Fixes: 2637bae (nvme: introduce generic per-namespace chardev)
> Reported-by: Yi Zhang <yi.zhang@redhat.com>
> Suggested-by: Sagi Grimberg <sagi@grimberg.me>
> Signed-off-by: Adam Manzanares <a.manzanares@samsung.com>
> ---
>  drivers/nvme/host/core.c      | 21 ++++++++++++---------
>  drivers/nvme/host/multipath.c |  2 --
>  2 files changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index f9a25c61fb8b..3bc4bb620ab7 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -3583,10 +3583,15 @@ static int __nvme_check_ids(struct nvme_subsystem *subsys,
>         return 0;
>  }
>
> +static void nvme_cdev_rel(struct device *dev)
> +{
> +       ida_simple_remove(&nvme_ns_chr_minor_ida, MINOR(dev->devt));
> +}
> +
>  void nvme_cdev_del(struct cdev *cdev, struct device *cdev_device)
>  {
>         cdev_device_del(cdev, cdev_device);
> -       ida_simple_remove(&nvme_ns_chr_minor_ida, MINOR(cdev_device->devt));
> +       put_device(cdev_device);
>  }
>
>  int nvme_cdev_add(struct cdev *cdev, struct device *cdev_device,
> @@ -3599,14 +3604,14 @@ int nvme_cdev_add(struct cdev *cdev, struct device *cdev_device,
>                 return minor;
>         cdev_device->devt = MKDEV(MAJOR(nvme_ns_chr_devt), minor);
>         cdev_device->class = nvme_ns_chr_class;
> +       cdev_device->release = nvme_cdev_rel;
>         device_initialize(cdev_device);
>         cdev_init(cdev, fops);
>         cdev->owner = owner;
>         ret = cdev_device_add(cdev, cdev_device);
> -       if (ret) {
> +       if (ret)
>                 put_device(cdev_device);
> -               ida_simple_remove(&nvme_ns_chr_minor_ida, minor);
> -       }
> +
>         return ret;
>  }
>
> @@ -3638,11 +3643,9 @@ static int nvme_add_ns_cdev(struct nvme_ns *ns)
>                            ns->ctrl->instance, ns->head->instance);
>         if (ret)
>                 return ret;
> -       ret = nvme_cdev_add(&ns->cdev, &ns->cdev_device, &nvme_ns_chr_fops,
> -                           ns->ctrl->ops->module);
> -       if (ret)
> -               kfree_const(ns->cdev_device.kobj.name);
> -       return ret;
> +
> +       return nvme_cdev_add(&ns->cdev, &ns->cdev_device, &nvme_ns_chr_fops,
> +                            ns->ctrl->ops->module);
>  }
>
>  static struct nvme_ns_head *nvme_alloc_ns_head(struct nvme_ctrl *ctrl,
> diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
> index fb96e900dd3a..bd490a7c4808 100644
> --- a/drivers/nvme/host/multipath.c
> +++ b/drivers/nvme/host/multipath.c
> @@ -434,8 +434,6 @@ static int nvme_add_ns_head_cdev(struct nvme_ns_head *head)
>                 return ret;
>         ret = nvme_cdev_add(&head->cdev, &head->cdev_device,
>                             &nvme_ns_head_chr_fops, THIS_MODULE);
> -       if (ret)
> -               kfree_const(head->cdev_device.kobj.name);
>         return ret;
>  }
>
> --
> 2.25.1
>


-- 
Best Regards,
  Yi Zhang


  parent reply	other threads:[~2021-10-14  1:25 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20211013150421uscas1p297a8bd51cf3f3b68dcef3a1c87da2959@uscas1p2.samsung.com>
2021-10-13 15:04 ` [PATCH] nvme: Cleanup per-namespace chardev deletion Adam Manzanares
2021-10-13 18:41   ` Javier González
2021-10-14  1:25   ` Yi Zhang [this message]
2021-10-14  6:04   ` Christoph Hellwig

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='CAHj4cs_2Dip8PzoiHoXaHNyicBxWp5uxnfQj_yXLGwwwBMtq=Q@mail.gmail.com' \
    --to=yi.zhang@redhat.com \
    --cc=a.manzanares@samsung.com \
    --cc=axboe@fb.com \
    --cc=hch@lst.de \
    --cc=javier.gonz@samsung.com \
    --cc=kbusch@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=minwoo.im.dev@gmail.com \
    --cc=sagi@grimberg.me \
    /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.