linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jitendra Bhivare <jitendra.bhivare@broadcom.com>
To: Mike Christie <mchristi@redhat.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>
Cc: linux-scsi@vger.kernel.org
Subject: RE: [PATCH 02/28] be2iscsi: Replace _bh with _irqsave/irqrestore
Date: Fri, 12 Aug 2016 13:25:30 +0530	[thread overview]
Message-ID: <6c0ae0e85a4ba32a23d70dd6ed99f179@mail.gmail.com> (raw)
In-Reply-To: 8ca3e0c5ced55749a0e242ddc6930421@mail.gmail.com

> -----Original Message-----
> From: Jitendra Bhivare [mailto:jitendra.bhivare@broadcom.com]
> Sent: Thursday, August 11, 2016 11:12 AM
> To: 'Mike Christie'; 'Martin K. Petersen'
> Cc: 'linux-scsi@vger.kernel.org'
> Subject: RE: [PATCH 02/28] be2iscsi: Replace _bh with _irqsave/irqrestore
>
>
>
> > -----Original Message-----
> > From: Jitendra Bhivare [mailto:jitendra.bhivare@broadcom.com]
> > Sent: Wednesday, August 10, 2016 6:16 PM
> > To: 'Mike Christie'; 'Martin K. Petersen'
> > Cc: 'linux-scsi@vger.kernel.org'
> > Subject: RE: [PATCH 02/28] be2iscsi: Replace _bh with
> > _irqsave/irqrestore
> >
> > > -----Original Message-----
> > > From: Mike Christie [mailto:mchristi@redhat.com]
> > > Sent: Tuesday, August 09, 2016 11:19 PM
> > > To: Jitendra Bhivare; Martin K. Petersen
> > > Cc: linux-scsi@vger.kernel.org
> > > Subject: Re: [PATCH 02/28] be2iscsi: Replace _bh with
> > > _irqsave/irqrestore
> > >
> > > On 08/09/2016 03:29 AM, Jitendra Bhivare wrote:
> > > >> -----Original Message-----
> > > >> From: Martin K. Petersen [mailto:martin.petersen@oracle.com]
> > > >> Sent: Tuesday, August 09, 2016 6:35 AM
> > > >> To: Mike Christie
> > > >> Cc: Jitendra Bhivare; linux-scsi@vger.kernel.org
> > > >> Subject: Re: [PATCH 02/28] be2iscsi: Replace _bh with
> > > > _irqsave/irqrestore
> > > >>
> > > >>>>>>> "Mike" == Mike Christie <mchristi@redhat.com> writes:
> > > >>
> > > >>>> In beiscsi_alloc_pdu, _bh versions of spin_lock are being used
> > > >>>> for protecting SGLs and WRBs. _bh versions are needed as the
> > > >>>> function gets invoked in process context and BLOCK_IOPOLL
> > > >>>> softirq.
> > > >>>>
> > > >>>> In spin_unlock_bh, after releasing the lock and enabling BH,
> > > >>>> do_softirq is called which executes till last SOFTIRQ.
> > > >>>>
> > > >>>> beiscsi_alloc_pdu is called under session lock. Through block
> > > >>>> layer, iSCSI stack in some cases send IOs with interrupts
> > > >>>> disabled.
> > > >>>> In such paths,
> > > >>
> > > >>
> > > >> Mike> What path is this? Is this with mq enabled or disabled?
> > > >>
> > > >> Jitendra?
> > > >>
> > > >> --
> > > >> Martin K. Petersen	Oracle Linux Engineering
> > > > [JB] Sorry for the delayed response, there was some issue with my
> > > > mail client.
> > > > There are paths block layer where IRQs are disabled with
> > > > request_queue queue_lock.
> > > > - blk_timeout_work : this triggers NOP-OUT thru'
> > > > iscsi_eh_cmd_timed_out.
> > > > - blk_execute_rq_nowait
> > >
> > > I am not sure I understand the problem/solution. Why does the patch
> > > only need to modify be2iscsi's locking? Why wouldn't you need to
> > > also change the libiscsi session lock locking? You don't need irqs
> > > to be running right? You are just doing this so the locking calls
> > > (irq vs bh) matches
> > up?
> > >
> > > Don't you also need to fix the non-mq IO path. scsi_request_fn needs
> > > a fix to use spin_lock_irqsave/spin_unlock_irqrestore because
> > > blk_execute_rq_nowait already disables them right?
> > >
> > [JB] The issue is hard lockup seen on a CPU which is waiting for
> > session lock taken by another CPU processing do_softirq. This
> > do_softirq is getting called from be2iscsi spin_unlock_bh.
> >
> > The contention gets easily exposed with be2iscsi as it data structures
> > are accessed in process context and IRQ_POLL softirq.
> >
> > iscsi_eh_cmd_timed_out gets saved because it is using base spin_lock
> > version for session lock (frwd and back).
> > iscsi_queuecommand is using _bh which is bit scary.
> >
> > Yes, that needs to be fixed too... and then this other path looks
> > buggy too - blk_run_queue (takes queue_lock with irqsave)
> > ->scsi_request_fn (unlocks it with
> > _irq)
> [JB] In this case, the other CPU executing do_softirq was too sending IO
> under
> session lock.
> When be2iscsi does spin_unlock_bh after getting resources for the IO,
> unlock_bh finds pending IRQ_POLL softirq.
>
> The issue is more to do with driver using _unlock_bh.
> It is causing a WARN_ON too in unlock_bh where ever used  for disabled
> IRQs.
[JB] My apologies. blk_execute_rq_nowait and the call trace shown is with
older kernel.
Only valid kernel trace with latest kernel is:
[  180.957062]  <IRQ>  [<ffffffff81603f36>] dump_stack+0x19/0x1b
[  180.957070]  [<ffffffff8106e28b>] warn_slowpath_common+0x6b/0xb0
[  180.957072]  [<ffffffff8106e3da>] warn_slowpath_null+0x1a/0x20
[  180.957073]  [<ffffffff81076d1a>] local_bh_enable_ip+0x7a/0xa0
[  180.957077]  [<ffffffff8160b0eb>] _raw_spin_unlock_bh+0x1b/0x40
[  180.957084]  [<ffffffffa037f753>] alloc_mgmt_sgl_handle+0x83/0xe0
[be2iscsi]
[  180.957089]  [<ffffffffa0388d9e>] beiscsi_alloc_pdu+0x21e/0x5d0
[be2iscsi]
[  180.957094]  [<ffffffffa01bec71>] __iscsi_conn_send_pdu+0x101/0x2e0
[libiscsi]
[  180.957099]  [<ffffffffa01bef78>] iscsi_send_nopout+0xb8/0x100 [libiscsi]
[  180.957104]  [<ffffffffa01bfca4>] iscsi_eh_cmd_timed_out+0x2a4/0x2d0
[libiscsi]
[  180.957107]  [<ffffffff813f56de>] scsi_times_out+0x5e/0x320

  parent reply	other threads:[~2016-08-12  8:26 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-21  9:07 [PATCH 00/28] be2iscsi: driver update 11.2.0.0 Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 01/28] be2iscsi: Fix to use correct configuration values Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 02/28] be2iscsi: Replace _bh with _irqsave/irqrestore Jitendra Bhivare
2016-08-05 18:38   ` Mike Christie
2016-08-09  1:05     ` Martin K. Petersen
2016-08-09  8:29       ` Jitendra Bhivare
2016-08-09 17:48         ` Mike Christie
2016-08-10 12:46           ` Jitendra Bhivare
2016-08-11  5:42           ` Jitendra Bhivare
2016-08-12  7:55           ` Jitendra Bhivare [this message]
2016-08-12  8:05           ` Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 03/28] be2iscsi: Replace _bh version for mcc_lock spinlock Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 04/28] be2iscsi: Reduce driver load/unload time Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 05/28] be2iscsi: Set and return right iface v4/v6 states Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 06/28] be2iscsi: Fix gateway APIs to support IPv4 & IPv6 Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 07/28] be2iscsi: Fix release of DHCP IP in static mode Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 08/28] be2iscsi: Move VLAN code to common iface_set_param Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 09/28] be2iscsi: Update iface handle before any set param Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 10/28] be2iscsi: Rename iface get/set/create/destroy APIs Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 11/28] be2iscsi: Handle only NET_PARAM in iface_get_param Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 12/28] be2iscsi: Check all zeroes IP before issuing IOCTL Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 13/28] be2iscsi: Remove alloc_mcc_tag & beiscsi_pci_soft_reset Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 14/28] be2iscsi: Remove isr_lock and dead code Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 15/28] be2iscsi: Fix checks for HBA in error state Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 16/28] be2iscsi: Fix to make boot discovery non-blocking Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 17/28] be2iscsi: Fix to add timer for UE detection Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 18/28] be2iscsi: Add IOCTL to check UER supported Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 19/28] be2iscsi: Move functions to right files Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 20/28] be2iscsi: Fix POST check and reset sequence Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 21/28] be2iscsi: Add V1 of EPFW cleanup IOCTL Jitendra Bhivare
2016-07-21  9:07 ` [PATCH 22/28] be2iscsi: Add TPE recovery feature Jitendra Bhivare
2016-07-21  9:08 ` [PATCH 23/28] be2iscsi: Fail the sessions immediately after TPE Jitendra Bhivare
2016-07-21  9:08 ` [PATCH 24/28] be2iscsi: Add FUNCTION_RESET during driver unload Jitendra Bhivare
2016-07-21  9:08 ` [PATCH 25/28] be2iscsi: Fix async PDU handling path Jitendra Bhivare
2016-07-21  9:08 ` [PATCH 26/28] be2iscsi: Update copyright information Jitendra Bhivare
2016-07-21  9:08 ` [PATCH 27/28] be2iscsi: Update the driver version Jitendra Bhivare
2016-07-21  9:08 ` [PATCH 28/28] MAINTAINERS: Update be2iscsi contact info Jitendra Bhivare
2016-08-05  1:38 ` [PATCH 00/28] be2iscsi: driver update 11.2.0.0 Martin K. Petersen
2016-08-05 16:42 ` Hannes Reinecke
  -- strict thread matches above, loose matches on Subject: below --
2016-09-23 15:08 [PATCH 02/28] be2iscsi: Replace _bh with _irqsave/irqrestore Jitendra Bhivare
2016-09-27 10:18 Jitendra Bhivare

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=6c0ae0e85a4ba32a23d70dd6ed99f179@mail.gmail.com \
    --to=jitendra.bhivare@broadcom.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=mchristi@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).