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