On Wed, Nov 27, 2024 at 1:13 PM Cathy Avery <cavery@xxxxxxxxxx> wrote: > > This patch partially reverts > > commit 812fe6420a6e789db68f18cdb25c5c89f4561334 > Author: Michael Kelley <mikelley@xxxxxxxxxxxxx> > Date: Fri Aug 25 10:21:24 2023 -0700 > > scsi: storvsc: Handle additional SRB status values > > HyperV does not support MAINTENANCE_IN resulting in FC passthrough > returning the SRB_STATUS_DATA_OVERRUN value. Now that SRB_STATUS_DATA_OVERRUN > is treated as an error multipath ALUA paths go into a faulty state as multipath > ALUA submits RTPG commands via MAINTENANCE_IN. > > [ 3.215560] hv_storvsc 1d69d403-9692-4460-89f9-a8cbcc0f94f3: > tag#230 cmd 0xa3 status: scsi 0x0 srb 0x12 hv 0xc0000001 > [ 3.215572] scsi 1:0:0:32: alua: rtpg failed, result 458752 > > MAINTENANCE_IN now returns success to avoid the error path as > is currently done with INQUIRY and MODE_SENSE. > > Suggested-by: Michael Kelley <mhklinux@xxxxxxxxxxx> > Signed-off-by: Cathy Avery <cavery@xxxxxxxxxx> > --- > Changes since v1: > - Handle error and logging by returning success as previously > done with INQUIRY and MODE_SENSE [Michael Kelley]. > --- > drivers/scsi/storvsc_drv.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c > index 7ceb982040a5..d0b55c1fa908 100644 > --- a/drivers/scsi/storvsc_drv.c > +++ b/drivers/scsi/storvsc_drv.c > @@ -149,6 +149,8 @@ struct hv_fc_wwn_packet { > */ > static int vmstor_proto_version; > > +static bool hv_dev_is_fc(struct hv_device *hv_dev); > + > #define STORVSC_LOGGING_NONE 0 > #define STORVSC_LOGGING_ERROR 1 > #define STORVSC_LOGGING_WARN 2 > @@ -1138,6 +1140,7 @@ static void storvsc_on_io_completion(struct storvsc_device *stor_device, > * not correctly handle: > * INQUIRY command with page code parameter set to 0x80 > * MODE_SENSE command with cmd[2] == 0x1c > + * MAINTENANCE_IN is not supported by HyperV FC passthrough > * > * Setup srb and scsi status so this won't be fatal. > * We do this so we can distinguish truly fatal failues > @@ -1145,7 +1148,9 @@ static void storvsc_on_io_completion(struct storvsc_device *stor_device, > */ > > if ((stor_pkt->vm_srb.cdb[0] == INQUIRY) || > - (stor_pkt->vm_srb.cdb[0] == MODE_SENSE)) { > + (stor_pkt->vm_srb.cdb[0] == MODE_SENSE) || > + (stor_pkt->vm_srb.cdb[0] == MAINTENANCE_IN && > + hv_dev_is_fc(device))) { > vstor_packet->vm_srb.scsi_status = 0; > vstor_packet->vm_srb.srb_status = SRB_STATUS_SUCCESS; > } > -- > 2.42.0 > Reviewed-by: Ewan D. Milne <emilne@xxxxxxxxxx>