Re: [PATCH 23/25] lpfc: Correct upcalling nvmet_fc transport during io done downcall

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/27/18 12:33 AM, James Smart wrote:
When the transport calls into the lpfc target to release an io job
structure, which corresponds to an exchange, and if the driver was
waiting for an exchange in order to post a previously received command
to the transport, the driver immediately takes the io job and reuses
the context for the prior command and calls nvmet_fc_rcv_fcp_req()
to tell the transport about a newly received command.

Problem is, the execution of the io job release may be in the context
of the back end driver and its bio completion handlers, thus it may be
in a irq context and protection code kicks in in the bio and request
layers that are subsequently called.

Rework lpfc so that instead of immediately upcalling, queue it to a
deferred work thread and have the thread make the upcall.

Took advantage of this change to remove duplicated code with the normal
command receive path that preps the io job and upcalls nvmet_fc. Created
a common routine both paths use.

Also corrected some errors that were found during review of the context
freeing and reuse - basically unlocked operations and a somewhat disjoint
set of calls to release associated job elements. Cleaned up this path and
added locks for coherency.

Signed-off-by: Dick Kennedy <dick.kennedy@xxxxxxxxxxxx>
Signed-off-by: James Smart <jsmart2021@xxxxxxxxx>
---
  drivers/scsi/lpfc/lpfc.h       |   1 +
  drivers/scsi/lpfc/lpfc_nvmet.c | 247 ++++++++++++++++++++++-------------------
  drivers/scsi/lpfc/lpfc_nvmet.h |   1 +
  3 files changed, 137 insertions(+), 112 deletions(-)

Reviewed-by: Hannes Reinecke <hare@xxxxxxxx>

Cheers,

Hannes



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux