From 3bf3ca99de2ec022dcb534cce6ff00180bf25445 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 30 Nov 2012 11:54:43 +0100 Subject: [PATCH] --- yaml --- r: 354555 b: refs/heads/master c: 5d390403fee54a64c660b7d42f7b38d99a486b88 h: refs/heads/master i: 354553: cf0ef9c8089bee5dcaae2b2aa6ca6467d72d18e4 354551: 95ce84dbc00d1067f03531bdf33b7419d7bcd615 v: v3 --- [refs] | 2 +- trunk/drivers/usb/storage/uas.c | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 1409cb6c4288..565f3ed1d860 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: efefecf33adefcd28edfd3cee282aa9cbc3374ca +refs/heads/master: 5d390403fee54a64c660b7d42f7b38d99a486b88 diff --git a/trunk/drivers/usb/storage/uas.c b/trunk/drivers/usb/storage/uas.c index 05f1f2b8c33b..5416f2a8f566 100644 --- a/trunk/drivers/usb/storage/uas.c +++ b/trunk/drivers/usb/storage/uas.c @@ -715,8 +715,23 @@ static int uas_eh_abort_handler(struct scsi_cmnd *cmnd) uas_log_cmd_state(cmnd, __func__); spin_lock_irqsave(&devinfo->lock, flags); cmdinfo->state |= COMMAND_ABORTED; - spin_unlock_irqrestore(&devinfo->lock, flags); - ret = uas_eh_task_mgmt(cmnd, "ABORT TASK", TMF_ABORT_TASK); + if (cmdinfo->state & IS_IN_WORK_LIST) { + spin_lock(&uas_work_lock); + list_del(&cmdinfo->list); + cmdinfo->state &= ~IS_IN_WORK_LIST; + spin_unlock(&uas_work_lock); + } + if (cmdinfo->state & COMMAND_INFLIGHT) { + spin_unlock_irqrestore(&devinfo->lock, flags); + ret = uas_eh_task_mgmt(cmnd, "ABORT TASK", TMF_ABORT_TASK); + } else { + spin_unlock_irqrestore(&devinfo->lock, flags); + uas_unlink_data_urbs(devinfo, cmdinfo); + spin_lock_irqsave(&devinfo->lock, flags); + uas_try_complete(cmnd, __func__); + spin_unlock_irqrestore(&devinfo->lock, flags); + ret = SUCCESS; + } return ret; }