aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/storage
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2014-09-13 06:26:35 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-09-24 00:42:10 -0400
commit85fea82554ee74f0a2e17729a3911865df5fbba0 (patch)
treea761b2fd160924e1483e7cbe6cf1e49555a0fde7 /drivers/usb/storage
parent60d9f67d478e7c8ed09e3a6888b29aca2d978979 (diff)
uas: Free data urbs on completion
Now that we no longer drop our lock to unlink the data urbs, we can simply free them on completion, making their handling consistent with the other urbs. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/storage')
-rw-r--r--drivers/usb/storage/uas.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
index e92c676f8e99..b2d96fd3f5f9 100644
--- a/drivers/usb/storage/uas.c
+++ b/drivers/usb/storage/uas.c
@@ -288,8 +288,6 @@ static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller)
288 return -EBUSY; 288 return -EBUSY;
289 WARN_ON_ONCE(cmdinfo->state & COMMAND_COMPLETED); 289 WARN_ON_ONCE(cmdinfo->state & COMMAND_COMPLETED);
290 cmdinfo->state |= COMMAND_COMPLETED; 290 cmdinfo->state |= COMMAND_COMPLETED;
291 usb_free_urb(cmdinfo->data_in_urb);
292 usb_free_urb(cmdinfo->data_out_urb);
293 if (cmdinfo->state & COMMAND_ABORTED) 291 if (cmdinfo->state & COMMAND_ABORTED)
294 scmd_printk(KERN_INFO, cmnd, "abort completed\n"); 292 scmd_printk(KERN_INFO, cmnd, "abort completed\n");
295 list_del(&cmdinfo->list); 293 list_del(&cmdinfo->list);
@@ -418,9 +416,11 @@ static void uas_data_cmplt(struct urb *urb)
418 if (cmdinfo->data_in_urb == urb) { 416 if (cmdinfo->data_in_urb == urb) {
419 sdb = scsi_in(cmnd); 417 sdb = scsi_in(cmnd);
420 cmdinfo->state &= ~DATA_IN_URB_INFLIGHT; 418 cmdinfo->state &= ~DATA_IN_URB_INFLIGHT;
419 cmdinfo->data_in_urb = NULL;
421 } else if (cmdinfo->data_out_urb == urb) { 420 } else if (cmdinfo->data_out_urb == urb) {
422 sdb = scsi_out(cmnd); 421 sdb = scsi_out(cmnd);
423 cmdinfo->state &= ~DATA_OUT_URB_INFLIGHT; 422 cmdinfo->state &= ~DATA_OUT_URB_INFLIGHT;
423 cmdinfo->data_out_urb = NULL;
424 } 424 }
425 if (sdb == NULL) { 425 if (sdb == NULL) {
426 WARN_ON_ONCE(1); 426 WARN_ON_ONCE(1);
@@ -450,6 +450,7 @@ static void uas_data_cmplt(struct urb *urb)
450 } 450 }
451 uas_try_complete(cmnd, __func__); 451 uas_try_complete(cmnd, __func__);
452out: 452out:
453 usb_free_urb(urb);
453 spin_unlock_irqrestore(&devinfo->lock, flags); 454 spin_unlock_irqrestore(&devinfo->lock, flags);
454} 455}
455 456