All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Williams <dan.j.williams@intel.com>
To: David Milburn <dmilburn@redhat.com>
Cc: "james.bottomley@suse.de" <james.bottomley@suse.de>,
	"Fan, Haipao" <haipao.fan@intel.com>,
	"Jiang, Dave" <dave.jiang@intel.com>,
	"linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
	"Danecki, Jacek" <jacek.danecki@intel.com>,
	"Trela, Maciej" <Maciej.Trela@intel.com>,
	"Skirvin, Jeffrey D" <jeffrey.d.skirvin@intel.com>,
	"Nadolski, Edmund" <edmund.nadolski@intel.com>,
	"Darrick J. Wong" <djwong@us.ibm.com>
Subject: Re: [PATCH] libsas: fix/amend device gone notification in	sas_deform_port()
Date: Thu, 17 Feb 2011 16:19:28 -0800	[thread overview]
Message-ID: <4D5DBB10.4030905@intel.com> (raw)
In-Reply-To: <4D5DB0F0.4060006@redhat.com>

On 2/17/2011 3:36 PM, David Milburn wrote:
> Dan Williams wrote:
>> Commit 56dd2c06 "libsas: Don't issue commands to devices that have been
>> hot-removed" edited Darrick's original patch to remove setting 'gone' in
>> the sas_deform_port() path because that prevented scsi sync cache
>> commands from being issued when the driver was unloaded.  However, this
>> allows true device gone notifications (as signaled port phy events) to
>> trigger sync cache commands to devices that are known to be unreachable.
>>
>> Teach libsas which sas_deform_port() invocations are likely device gone
>> events.
>>
>> This patch also introduces sas_device_gone() which hopefully allows
>> subtle/tricky locking to be dropped from lldd drivers, like the
>> following in mvsas which is broken if the ata path is ever converted to
>> call lldd_execute_task() with irqs enabled:
>>
>> 	flags_libsas = 0;
>> 	[...]
>> 	spin_unlock_irqrestore(dev->sata_dev.ap->lock, flags_libsas);
>> 	spin_unlock_irqrestore(&mvi->lock, flags);
>> 	t->task_done(t);
>> 	spin_lock_irqsave(&mvi->lock, flags);
>> 	spin_lock_irqsave(dev->sata_dev.ap->lock, flags_libsas);
>>
>> Cc: Darrick J. Wong<djwong@us.ibm.com>
>> Cc: Haipao Fan<haipao.fan@intel.com>
>> Cc: Maciej Trela<maciej.trela@intel.com>
>> Cc: David Milburn<dmilburn@redhat.com>
>> Signed-off-by: Dan Williams<dan.j.williams@intel.com>
>> ---
>>
>> The sas_device_gone() change could be split into its own patch for bisection
>> purposes, let me know if you want me to resubmit.  This is being driven by a
>> lockdep error in isci as it calls task->done() from lldd_execute_task()
>> when it finds lldd_dev == NULL for the ata domain_device.
>
> Dan,
>
> So, you are seeing sas_ata_task_done() trying to get the ata_port lock,
> but it has already been taken earlier in the code path?
>
> ata_scsi_queuecmd (spin_lock_irqsave(ap->lock, irq_flags)
>     __ata_scsi_queuecmd
>       ata_scsi_translate
>         ata_qc_issue
>           sas_ata_qc_issue
>             isci_task_execute_task
>               isci_task_complete_for_upper_layer
>                 sas_ata_task_done
> (spin_lock_irqsave(dev->sata_dev.ap->lock, flags)

Exactly.

sas_device_gone() should prevent an lldd from ever attempting an i/o to 
a missing sata device (one that has been notified via lldd_dev_gone). 
Although, I have only had time to verify the simple unplug case and 
sync-cache commands at driver unload.  We'll still need to handle 
missing ssp devices, but there are no lldd-external locking concerns in 
that path.

--
Dan

  reply	other threads:[~2011-02-18  0:19 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-17  3:11 [PATCH] libsas: fix/amend device gone notification in sas_deform_port() Dan Williams
2011-02-17 23:36 ` David Milburn
2011-02-18  0:19   ` Dan Williams [this message]
2011-03-04 22:44     ` David Milburn
2011-03-04 22:53       ` Dan Williams
2011-03-04 23:08         ` David Milburn
2011-03-26 22:27 ` Dan Williams

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=4D5DBB10.4030905@intel.com \
    --to=dan.j.williams@intel.com \
    --cc=Maciej.Trela@intel.com \
    --cc=dave.jiang@intel.com \
    --cc=djwong@us.ibm.com \
    --cc=dmilburn@redhat.com \
    --cc=edmund.nadolski@intel.com \
    --cc=haipao.fan@intel.com \
    --cc=jacek.danecki@intel.com \
    --cc=james.bottomley@suse.de \
    --cc=jeffrey.d.skirvin@intel.com \
    --cc=linux-scsi@vger.kernel.org \
    /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.