stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Sebastian Ott <sebott@linux.ibm.com>,
	Jens Remus <jremus@linux.ibm.com>,
	Benjamin Block <bblock@linux.vnet.ibm.com>,
	Steffen Maier <maier@linux.ibm.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>
Subject: [PATCH 4.9 20/96] scsi: zfcp: fix infinite iteration on ERP ready list
Date: Thu, 24 May 2018 11:38:03 +0200	[thread overview]
Message-ID: <20180524093606.774957762@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: Jens Remus <jremus@linux.ibm.com>

commit fa89adba1941e4f3b213399b81732a5c12fd9131 upstream.

zfcp_erp_adapter_reopen() schedules blocking of all of the adapter's
rports via zfcp_scsi_schedule_rports_block() and enqueues a reopen
adapter ERP action via zfcp_erp_action_enqueue(). Both are separately
processed asynchronously and concurrently.

Blocking of rports is done in a kworker by zfcp_scsi_rport_work(). It
calls zfcp_scsi_rport_block(), which then traces a DBF REC "scpdely" via
zfcp_dbf_rec_trig().  zfcp_dbf_rec_trig() acquires the DBF REC spin lock
and then iterates with list_for_each() over the adapter's ERP ready list
without holding the ERP lock. This opens a race window in which the
current list entry can be moved to another list, causing list_for_each()
to iterate forever on the wrong list, as the erp_ready_head is never
encountered as terminal condition.

Meanwhile the ERP action can be processed in the ERP thread by
zfcp_erp_thread(). It calls zfcp_erp_strategy(), which acquires the ERP
lock and then calls zfcp_erp_action_to_running() to move the ERP action
from the ready to the running list.  zfcp_erp_action_to_running() can
move the ERP action using list_move() just during the aforementioned
race window. It then traces a REC RUN "erator1" via zfcp_dbf_rec_run().
zfcp_dbf_rec_run() tries to acquire the DBF REC spin lock. If this is
held by the infinitely looping kworker, it effectively spins forever.

Example Sequence Diagram:

Process                ERP Thread             rport_work
-------------------    -------------------    -------------------
zfcp_erp_adapter_reopen()
zfcp_erp_adapter_block()
zfcp_scsi_schedule_rports_block()
lock ERP                                      zfcp_scsi_rport_work()
zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER)
list_add_tail() on ready                      !(rport_task==RPORT_ADD)
wake_up() ERP thread                          zfcp_scsi_rport_block()
zfcp_dbf_rec_trig()    zfcp_erp_strategy()    zfcp_dbf_rec_trig()
unlock ERP                                    lock DBF REC
zfcp_erp_wait()        lock ERP
|                      zfcp_erp_action_to_running()
|                                             list_for_each() ready
|                      list_move()              current entry
|                        ready to running
|                      zfcp_dbf_rec_run()       endless loop over running
|                      zfcp_dbf_rec_run_lvl()
|                      lock DBF REC spins forever

Any adapter recovery can trigger this, such as setting the device offline
or reboot.

V4.9 commit 4eeaa4f3f1d6 ("zfcp: close window with unblocked rport
during rport gone") introduced additional tracing of (un)blocking of
rports. It missed that the adapter->erp_lock must be held when calling
zfcp_dbf_rec_trig().

This fix uses the approach formerly introduced by commit aa0fec62391c
("[SCSI] zfcp: Fix sparse warning by providing new entry in dbf") that got
later removed by commit ae0904f60fab ("[SCSI] zfcp: Redesign of the debug
tracing for recovery actions.").

Introduce zfcp_dbf_rec_trig_lock(), a wrapper for zfcp_dbf_rec_trig() that
acquires and releases the adapter->erp_lock for read.

Reported-by: Sebastian Ott <sebott@linux.ibm.com>
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
Fixes: 4eeaa4f3f1d6 ("zfcp: close window with unblocked rport during rport gone")
Cc: <stable@vger.kernel.org> # 2.6.32+
Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/s390/scsi/zfcp_dbf.c  |   23 ++++++++++++++++++++++-
 drivers/s390/scsi/zfcp_ext.h  |    5 ++++-
 drivers/s390/scsi/zfcp_scsi.c |   14 +++++++-------
 3 files changed, 33 insertions(+), 9 deletions(-)

--- a/drivers/s390/scsi/zfcp_dbf.c
+++ b/drivers/s390/scsi/zfcp_dbf.c
@@ -3,7 +3,7 @@
  *
  * Debug traces for zfcp.
  *
- * Copyright IBM Corp. 2002, 2017
+ * Copyright IBM Corp. 2002, 2018
  */
 
 #define KMSG_COMPONENT "zfcp"
@@ -287,6 +287,27 @@ void zfcp_dbf_rec_trig(char *tag, struct
 	spin_unlock_irqrestore(&dbf->rec_lock, flags);
 }
 
+/**
+ * zfcp_dbf_rec_trig_lock - trace event related to triggered recovery with lock
+ * @tag: identifier for event
+ * @adapter: adapter on which the erp_action should run
+ * @port: remote port involved in the erp_action
+ * @sdev: scsi device involved in the erp_action
+ * @want: wanted erp_action
+ * @need: required erp_action
+ *
+ * The adapter->erp_lock must not be held.
+ */
+void zfcp_dbf_rec_trig_lock(char *tag, struct zfcp_adapter *adapter,
+			    struct zfcp_port *port, struct scsi_device *sdev,
+			    u8 want, u8 need)
+{
+	unsigned long flags;
+
+	read_lock_irqsave(&adapter->erp_lock, flags);
+	zfcp_dbf_rec_trig(tag, adapter, port, sdev, want, need);
+	read_unlock_irqrestore(&adapter->erp_lock, flags);
+}
 
 /**
  * zfcp_dbf_rec_run_lvl - trace event related to running recovery
--- a/drivers/s390/scsi/zfcp_ext.h
+++ b/drivers/s390/scsi/zfcp_ext.h
@@ -3,7 +3,7 @@
  *
  * External function declarations.
  *
- * Copyright IBM Corp. 2002, 2016
+ * Copyright IBM Corp. 2002, 2018
  */
 
 #ifndef ZFCP_EXT_H
@@ -34,6 +34,9 @@ extern int zfcp_dbf_adapter_register(str
 extern void zfcp_dbf_adapter_unregister(struct zfcp_adapter *);
 extern void zfcp_dbf_rec_trig(char *, struct zfcp_adapter *,
 			      struct zfcp_port *, struct scsi_device *, u8, u8);
+extern void zfcp_dbf_rec_trig_lock(char *tag, struct zfcp_adapter *adapter,
+				   struct zfcp_port *port,
+				   struct scsi_device *sdev, u8 want, u8 need);
 extern void zfcp_dbf_rec_run(char *, struct zfcp_erp_action *);
 extern void zfcp_dbf_rec_run_lvl(int level, char *tag,
 				 struct zfcp_erp_action *erp);
--- a/drivers/s390/scsi/zfcp_scsi.c
+++ b/drivers/s390/scsi/zfcp_scsi.c
@@ -3,7 +3,7 @@
  *
  * Interface to Linux SCSI midlayer.
  *
- * Copyright IBM Corp. 2002, 2017
+ * Copyright IBM Corp. 2002, 2018
  */
 
 #define KMSG_COMPONENT "zfcp"
@@ -616,9 +616,9 @@ static void zfcp_scsi_rport_register(str
 	ids.port_id = port->d_id;
 	ids.roles = FC_RPORT_ROLE_FCP_TARGET;
 
-	zfcp_dbf_rec_trig("scpaddy", port->adapter, port, NULL,
-			  ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD,
-			  ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD);
+	zfcp_dbf_rec_trig_lock("scpaddy", port->adapter, port, NULL,
+			       ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD,
+			       ZFCP_PSEUDO_ERP_ACTION_RPORT_ADD);
 	rport = fc_remote_port_add(port->adapter->scsi_host, 0, &ids);
 	if (!rport) {
 		dev_err(&port->adapter->ccw_device->dev,
@@ -640,9 +640,9 @@ static void zfcp_scsi_rport_block(struct
 	struct fc_rport *rport = port->rport;
 
 	if (rport) {
-		zfcp_dbf_rec_trig("scpdely", port->adapter, port, NULL,
-				  ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL,
-				  ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL);
+		zfcp_dbf_rec_trig_lock("scpdely", port->adapter, port, NULL,
+				       ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL,
+				       ZFCP_PSEUDO_ERP_ACTION_RPORT_DEL);
 		fc_remote_port_delete(rport);
 		port->rport = NULL;
 	}

  parent reply	other threads:[~2018-05-24  9:47 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 ` [PATCH 4.9 18/96] scsi: libsas: defer ata device eh commands to libata Greg Kroah-Hartman
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 ` Greg Kroah-Hartman [this message]
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.774957762@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=bblock@linux.vnet.ibm.com \
    --cc=jremus@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maier@linux.ibm.com \
    --cc=martin.petersen@oracle.com \
    --cc=sebott@linux.ibm.com \
    --cc=stable@vger.kernel.org \
    /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).