lkml.org 
[lkml]   [2021]   [Jun]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 11/42] scsi: vmw_pvscsi: Set correct residual data length
    Date
    From: Matt Wang <wwentao@vmware.com>

    [ Upstream commit e662502b3a782d479e67736a5a1c169a703d853a ]

    Some commands (such as INQUIRY) may return less data than the initiator
    requested. To avoid conducting useless information, set the right residual
    count to make upper layer aware of this.

    Before (INQUIRY PAGE 0xB0 with 128B buffer):

    $ sg_raw -r 128 /dev/sda 12 01 B0 00 80 00
    SCSI Status: Good

    Received 128 bytes of data:
    00 00 b0 00 3c 01 00 00 00 00 00 00 00 00 00 00 00 ...<............
    10 00 00 00 00 00 01 00 00 00 00 00 40 00 00 08 00 ...........@....
    20 80 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 .......... .....
    30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

    After:

    $ sg_raw -r 128 /dev/sda 12 01 B0 00 80 00
    SCSI Status: Good

    Received 64 bytes of data:
    00 00 b0 00 3c 01 00 00 00 00 00 00 00 00 00 00 00 ...<............
    10 00 00 00 00 00 01 00 00 00 00 00 40 00 00 08 00 ...........@....
    20 80 00 00 00 00 00 00 00 00 00 20 00 00 00 00 00 .......... .....
    30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

    [mkp: clarified description]

    Link: https://lore.kernel.org/r/03C41093-B62E-43A2-913E-CFC92F1C70C3@vmware.com
    Signed-off-by: Matt Wang <wwentao@vmware.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/vmw_pvscsi.c | 8 +++++++-
    1 file changed, 7 insertions(+), 1 deletion(-)

    diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c
    index df6fabcce4f7..4d2172c115c6 100644
    --- a/drivers/scsi/vmw_pvscsi.c
    +++ b/drivers/scsi/vmw_pvscsi.c
    @@ -577,7 +577,13 @@ static void pvscsi_complete_request(struct pvscsi_adapter *adapter,
    case BTSTAT_SUCCESS:
    case BTSTAT_LINKED_COMMAND_COMPLETED:
    case BTSTAT_LINKED_COMMAND_COMPLETED_WITH_FLAG:
    - /* If everything went fine, let's move on.. */
    + /*
    + * Commands like INQUIRY may transfer less data than
    + * requested by the initiator via bufflen. Set residual
    + * count to make upper layer aware of the actual amount
    + * of data returned.
    + */
    + scsi_set_resid(cmd, scsi_bufflen(cmd) - e->dataLen);
    cmd->result = (DID_OK << 16);
    break;

    --
    2.30.2


    \
     
     \ /
      Last update: 2021-06-14 12:32    [W:3.869 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site