Re: [PATCH 07/22] csiostor: use internal command for LUN reset

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

 



On 6/29/20 3:51 PM, John Garry wrote:
On 29/06/2020 08:20, Hannes Reinecke wrote:
When issuing a LUN reset we should be allocating an
internal command to avoid overwriting the original command.

Signed-off-by: Hannes Reinecke <hare@xxxxxxx>
---
  drivers/scsi/csiostor/csio_scsi.c | 48 +++++++++++++++++++++++----------------
  1 file changed, 29 insertions(+), 19 deletions(-)

diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c
index 00cf33573136..27001fdcdcac 100644
--- a/drivers/scsi/csiostor/csio_scsi.c
+++ b/drivers/scsi/csiostor/csio_scsi.c
@@ -2057,10 +2057,12 @@ csio_tm_cbfn(struct csio_hw *hw, struct csio_ioreq *req)
  static int
  csio_eh_lun_reset_handler(struct scsi_cmnd *cmnd)
  {
-    struct csio_lnode *ln = shost_priv(cmnd->device->host);
+    struct scsi_cmnd *reset_cmnd;
+    struct scsi_device *sdev = cmnd->device;
+    struct csio_lnode *ln = shost_priv(sdev->host);
      struct csio_hw *hw = csio_lnode_to_hw(ln);
      struct csio_scsim *scsim = csio_hw_to_scsim(hw);
-    struct csio_rnode *rn = (struct csio_rnode *)(cmnd->device->hostdata);
+    struct csio_rnode *rn = (struct csio_rnode *)(sdev->hostdata);
      struct csio_ioreq *ioreq = NULL;
      struct csio_scsi_qset *sqset;
      unsigned long flags;
@@ -2073,13 +2075,13 @@ csio_eh_lun_reset_handler(struct scsi_cmnd *cmnd)
          goto fail;
      csio_dbg(hw, "Request to reset LUN:%llu (ssni:0x%x tgtid:%d)\n",
-              cmnd->device->lun, rn->flowid, rn->scsi_id);
+              sdev->lun, rn->flowid, rn->scsi_id);
      if (!csio_is_lnode_ready(ln)) {
          csio_err(hw,
               "LUN reset cannot be issued on non-ready"
               " local node vnpi:0x%x (LUN:%llu)\n",
-             ln->vnp_flowid, cmnd->device->lun);
+             ln->vnp_flowid, sdev->lun);
          goto fail;
      }
@@ -2099,17 +2101,22 @@ csio_eh_lun_reset_handler(struct scsi_cmnd *cmnd)
          csio_err(hw,
               "LUN reset cannot be issued on non-ready"
               " remote node ssni:0x%x (LUN:%llu)\n",
-             rn->flowid, cmnd->device->lun);
+             rn->flowid, sdev->lun);
          goto fail;
      }
+    reset_cmnd = scsi_get_internal_cmd(sdev, DMA_NONE, REQ_NOWAIT);

out of curiosity, do we use the tag at all or need to allocate a request here?

it seems that the current code just scribbles on the scmd host scribble parts, and now we use the internal scmd host scribble parts instead - so I'm not sure what we're really improving here.


Primary goal is to register the TMF with the block layer to make it aware that some command is outstanding.
Probably not that crucial, so I'll be dropping it for the next round.

Cheers,

Hannes
--
Dr. Hannes Reinecke            Teamlead Storage & Networking
hare@xxxxxxx                               +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer



[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