提交 43cd99cb 编写于 作者: H Hans de Goede 提交者: Greg Kroah-Hartman

uas: Drop inflight list

We've the same info doubled in both the inflight list and the cmnd array,
drop the list.
Signed-off-by: NHans de Goede <hdegoede@redhat.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 9c15c573
master alk-4.19.24 alk-4.19.30 alk-4.19.34 alk-4.19.36 alk-4.19.43 alk-4.19.48 alk-4.19.57 ck-4.19.67 ck-4.19.81 ck-4.19.91 github/fork/deepanshu1422/fix-typo-in-comment github/fork/haosdent/fix-typo linux-next v4.19.91 v4.19.90 v4.19.89 v4.19.88 v4.19.87 v4.19.86 v4.19.85 v4.19.84 v4.19.83 v4.19.82 v4.19.81 v4.19.80 v4.19.79 v4.19.78 v4.19.77 v4.19.76 v4.19.75 v4.19.74 v4.19.73 v4.19.72 v4.19.71 v4.19.70 v4.19.69 v4.19.68 v4.19.67 v4.19.66 v4.19.65 v4.19.64 v4.19.63 v4.19.62 v4.19.61 v4.19.60 v4.19.59 v4.19.58 v4.19.57 v4.19.56 v4.19.55 v4.19.54 v4.19.53 v4.19.52 v4.19.51 v4.19.50 v4.19.49 v4.19.48 v4.19.47 v4.19.46 v4.19.45 v4.19.44 v4.19.43 v4.19.42 v4.19.41 v4.19.40 v4.19.39 v4.19.38 v4.19.37 v4.19.36 v4.19.35 v4.19.34 v4.19.33 v4.19.32 v4.19.31 v4.19.30 v4.19.29 v4.19.28 v4.19.27 v4.19.26 v4.19.25 v4.19.24 v4.19.23 v4.19.22 v4.19.21 v4.19.20 v4.19.19 v4.19.18 v4.19.17 v4.19.16 v4.19.15 v4.19.14 v4.19.13 v4.19.12 v4.19.11 v4.19.10 v4.19.9 v4.19.8 v4.19.7 v4.19.6 v4.19.5 v4.19.4 v4.19.3 v4.19.2 v4.19.1 v4.19 v4.19-rc8 v4.19-rc7 v4.19-rc6 v4.19-rc5 v4.19-rc4 v4.19-rc3 v4.19-rc2 v4.19-rc1 ck-release-21 ck-release-20 ck-release-19.2 ck-release-19.1 ck-release-19 ck-release-18 ck-release-17.2 ck-release-17.1 ck-release-17 ck-release-16 ck-release-15.1 ck-release-15 ck-release-14 ck-release-13.2 ck-release-13 ck-release-12 ck-release-11 ck-release-10 ck-release-9 ck-release-7 alk-release-15 alk-release-14 alk-release-13.2 alk-release-13 alk-release-12 alk-release-11 alk-release-10 alk-release-9 alk-release-7
无相关合并请求
...@@ -61,7 +61,6 @@ struct uas_dev_info { ...@@ -61,7 +61,6 @@ struct uas_dev_info {
struct scsi_cmnd *cmnd[MAX_CMNDS]; struct scsi_cmnd *cmnd[MAX_CMNDS];
spinlock_t lock; spinlock_t lock;
struct work_struct work; struct work_struct work;
struct list_head inflight_list;
}; };
enum { enum {
...@@ -87,7 +86,6 @@ struct uas_cmd_info { ...@@ -87,7 +86,6 @@ struct uas_cmd_info {
struct urb *cmd_urb; struct urb *cmd_urb;
struct urb *data_in_urb; struct urb *data_in_urb;
struct urb *data_out_urb; struct urb *data_out_urb;
struct list_head list;
}; };
/* I hate forward declarations, but I actually have a loop */ /* I hate forward declarations, but I actually have a loop */
...@@ -103,18 +101,21 @@ static void uas_do_work(struct work_struct *work) ...@@ -103,18 +101,21 @@ static void uas_do_work(struct work_struct *work)
struct uas_dev_info *devinfo = struct uas_dev_info *devinfo =
container_of(work, struct uas_dev_info, work); container_of(work, struct uas_dev_info, work);
struct uas_cmd_info *cmdinfo; struct uas_cmd_info *cmdinfo;
struct scsi_cmnd *cmnd;
unsigned long flags; unsigned long flags;
int err; int i, err;
spin_lock_irqsave(&devinfo->lock, flags); spin_lock_irqsave(&devinfo->lock, flags);
if (devinfo->resetting) if (devinfo->resetting)
goto out; goto out;
list_for_each_entry(cmdinfo, &devinfo->inflight_list, list) { for (i = 0; i < devinfo->qdepth; i++) {
struct scsi_pointer *scp = (void *)cmdinfo; if (!devinfo->cmnd[i])
struct scsi_cmnd *cmnd = container_of(scp, struct scsi_cmnd, continue;
SCp);
cmnd = devinfo->cmnd[i];
cmdinfo = (void *)&cmnd->SCp;
if (!(cmdinfo->state & IS_IN_WORK_LIST)) if (!(cmdinfo->state & IS_IN_WORK_LIST))
continue; continue;
...@@ -143,15 +144,17 @@ static void uas_add_work(struct uas_cmd_info *cmdinfo) ...@@ -143,15 +144,17 @@ static void uas_add_work(struct uas_cmd_info *cmdinfo)
static void uas_zap_pending(struct uas_dev_info *devinfo, int result) static void uas_zap_pending(struct uas_dev_info *devinfo, int result)
{ {
struct uas_cmd_info *cmdinfo; struct uas_cmd_info *cmdinfo;
struct uas_cmd_info *temp; struct scsi_cmnd *cmnd;
unsigned long flags; unsigned long flags;
int err; int i, err;
spin_lock_irqsave(&devinfo->lock, flags); spin_lock_irqsave(&devinfo->lock, flags);
list_for_each_entry_safe(cmdinfo, temp, &devinfo->dead_list, list) { for (i = 0; i < devinfo->qdepth; i++) {
struct scsi_pointer *scp = (void *)cmdinfo; if (!devinfo->cmnd[i])
struct scsi_cmnd *cmnd = container_of(scp, struct scsi_cmnd, continue;
SCp);
cmnd = devinfo->cmnd[i];
cmdinfo = (void *)&cmnd->SCp;
uas_log_cmd_state(cmnd, __func__); uas_log_cmd_state(cmnd, __func__);
/* Sense urbs were killed, clear COMMAND_INFLIGHT manually */ /* Sense urbs were killed, clear COMMAND_INFLIGHT manually */
cmdinfo->state &= ~COMMAND_INFLIGHT; cmdinfo->state &= ~COMMAND_INFLIGHT;
...@@ -260,7 +263,6 @@ static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller) ...@@ -260,7 +263,6 @@ static int uas_try_complete(struct scsi_cmnd *cmnd, const char *caller)
cmdinfo->state |= COMMAND_COMPLETED; cmdinfo->state |= COMMAND_COMPLETED;
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);
devinfo->cmnd[uas_get_tag(cmnd) - 1] = NULL; devinfo->cmnd[uas_get_tag(cmnd) - 1] = NULL;
cmnd->scsi_done(cmnd); cmnd->scsi_done(cmnd);
return 0; return 0;
...@@ -707,7 +709,6 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd, ...@@ -707,7 +709,6 @@ static int uas_queuecommand_lck(struct scsi_cmnd *cmnd,
} }
devinfo->cmnd[stream - 1] = cmnd; devinfo->cmnd[stream - 1] = cmnd;
list_add_tail(&cmdinfo->list, &devinfo->inflight_list);
spin_unlock_irqrestore(&devinfo->lock, flags); spin_unlock_irqrestore(&devinfo->lock, flags);
return 0; return 0;
} }
...@@ -921,7 +922,6 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id) ...@@ -921,7 +922,6 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
init_usb_anchor(&devinfo->data_urbs); init_usb_anchor(&devinfo->data_urbs);
spin_lock_init(&devinfo->lock); spin_lock_init(&devinfo->lock);
INIT_WORK(&devinfo->work, uas_do_work); INIT_WORK(&devinfo->work, uas_do_work);
INIT_LIST_HEAD(&devinfo->inflight_list);
result = uas_configure_endpoints(devinfo); result = uas_configure_endpoints(devinfo);
if (result) if (result)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
反馈
建议
客服 返回
顶部