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

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

 



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.

Thanks



[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