All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Subhash Jadavani" <subhashj@codeaurora.org>
To: 'Akinobu Mita' <akinobu.mita@gmail.com>,
	'Dolev Raviv' <draviv@codeaurora.org>
Cc: 'Jej B' <James.Bottomley@hansenpartnership.com>,
	'Christoph Hellwig' <hch@infradead.org>,
	linux-scsi@vger.kernel.org, linux-scsi-owner@vger.kernel.org,
	linux-arm-msm@vger.kernel.org, 'Santosh Y' <santoshsy@gmail.com>
Subject: RE: [PATCH V6 10/18] scsi: ufs: manually add well known logical units
Date: Fri, 3 Oct 2014 09:35:30 -0700	[thread overview]
Message-ID: <000e01cfdf28$0ca52870$25ef7950$@codeaurora.org> (raw)
In-Reply-To: <CAC5umyhYko5woZhkroi3zm4ow8qp=DeCX62hcr0n3oxw4w8fjw@mail.gmail.com>

> I could fix this issue by putting scsi_device_put() just after each __scsi_add_device() call.  I'll prepare a patch if I haven't missed something.

Thanks Akinobu for fixing it. We were always compiling the driver statically in kernel so didn't notice this. Yes, I would be happy to ACK your change. BTW, these patches are already merged into I could fix this issue by putting git://git.infradead.org/users/hch/scsi-queue.git -b drivers-for-3.18, so you may  to base your fix on it.

-----Original Message-----
From: Akinobu Mita [mailto:akinobu.mita@gmail.com] 
Sent: Friday, October 03, 2014 9:16 AM
To: Dolev Raviv
Cc: Jej B; Christoph Hellwig; linux-scsi@vger.kernel.org; linux-scsi-owner@vger.kernel.org; linux-arm-msm@vger.kernel.org; Santosh Y; Subhash Jadavani
Subject: Re: [PATCH V6 10/18] scsi: ufs: manually add well known logical units

2014-09-25 21:32 GMT+09:00 Dolev Raviv <draviv@codeaurora.org>:

> +static int ufshcd_scsi_add_wlus(struct ufs_hba *hba) {
> +       int ret = 0;
> +
> +       hba->sdev_ufs_device = __scsi_add_device(hba->host, 0, 0,
> +               ufshcd_upiu_wlun_to_scsi_wlun(UFS_UPIU_UFS_DEVICE_WLUN), NULL);
> +       if (IS_ERR(hba->sdev_ufs_device)) {
> +               ret = PTR_ERR(hba->sdev_ufs_device);
> +               hba->sdev_ufs_device = NULL;
> +               goto out;
> +       }
> +
> +       hba->sdev_boot = __scsi_add_device(hba->host, 0, 0,
> +               ufshcd_upiu_wlun_to_scsi_wlun(UFS_UPIU_BOOT_WLUN), NULL);
> +       if (IS_ERR(hba->sdev_boot)) {
> +               ret = PTR_ERR(hba->sdev_boot);
> +               hba->sdev_boot = NULL;
> +               goto remove_sdev_ufs_device;
> +       }
> +
> +       hba->sdev_rpmb = __scsi_add_device(hba->host, 0, 0,
> +               ufshcd_upiu_wlun_to_scsi_wlun(UFS_UPIU_RPMB_WLUN), 
> + NULL);

These __scsi_add_device() calls for W-LUs increase the module reference count of ufshcd.ko by three.  But no one calls scsi_device_put() for these W-LUs, so it is impossible to unload ufshcd.ko.

There are scsi_remove_device() calls for W-LUs in ufshcd_scsi_remove_wlus(), But these calls do nothing (please see a comment below).

I could fix this issue by putting scsi_device_put() just after each
__scsi_add_device() call.  I'll prepare a patch if I haven't missed something.

> +       if (IS_ERR(hba->sdev_rpmb)) {
> +               ret = PTR_ERR(hba->sdev_rpmb);
> +               hba->sdev_rpmb = NULL;
> +               goto remove_sdev_boot;
> +       }
> +       goto out;
> +
> +remove_sdev_boot:
> +       scsi_remove_device(hba->sdev_boot);
> +remove_sdev_ufs_device:
> +       scsi_remove_device(hba->sdev_ufs_device);
> +out:
> +       return ret;
> +}
> +
> +/**
> + * ufshcd_scsi_remove_wlus - Removes the W-LUs which were added by
> + *                          ufshcd_scsi_add_wlus()
> + * @hba: per-adapter instance
> + *
> + */
> +static void ufshcd_scsi_remove_wlus(struct ufs_hba *hba) {
> +       if (hba->sdev_ufs_device) {
> +               scsi_remove_device(hba->sdev_ufs_device);
> +               hba->sdev_ufs_device = NULL;
> +       }
> +
> +       if (hba->sdev_boot) {
> +               scsi_remove_device(hba->sdev_boot);
> +               hba->sdev_boot = NULL;
> +       }
> +
> +       if (hba->sdev_rpmb) {
> +               scsi_remove_device(hba->sdev_rpmb);
> +               hba->sdev_rpmb = NULL;
> +       }
> +}

When ufshcd_scsi_remove_wlus() is called in ufshcd_remove(), these three W-LU devices have already been deleted by scsi_remove_host() which is called just before ufshcd_scsi_remove_wlus().  The scsi device state of these W-LU devices is SDEV_DEL at this time, and
scsi_remove_device() does nothing.

  reply	other threads:[~2014-10-03 16:35 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-25 12:32 [PATCH/RESEND V6 00/18] UFS: Power management support Dolev Raviv
2014-09-25 12:32 ` [PATCH V6 01/18] scsi: fixing the "type" for well known LUs Dolev Raviv
2014-09-26  8:13   ` Christoph Hellwig
2014-10-03 18:40     ` Elliott, Robert (Server Storage)
2014-09-25 12:32 ` [PATCH V6 02/18] scsi: sysfs: don't add scsi_device if its already added Dolev Raviv
2014-09-26  8:14   ` Christoph Hellwig
2014-09-26 13:41     ` Hannes Reinecke
2014-09-30 21:54     ` Martin K. Petersen
2014-09-25 12:32 ` [PATCH/RESEND V6 03/18] scsi: ufs: Allow vendor specific initialization Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 04/18] scsi: ufs: Add regulator enable support Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 05/18] scsi: ufs: Add clock initialization support Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 06/18] scsi: ufs: add voting support for host controller power Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 07/18] scsi: ufs: refactor query descriptor API support Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 08/18] scsi: ufs: improve init sequence Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 09/18] scsi: ufs: Active Power Mode - configuring bActiveICCLevel Dolev Raviv
2014-09-25 12:32 ` [PATCH V6 10/18] scsi: ufs: manually add well known logical units Dolev Raviv
2014-10-03 16:16   ` Akinobu Mita
2014-10-03 16:35     ` Subhash Jadavani [this message]
2014-10-03 16:35     ` Christoph Hellwig
2014-10-05  7:31       ` Akinobu Mita
2014-09-25 12:32 ` [PATCH V6 11/18] scsi: ufs: introduce well known logical unit in ufs Dolev Raviv
2014-09-25 12:32 ` [PATCH V6 12/18] scsi: ufs: add UFS power management support Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 13/18] scsi: ufs: refactor configuring power mode Dolev Raviv
2014-10-03 16:20   ` Akinobu Mita
2014-10-03 16:42     ` Subhash Jadavani
2014-09-25 12:32 ` [PATCH/RESEND V6 14/18] scsi: ufs: Add support for clock gating Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 15/18] scsi: ufs: Add freq-table-hz property for UFS device Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 16/18] scsi: ufs: Add support for clock scaling using devfreq framework Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 17/18] scsi: ufs: tune bkops while power managment events Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 18/18] scsi: ufs: definitions for phy interface Dolev Raviv
2014-09-25 15:43 ` [PATCH/RESEND V6 00/18] UFS: Power management support David Miller
2014-09-30 14:26 ` 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='000e01cfdf28$0ca52870$25ef7950$@codeaurora.org' \
    --to=subhashj@codeaurora.org \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=akinobu.mita@gmail.com \
    --cc=draviv@codeaurora.org \
    --cc=hch@infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-scsi-owner@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=santoshsy@gmail.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.