Commit 85fea825 authored by Hans de Goede's avatar Hans de Goede Committed by Greg Kroah-Hartman

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: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 60d9f67d
...@@ -288,8 +288,6 @@ static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller) ...@@ -288,8 +288,6 @@ static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller)
return -EBUSY; return -EBUSY;
WARN_ON_ONCE(cmdinfo->state & COMMAND_COMPLETED); WARN_ON_ONCE(cmdinfo->state & COMMAND_COMPLETED);
cmdinfo->state |= COMMAND_COMPLETED; cmdinfo->state |= COMMAND_COMPLETED;
usb_free_urb(cmdinfo->data_in_urb);
usb_free_urb(cmdinfo->data_out_urb);
if (cmdinfo->state & COMMAND_ABORTED) if (cmdinfo->state & COMMAND_ABORTED)
scmd_printk(KERN_INFO, cmnd, "abort completed\n"); scmd_printk(KERN_INFO, cmnd, "abort completed\n");
list_del(&cmdinfo->list); list_del(&cmdinfo->list);
...@@ -418,9 +416,11 @@ static void uas_data_cmplt(struct urb *urb) ...@@ -418,9 +416,11 @@ static void uas_data_cmplt(struct urb *urb)
if (cmdinfo->data_in_urb == urb) { if (cmdinfo->data_in_urb == urb) {
sdb = scsi_in(cmnd); sdb = scsi_in(cmnd);
cmdinfo->state &= ~DATA_IN_URB_INFLIGHT; cmdinfo->state &= ~DATA_IN_URB_INFLIGHT;
cmdinfo->data_in_urb = NULL;
} else if (cmdinfo->data_out_urb == urb) { } else if (cmdinfo->data_out_urb == urb) {
sdb = scsi_out(cmnd); sdb = scsi_out(cmnd);
cmdinfo->state &= ~DATA_OUT_URB_INFLIGHT; cmdinfo->state &= ~DATA_OUT_URB_INFLIGHT;
cmdinfo->data_out_urb = NULL;
} }
if (sdb == NULL) { if (sdb == NULL) {
WARN_ON_ONCE(1); WARN_ON_ONCE(1);
...@@ -450,6 +450,7 @@ static void uas_data_cmplt(struct urb *urb) ...@@ -450,6 +450,7 @@ static void uas_data_cmplt(struct urb *urb)
} }
uas_try_complete(cmnd, __func__); uas_try_complete(cmnd, __func__);
out: out:
usb_free_urb(urb);
spin_unlock_irqrestore(&devinfo->lock, flags); spin_unlock_irqrestore(&devinfo->lock, flags);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment