On 10/18/2019 12:50 AM, Hannes Reinecke wrote:
Hi James,

trying to figure this annoying lpfc_set_rrq_active() bug
I've found the nodelist pointer handling in the lpfc io buffers
a bit strange; there's a 'ndlp' pointer, but for scsi the nodelist
is primarily accessed via the 'rdata' pointer (although not everywhere).
For NVMe it's primarily the 'ndlp' pointer, apparently, but the
usage is quite confusing.
So here's a patchset to straighten things up; it primarily moves
the anonymous protocol-specific structure in the io buffer to a named
one, and always accesses the nodelist through the protocol-specific
rport data structure.

It also has the nice side-effect that the protocol-specific areas are
aligned now, so clearing the 'rdata' pointer on the scsi side will
be equivalent to clearing the 'rport' pointer on the nvme side.
And it reduces the size of the io buffer.

Let me know what you think.

Hannes Reinecke (3):
   lpfc: use named structure for combined I/O buffer
   lpfc: access nodelist through scsi-specific rdata pointer
   lpfc: access nvme nodelist through nvme rport structure

  drivers/scsi/lpfc/lpfc_init.c |   2 +-
  drivers/scsi/lpfc/lpfc_nvme.c |  56 ++++++------
  drivers/scsi/lpfc/lpfc_scsi.c | 196 +++++++++++++++++++++---------------------
  drivers/scsi/lpfc/lpfc_sli.c  |  26 +++---
  drivers/scsi/lpfc/lpfc_sli.h  |   6 +-
  5 files changed, 143 insertions(+), 143 deletions(-)


Well, the problem I think you are trying to solve is ultimately the root issue that is solved by this patch in the just-posted 12.6.0.0 patch set:
[PATCH 05/16] lpfc: Fix bad ndlp ptr in xri aborted handling

As such, I'd like to see if the 12.6.0.0 patch resolves the issue before going through all the shifting in your patches. Note: the failing routine can change as it's totally dependent on where the bogus pointer value takes you.  The key is the lpfc_sli4_sp_handle_abort_xri_wcqe() routine on the stack.

-- james

Reply via email to