| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: Alan Stern <stern@rowland.harvard.edu> |
| Date: Tue, 16 May 2017 11:47:52 -0400 |
| Subject: USB: ene_usb6250: fix SCSI residue overwriting |
| |
| From: Alan Stern <stern@rowland.harvard.edu> |
| |
| |
| [ Upstream commit aa18c4b6e0e39bfb00af48734ec24bc189ac9909 ] |
| |
| In the ene_usb6250 sub-driver for usb-storage, the SCSI residue is not |
| reported correctly. The residue is initialized to 0, but this value |
| is overwritten whenever the driver sends firmware to the card reader |
| before performing the current command. As a result, a valid READ or |
| WRITE operation appears to have failed, causing the SCSI core to retry |
| the command multiple times and eventually fail. |
| |
| This patch fixes the problem by resetting the SCSI residue to 0 after |
| sending firmware to the device. |
| |
| Signed-off-by: Alan Stern <stern@rowland.harvard.edu> |
| Reported-and-tested-by: Andreas Hartmann <andihartmann@01019freenet.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/usb/storage/ene_ub6250.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/drivers/usb/storage/ene_ub6250.c |
| +++ b/drivers/usb/storage/ene_ub6250.c |
| @@ -1942,6 +1942,8 @@ static int ene_load_bincode(struct us_da |
| bcb->CDB[0] = 0xEF; |
| |
| result = ene_send_scsi_cmd(us, FDIR_WRITE, buf, 0); |
| + if (us->srb != NULL) |
| + scsi_set_resid(us->srb, 0); |
| info->BIN_FLAG = flag; |
| kfree(buf); |
| |