From 0c78dab389737263824722a39c1e96cf04f49043 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 17 Apr 2015 13:36:52 +0200 Subject: [PATCH] 3.19-stable patches added patches: defer-processing-of-req_preempt-requests-for-blocked-devices.patch --- ...preempt-requests-for-blocked-devices.patch | 79 +++++++++++++++++++ queue-3.19/series | 1 + 2 files changed, 80 insertions(+) create mode 100644 queue-3.19/defer-processing-of-req_preempt-requests-for-blocked-devices.patch diff --git a/queue-3.19/defer-processing-of-req_preempt-requests-for-blocked-devices.patch b/queue-3.19/defer-processing-of-req_preempt-requests-for-blocked-devices.patch new file mode 100644 index 00000000000..a209341a7ed --- /dev/null +++ b/queue-3.19/defer-processing-of-req_preempt-requests-for-blocked-devices.patch @@ -0,0 +1,79 @@ +From bba0bdd7ad4713d82338bcd9b72d57e9335a664b Mon Sep 17 00:00:00 2001 +From: Bart Van Assche +Date: Wed, 4 Mar 2015 10:31:47 +0100 +Subject: Defer processing of REQ_PREEMPT requests for blocked devices + +From: Bart Van Assche + +commit bba0bdd7ad4713d82338bcd9b72d57e9335a664b upstream. + +SCSI transport drivers and SCSI LLDs block a SCSI device if the +transport layer is not operational. This means that in this state +no requests should be processed, even if the REQ_PREEMPT flag has +been set. This patch avoids that a rescan shortly after a cable +pull sporadically triggers the following kernel oops: + +BUG: unable to handle kernel paging request at ffffc9001a6bc084 +IP: [] mlx4_ib_post_send+0xd2/0xb30 [mlx4_ib] +Process rescan-scsi-bus (pid: 9241, threadinfo ffff88053484a000, task ffff880534aae100) +Call Trace: + [] srp_post_send+0x65/0x70 [ib_srp] + [] srp_queuecommand+0x1cf/0x3e0 [ib_srp] + [] scsi_dispatch_cmd+0x101/0x280 [scsi_mod] + [] scsi_request_fn+0x411/0x4d0 [scsi_mod] + [] __blk_run_queue+0x27/0x30 + [] blk_execute_rq_nowait+0x82/0x110 + [] blk_execute_rq+0x62/0xf0 + [] scsi_execute+0xe8/0x190 [scsi_mod] + [] scsi_execute_req+0xa3/0x130 [scsi_mod] + [] scsi_probe_lun+0x17a/0x450 [scsi_mod] + [] scsi_probe_and_add_lun+0x156/0x480 [scsi_mod] + [] __scsi_scan_target+0xdf/0x1f0 [scsi_mod] + [] scsi_scan_host_selected+0x183/0x1c0 [scsi_mod] + [] scsi_scan+0xdb/0xe0 [scsi_mod] + [] store_scan+0x13/0x20 [scsi_mod] + [] sysfs_write_file+0xcb/0x160 + [] vfs_write+0xce/0x140 + [] sys_write+0x53/0xa0 + [] system_call_fastpath+0x16/0x1b + [<00007f611c9d9300>] 0x7f611c9d92ff + +Reported-by: Max Gurtuvoy +Signed-off-by: Bart Van Assche +Reviewed-by: Mike Christie +Signed-off-by: James Bottomley +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/scsi/scsi_lib.c | 4 +++- + include/linux/blk_types.h | 4 +++- + 2 files changed, 6 insertions(+), 2 deletions(-) + +--- a/drivers/scsi/scsi_lib.c ++++ b/drivers/scsi/scsi_lib.c +@@ -1311,9 +1311,11 @@ scsi_prep_state_check(struct scsi_device + "rejecting I/O to dead device\n"); + ret = BLKPREP_KILL; + break; +- case SDEV_QUIESCE: + case SDEV_BLOCK: + case SDEV_CREATED_BLOCK: ++ ret = BLKPREP_DEFER; ++ break; ++ case SDEV_QUIESCE: + /* + * If the devices is blocked we defer normal commands. + */ +--- a/include/linux/blk_types.h ++++ b/include/linux/blk_types.h +@@ -181,7 +181,9 @@ enum rq_flag_bits { + __REQ_ELVPRIV, /* elevator private data attached */ + __REQ_FAILED, /* set if the request failed */ + __REQ_QUIET, /* don't worry about errors */ +- __REQ_PREEMPT, /* set for "ide_preempt" requests */ ++ __REQ_PREEMPT, /* set for "ide_preempt" requests and also ++ for requests for which the SCSI "quiesce" ++ state must be ignored. */ + __REQ_ALLOCED, /* request came from our alloc pool */ + __REQ_COPY_USER, /* contains copies of user pages */ + __REQ_FLUSH_SEQ, /* request for flush sequence */ diff --git a/queue-3.19/series b/queue-3.19/series index 956f4de3a96..39c2a85b50a 100644 --- a/queue-3.19/series +++ b/queue-3.19/series @@ -53,3 +53,4 @@ radeon-do-not-directly-dereference-pointers-to-bios-area.patch usb-keyspan_pda-add-new-device-id.patch usb-ftdi_sio-added-custom-pid-for-synapse-wireless-product.patch usb-ftdi_sio-use-jtag-quirk-for-snap-connect-e10.patch +defer-processing-of-req_preempt-requests-for-blocked-devices.patch -- 2.47.3