Message ID | 20201222101156.98308-16-kashyap.desai@broadcom.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | Introducing mpi3mr driver | expand |
On 12/22/20 11:11 AM, Kashyap Desai wrote: > This patch allows SSU and Sync Cache commands to be sent to the controller > instead of driver returning DID_NO_CONNECT during driver unload to flush > any cached data from the drive. > > Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com> > Cc: sathya.prakash@broadcom.com > --- > drivers/scsi/mpi3mr/mpi3mr_os.c | 24 +++++++++++++++++++++++- > 1 file changed, 23 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c > index 6f19e5392433..07a7b1efbc4f 100644 > --- a/drivers/scsi/mpi3mr/mpi3mr_os.c > +++ b/drivers/scsi/mpi3mr/mpi3mr_os.c > @@ -2865,6 +2865,27 @@ static int mpi3mr_target_alloc(struct scsi_target *starget) > return retval; > } > > + > +/** > + * mpi3mr_allow_scmd_to_fw - Command is allowed during shutdown > + * @scmd: SCSI Command reference > + * > + * Checks whether a CDB is allowed during shutdown or not. > + * > + * Return: TRUE for allowed commands, FALSE otherwise. > + */ > + > +inline bool mpi3mr_allow_scmd_to_fw(struct scsi_cmnd *scmd) > +{ > + switch (scmd->cmnd[0]) { > + case SYNCHRONIZE_CACHE: > + case START_STOP: > + return true; > + default: > + return false; > + } > +} > + > /** > * mpi3mr_qcmd - I/O request despatcher > * @shost: SCSI Host reference > @@ -2900,7 +2921,8 @@ static int mpi3mr_qcmd(struct Scsi_Host *shost, > goto out; > } > > - if (mrioc->stop_drv_processing) { > + if (mrioc->stop_drv_processing && > + !(mpi3mr_allow_scmd_to_fw(scmd))) { > scmd->result = DID_NO_CONNECT << 16; > scmd->scsi_done(scmd); > goto out; > Reviewed-by: Hannes Reinecke <hare@suse.com> Cheers, Hannes
diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c index 6f19e5392433..07a7b1efbc4f 100644 --- a/drivers/scsi/mpi3mr/mpi3mr_os.c +++ b/drivers/scsi/mpi3mr/mpi3mr_os.c @@ -2865,6 +2865,27 @@ static int mpi3mr_target_alloc(struct scsi_target *starget) return retval; } + +/** + * mpi3mr_allow_scmd_to_fw - Command is allowed during shutdown + * @scmd: SCSI Command reference + * + * Checks whether a CDB is allowed during shutdown or not. + * + * Return: TRUE for allowed commands, FALSE otherwise. + */ + +inline bool mpi3mr_allow_scmd_to_fw(struct scsi_cmnd *scmd) +{ + switch (scmd->cmnd[0]) { + case SYNCHRONIZE_CACHE: + case START_STOP: + return true; + default: + return false; + } +} + /** * mpi3mr_qcmd - I/O request despatcher * @shost: SCSI Host reference @@ -2900,7 +2921,8 @@ static int mpi3mr_qcmd(struct Scsi_Host *shost, goto out; } - if (mrioc->stop_drv_processing) { + if (mrioc->stop_drv_processing && + !(mpi3mr_allow_scmd_to_fw(scmd))) { scmd->result = DID_NO_CONNECT << 16; scmd->scsi_done(scmd); goto out;
This patch allows SSU and Sync Cache commands to be sent to the controller instead of driver returning DID_NO_CONNECT during driver unload to flush any cached data from the drive. Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com> Cc: sathya.prakash@broadcom.com --- drivers/scsi/mpi3mr/mpi3mr_os.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-)