hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/usb/storage/uas.c
....@@ -279,17 +279,17 @@
279279
280280 switch (response_code) {
281281 case RC_INCORRECT_LUN:
282
- cmnd->result = DID_BAD_TARGET << 16;
282
+ set_host_byte(cmnd, DID_BAD_TARGET);
283283 break;
284284 case RC_TMF_SUCCEEDED:
285
- cmnd->result = DID_OK << 16;
285
+ set_host_byte(cmnd, DID_OK);
286286 break;
287287 case RC_TMF_NOT_SUPPORTED:
288
- cmnd->result = DID_TARGET_FAILURE << 16;
288
+ set_host_byte(cmnd, DID_TARGET_FAILURE);
289289 break;
290290 default:
291291 uas_log_cmd_state(cmnd, "response iu", response_code);
292
- cmnd->result = DID_ERROR << 16;
292
+ set_host_byte(cmnd, DID_ERROR);
293293 break;
294294 }
295295
....@@ -396,24 +396,18 @@
396396 struct scsi_cmnd *cmnd = urb->context;
397397 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
398398 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
399
- struct scsi_data_buffer *sdb = NULL;
399
+ struct scsi_data_buffer *sdb = &cmnd->sdb;
400400 unsigned long flags;
401401 int status = urb->status;
402402
403403 spin_lock_irqsave(&devinfo->lock, flags);
404404
405405 if (cmdinfo->data_in_urb == urb) {
406
- sdb = scsi_in(cmnd);
407406 cmdinfo->state &= ~DATA_IN_URB_INFLIGHT;
408407 cmdinfo->data_in_urb = NULL;
409408 } else if (cmdinfo->data_out_urb == urb) {
410
- sdb = scsi_out(cmnd);
411409 cmdinfo->state &= ~DATA_OUT_URB_INFLIGHT;
412410 cmdinfo->data_out_urb = NULL;
413
- }
414
- if (sdb == NULL) {
415
- WARN_ON_ONCE(1);
416
- goto out;
417411 }
418412
419413 if (devinfo->resetting)
....@@ -429,9 +423,9 @@
429423 if (status != -ENOENT && status != -ECONNRESET && status != -ESHUTDOWN)
430424 uas_log_cmd_state(cmnd, "data cmplt err", status);
431425 /* error: no data transfered */
432
- sdb->resid = sdb->length;
426
+ scsi_set_resid(cmnd, sdb->length);
433427 } else {
434
- sdb->resid = sdb->length - urb->actual_length;
428
+ scsi_set_resid(cmnd, sdb->length - urb->actual_length);
435429 }
436430 uas_try_complete(cmnd, __func__);
437431 out:
....@@ -454,8 +448,7 @@
454448 struct usb_device *udev = devinfo->udev;
455449 struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
456450 struct urb *urb = usb_alloc_urb(0, gfp);
457
- struct scsi_data_buffer *sdb = (dir == DMA_FROM_DEVICE)
458
- ? scsi_in(cmnd) : scsi_out(cmnd);
451
+ struct scsi_data_buffer *sdb = &cmnd->sdb;
459452 unsigned int pipe = (dir == DMA_FROM_DEVICE)
460453 ? devinfo->data_in_pipe : devinfo->data_out_pipe;
461454
....@@ -667,7 +660,7 @@
667660 spin_lock_irqsave(&devinfo->lock, flags);
668661
669662 if (devinfo->resetting) {
670
- cmnd->result = DID_ERROR << 16;
663
+ set_host_byte(cmnd, DID_ERROR);
671664 cmnd->scsi_done(cmnd);
672665 goto zombie;
673666 }
....@@ -694,7 +687,7 @@
694687 break;
695688 case DMA_BIDIRECTIONAL:
696689 cmdinfo->state |= ALLOC_DATA_IN_URB | SUBMIT_DATA_IN_URB;
697
- /* fall through */
690
+ fallthrough;
698691 case DMA_TO_DEVICE:
699692 cmdinfo->state |= ALLOC_DATA_OUT_URB | SUBMIT_DATA_OUT_URB;
700693 case DMA_NONE:
....@@ -711,7 +704,7 @@
711704 * of queueing, no matter how fatal the error
712705 */
713706 if (err == -ENODEV) {
714
- cmnd->result = DID_ERROR << 16;
707
+ set_host_byte(cmnd, DID_ERROR);
715708 cmnd->scsi_done(cmnd);
716709 goto zombie;
717710 }
....@@ -917,8 +910,8 @@
917910 .eh_abort_handler = uas_eh_abort_handler,
918911 .eh_device_reset_handler = uas_eh_device_reset_handler,
919912 .this_id = -1,
920
- .sg_tablesize = SG_NONE,
921913 .skip_settle_delay = 1,
914
+ .dma_boundary = PAGE_SIZE - 1,
922915 };
923916
924917 #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
....@@ -1289,5 +1282,6 @@
12891282 module_exit(uas_exit);
12901283
12911284 MODULE_LICENSE("GPL");
1285
+MODULE_IMPORT_NS(USB_STORAGE);
12921286 MODULE_AUTHOR(
12931287 "Hans de Goede <hdegoede@redhat.com>, Matthew Wilcox and Sarah Sharp");