Revision c54eeffbe9338fa982dc853d816fda9202a13b5a authored by Nicholas Bellinger on 07 December 2016, 06:45:46 UTC, committed by Nicholas Bellinger on 08 February 2017, 15:47:19 UTC
This patch fixes a bug where incoming task management requests can be explicitly aborted during an active LUN_RESET, but who's struct work_struct are canceled in-flight before execution. This occurs when core_tmr_drain_tmr_list() invokes cancel_work_sync() for the incoming se_tmr_req->task_cmd->work, resulting in cmd->work for target_tmr_work() never getting invoked and the aborted TMR waiting indefinately within transport_wait_for_tasks(). To address this case, perform a CMD_T_ABORTED check early in transport_generic_handle_tmr(), and invoke the normal path via transport_cmd_check_stop_to_fabric() to complete any TMR kthreads blocked waiting for CMD_T_STOP in transport_wait_for_tasks(). Also, move the TRANSPORT_ISTATE_PROCESSING assignment earlier into transport_generic_handle_tmr() so the existing check in core_tmr_drain_tmr_list() avoids attempting abort the incoming se_tmr_req->task_cmd->work if it has already been queued into se_device->tmr_wq. Reported-by: Rob Millner <rlm@daterainc.com> Tested-by: Rob Millner <rlm@daterainc.com> Cc: Rob Millner <rlm@daterainc.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Cc: stable@vger.kernel.org # 3.14+ Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
1 parent 0583c26
File | Mode | Size |
---|---|---|
Makefile | -rw-r--r-- | 377 bytes |
compat.c | -rw-r--r-- | 19.1 KB |
compat_mq.c | -rw-r--r-- | 3.9 KB |
ipc_sysctl.c | -rw-r--r-- | 5.4 KB |
mq_sysctl.c | -rw-r--r-- | 2.9 KB |
mqueue.c | -rw-r--r-- | 35.7 KB |
msg.c | -rw-r--r-- | 23.5 KB |
msgutil.c | -rw-r--r-- | 3.6 KB |
namespace.c | -rw-r--r-- | 4.5 KB |
sem.c | -rw-r--r-- | 54.8 KB |
shm.c | -rw-r--r-- | 33.4 KB |
syscall.c | -rw-r--r-- | 2.3 KB |
util.c | -rw-r--r-- | 21.1 KB |
util.h | -rw-r--r-- | 6.4 KB |
Computing file changes ...