From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Jason Yan <yanaijie@huawei.com>,
Xiaofei Tan <tanxiaofei@huawei.com>,
John Garry <john.garry@huawei.com>,
Dan Williams <dan.j.williams@intel.com>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
Guenter Roeck <linux@roeck-us.net>
Subject: [PATCH 4.9 18/96] scsi: libsas: defer ata device eh commands to libata
Date: Thu, 24 May 2018 11:38:01 +0200 [thread overview]
Message-ID: <20180524093606.632176066@linuxfoundation.org> (raw)
In-Reply-To: <20180524093605.602125311@linuxfoundation.org>
4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jason Yan <yanaijie@huawei.com>
commit 318aaf34f1179b39fa9c30fa0f3288b645beee39 upstream.
When ata device doing EH, some commands still attached with tasks are
not passed to libata when abort failed or recover failed, so libata did
not handle these commands. After these commands done, sas task is freed,
but ata qc is not freed. This will cause ata qc leak and trigger a
warning like below:
WARNING: CPU: 0 PID: 28512 at drivers/ata/libata-eh.c:4037
ata_eh_finish+0xb4/0xcc
CPU: 0 PID: 28512 Comm: kworker/u32:2 Tainted: G W OE 4.14.0#1
......
Call trace:
[<ffff0000088b7bd0>] ata_eh_finish+0xb4/0xcc
[<ffff0000088b8420>] ata_do_eh+0xc4/0xd8
[<ffff0000088b8478>] ata_std_error_handler+0x44/0x8c
[<ffff0000088b8068>] ata_scsi_port_error_handler+0x480/0x694
[<ffff000008875fc4>] async_sas_ata_eh+0x4c/0x80
[<ffff0000080f6be8>] async_run_entry_fn+0x4c/0x170
[<ffff0000080ebd70>] process_one_work+0x144/0x390
[<ffff0000080ec100>] worker_thread+0x144/0x418
[<ffff0000080f2c98>] kthread+0x10c/0x138
[<ffff0000080855dc>] ret_from_fork+0x10/0x18
If ata qc leaked too many, ata tag allocation will fail and io blocked
for ever.
As suggested by Dan Williams, defer ata device commands to libata and
merge sas_eh_finish_cmd() with sas_eh_defer_cmd(). libata will handle
ata qcs correctly after this.
Signed-off-by: Jason Yan <yanaijie@huawei.com>
CC: Xiaofei Tan <tanxiaofei@huawei.com>
CC: John Garry <john.garry@huawei.com>
CC: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/scsi/libsas/sas_scsi_host.c | 33 +++++++++++++--------------------
1 file changed, 13 insertions(+), 20 deletions(-)
--- a/drivers/scsi/libsas/sas_scsi_host.c
+++ b/drivers/scsi/libsas/sas_scsi_host.c
@@ -222,6 +222,7 @@ out_done:
static void sas_eh_finish_cmd(struct scsi_cmnd *cmd)
{
struct sas_ha_struct *sas_ha = SHOST_TO_SAS_HA(cmd->device->host);
+ struct domain_device *dev = cmd_to_domain_dev(cmd);
struct sas_task *task = TO_SAS_TASK(cmd);
/* At this point, we only get called following an actual abort
@@ -230,6 +231,14 @@ static void sas_eh_finish_cmd(struct scs
*/
sas_end_task(cmd, task);
+ if (dev_is_sata(dev)) {
+ /* defer commands to libata so that libata EH can
+ * handle ata qcs correctly
+ */
+ list_move_tail(&cmd->eh_entry, &sas_ha->eh_ata_q);
+ return;
+ }
+
/* now finish the command and move it on to the error
* handler done list, this also takes it off the
* error handler pending list.
@@ -237,22 +246,6 @@ static void sas_eh_finish_cmd(struct scs
scsi_eh_finish_cmd(cmd, &sas_ha->eh_done_q);
}
-static void sas_eh_defer_cmd(struct scsi_cmnd *cmd)
-{
- struct domain_device *dev = cmd_to_domain_dev(cmd);
- struct sas_ha_struct *ha = dev->port->ha;
- struct sas_task *task = TO_SAS_TASK(cmd);
-
- if (!dev_is_sata(dev)) {
- sas_eh_finish_cmd(cmd);
- return;
- }
-
- /* report the timeout to libata */
- sas_end_task(cmd, task);
- list_move_tail(&cmd->eh_entry, &ha->eh_ata_q);
-}
-
static void sas_scsi_clear_queue_lu(struct list_head *error_q, struct scsi_cmnd *my_cmd)
{
struct scsi_cmnd *cmd, *n;
@@ -260,7 +253,7 @@ static void sas_scsi_clear_queue_lu(stru
list_for_each_entry_safe(cmd, n, error_q, eh_entry) {
if (cmd->device->sdev_target == my_cmd->device->sdev_target &&
cmd->device->lun == my_cmd->device->lun)
- sas_eh_defer_cmd(cmd);
+ sas_eh_finish_cmd(cmd);
}
}
@@ -622,12 +615,12 @@ static void sas_eh_handle_sas_errors(str
case TASK_IS_DONE:
SAS_DPRINTK("%s: task 0x%p is done\n", __func__,
task);
- sas_eh_defer_cmd(cmd);
+ sas_eh_finish_cmd(cmd);
continue;
case TASK_IS_ABORTED:
SAS_DPRINTK("%s: task 0x%p is aborted\n",
__func__, task);
- sas_eh_defer_cmd(cmd);
+ sas_eh_finish_cmd(cmd);
continue;
case TASK_IS_AT_LU:
SAS_DPRINTK("task 0x%p is at LU: lu recover\n", task);
@@ -638,7 +631,7 @@ static void sas_eh_handle_sas_errors(str
"recovered\n",
SAS_ADDR(task->dev),
cmd->device->lun);
- sas_eh_defer_cmd(cmd);
+ sas_eh_finish_cmd(cmd);
sas_scsi_clear_queue_lu(work_q, cmd);
goto Again;
}
next prev parent reply other threads:[~2018-05-24 9:38 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-24 9:37 [PATCH 4.9 00/96] 4.9.103-stable review Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 01/96] net/mlx4_core: Fix error handling in mlx4_init_port_info Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 02/96] net: test tailroom before appending to linear skb Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 03/96] packet: in packet_snd start writing at link layer allocation Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 04/96] sock_diag: fix use-after-free read in __sk_free Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 05/96] tcp: purge write queue in tcp_connect_init() Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 06/96] vmxnet3: set the DMA mask before the first DMA map operation Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 07/96] vmxnet3: use DMA memory barriers where required Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 08/96] ext2: fix a block leak Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 09/96] s390: add assembler macros for CPU alternatives Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 10/96] s390: move expoline assembler macros to a header Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 11/96] s390/crc32-vx: use expoline for indirect branches Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 12/96] s390/lib: " Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 13/96] s390/ftrace: " Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 14/96] s390/kernel: " Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 15/96] s390: move spectre sysfs attribute code Greg Kroah-Hartman
2018-05-24 9:37 ` [PATCH 4.9 16/96] s390: extend expoline to BC instructions Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 17/96] s390: use expoline thunks in the BPF JIT Greg Kroah-Hartman
2018-05-24 9:38 ` Greg Kroah-Hartman [this message]
2018-05-24 9:38 ` [PATCH 4.9 19/96] scsi: sg: allocate with __GFP_ZERO in sg_build_indirect() Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 20/96] scsi: zfcp: fix infinite iteration on ERP ready list Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 21/96] cfg80211: limit wiphy names to 128 bytes Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 22/96] hfsplus: stop workqueue when fill_super() failed Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 23/96] x86/kexec: Avoid double free_page() upon do_kexec_load() failure Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 24/96] usb: gadget: f_uac2: fix bFirstInterface in composite gadget Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 25/96] usb: dwc3: Undo PHY init if soft reset fails Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 26/96] usb: dwc3: omap: dont miss events during suspend/resume Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 27/96] usb: gadget: core: Fix use-after-free of usb_request Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 28/96] usb: gadget: fsl_udc_core: fix ep valid checks Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 29/96] usb: dwc2: Fix dwc2_hsotg_core_init_disconnected() Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 30/96] usb: cdc_acm: prevent race at write to acm while system resumes Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 31/96] USB: OHCI: Fix NULL dereference in HCDs using HCD_LOCAL_MEM Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 32/96] net/usb/qmi_wwan.c: Add USB id for lt4120 modem Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 33/96] net-usb: add qmi_wwan if on lte modem wistron neweb d18q1 Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 34/96] Bluetooth: btusb: Add USB ID 7392:a611 for Edimax EW-7611ULB Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 35/96] ALSA: usb-audio: Add native DSD support for Luxman DA-06 Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 36/96] usb: dwc3: Add SoftReset PHY synchonization delay Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 37/96] usb: dwc3: Update DWC_usb31 GTXFIFOSIZ reg fields Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 38/96] xhci: zero usb device slot_id member when disabling and freeing a xhci slot Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 39/96] usb: dwc2: Fix interval type issue Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 40/96] usb: dwc2: host: Fix transaction errors in host mode Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 41/96] usb: gadget: ffs: Let setup() return USB_GADGET_DELAYED_STATUS Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 42/96] usb: gadget: ffs: Execute copy_to_user() with USER_DS set Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 43/96] usb: gadget: udc: change comparison to bitshift when dealing with a mask Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 44/96] usb: gadget: composite: fix incorrect handling of OS desc requests Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 45/96] media: em28xx: USB bulk packet size fix Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 46/96] Bluetooth: btusb: Add device ID for RTL8822BE Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 47/96] staging: lustre: fix bug in osc_enter_cache_try Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 48/96] staging: rtl8192u: return -ENOMEM on failed allocation of priv->oldaddr Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 49/96] staging: lustre: lmv: correctly iput lmo_root Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 50/96] crypto: sunxi-ss - Add MODULE_ALIAS to sun4i-ss Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 51/96] scsi: fas216: fix sense buffer initialization Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 52/96] scsi: ufs: Enable quirk to ignore sending WRITE_SAME command Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 53/96] scsi: bnx2fc: Fix check in SCSI completion handler for timed out request Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 54/96] scsi: sym53c8xx_2: iterator underflow in sym_getsync() Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 55/96] scsi: mptfusion: Add bounds check in mptctl_hp_targetinfo() Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 56/96] scsi: qla2xxx: Avoid triggering undefined behavior in qla2x00_mbx_completion() Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 57/96] scsi: storvsc: Increase cmd_per_lun for higher speed devices Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 58/96] scsi: aacraid: fix shutdown crash when init fails Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 59/96] scsi: qla4xxx: skip error recovery in case of register disconnect Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 60/96] scsi: mpt3sas: Do not mark fw_event workqueue as WQ_MEM_RECLAIM Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 61/96] scsi: sd: Keep disk read-only when re-reading partition Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 62/96] scsi: aacraid: Insure command thread is not recursively stopped Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 63/96] scsi: mvsas: fix wrong endianness of sgpio api Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 64/96] scsi: lpfc: Fix issue_lip if link is disabled Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 65/96] scsi: lpfc: Fix soft lockup in lpfc worker thread during LIP testing Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 66/96] scsi: lpfc: Fix frequency of Release WQE CQEs Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 67/96] ASoC: au1x: Fix timeout tests in au1xac97c_ac97_read() Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 68/96] ASoC: topology: create TLV data for dapm widgets Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 69/96] ASoC: samsung: i2s: Ensure the RCLK rate is properly determined Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 70/96] clk: rockchip: Fix wrong parent for SDMMC phase clock for rk3228 Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 71/96] clk: Dont show the incorrect clock phase Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 72/96] clk: tegra: Fix pll_u rate configuration Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 73/96] media: cx23885: Set subdev host data to clk_freq pointer Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 74/96] clk: rockchip: Prevent calculating mmc phase if clock rate is zero Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 75/96] clk: samsung: s3c2410: Fix PLL rates Greg Kroah-Hartman
2018-05-24 9:38 ` [PATCH 4.9 76/96] clk: samsung: exynos7: " Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 77/96] clk: samsung: exynos5260: " Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 78/96] clk: samsung: exynos5433: " Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 79/96] clk: samsung: exynos5250: " Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 80/96] clk: samsung: exynos3250: " Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 81/96] media: dmxdev: fix error code for invalid ioctls Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 82/96] media: cx23885: Override 888 ImpactVCBe crystal frequency Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 83/96] media: s3c-camif: fix out-of-bounds array access Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 84/96] media: vb2: Fix videobuf2 to map correct area Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 85/96] media: vivid: fix incorrect capabilities for radio Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 86/96] media: cx25821: prevent out-of-bounds read on array card Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 87/96] serial: xuartps: Fix out-of-bounds access through DT alias Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 88/96] serial: samsung: Fix out-of-bounds access through serial port index Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 89/96] serial: mxs-auart: " Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 91/96] serial: fsl_lpuart: Fix out-of-bounds access through DT alias Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 92/96] serial: arc_uart: " Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 93/96] serial: 8250: Dont service RX FIFO if interrupts are disabled Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 94/96] rtc: snvs: Fix usage of snvs_rtc_enable Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 95/96] rtc: hctosys: Ensure system time doesnt overflow time_t Greg Kroah-Hartman
2018-05-24 9:39 ` [PATCH 4.9 96/96] rtc: tx4939: avoid unintended sign extension on a 24 bit shift Greg Kroah-Hartman
2018-05-24 17:32 ` [PATCH 4.9 00/96] 4.9.103-stable review Guenter Roeck
2018-05-24 18:04 ` Dan Rue
2018-05-24 19:26 ` Shuah Khan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180524093606.632176066@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=dan.j.williams@intel.com \
--cc=john.garry@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=martin.petersen@oracle.com \
--cc=stable@vger.kernel.org \
--cc=tanxiaofei@huawei.com \
--cc=yanaijie@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).