linux/drivers/target
Roland Dreier d5627acba9 iscsi-target: Fix missed wakeup race in TX thread
The sleeping code in iscsi_target_tx_thread() is susceptible to the classic
missed wakeup race:

 - TX thread finishes handle_immediate_queue() and handle_response_queue(),
   thinks both queues are empty.
 - Another thread adds a queue entry and does wake_up_process(), which does
   nothing because the TX thread is still awake.
 - TX thread does schedule_timeout() and sleeps forever.

In practice this can kill an iSCSI connection if for example an initiator
does single-threaded writes and the target misses the wakeup window when
queueing an R2T; in this case the connection will be stuck until the
initiator loses patience and does some task management operation (or kills
the connection entirely).

Fix this by converting to wait_event_interruptible(), which does not
suffer from this sort of race.

Signed-off-by: Roland Dreier <roland@purestorage.com>
Cc: Andy Grover <agrover@redhat.com>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Christoph Hellwig <hch@lst.de>
Cc: stable@vger.kernel.org
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
2012-11-01 00:38:44 -07:00
..
iscsi iscsi-target: Fix missed wakeup race in TX thread 2012-11-01 00:38:44 -07:00
loopback tcm_loop: Convert I/O path to use target_submit_cmd_map_sgls 2012-10-02 14:16:11 -07:00
sbp sbp-target: fix return value check in sbp_register_configfs() 2012-09-22 16:29:52 -07:00
tcm_fc tcm_fc: move the dereference below the NULL test 2012-09-17 18:04:09 -07:00
Kconfig sbp-target: Initial merge of firewire/ieee-1394 target mode support 2012-05-09 15:25:17 -07:00
Makefile target: move code for CDB emulation 2012-07-16 17:27:45 -07:00
target_core_alua.c target: Fix minor spelling typos in drivers/target 2012-09-17 17:13:31 -07:00
target_core_alua.h target: Add MI_REPORT_TARGET_PGS ext. header + implict_trans_secs attribute 2012-05-17 00:45:58 -07:00
target_core_configfs.c target: Don't return success from module_init() if setup fails 2012-11-01 00:38:31 -07:00
target_core_device.c target: Avoid integer overflow in se_dev_align_max_sectors() 2012-11-01 00:38:44 -07:00
target_core_fabric_configfs.c target: remove unused including <generated/utsrelease.h> 2012-09-17 17:13:34 -07:00
target_core_fabric_lib.c target: Fix minor spelling typos in drivers/target 2012-09-17 17:13:31 -07:00
target_core_file.c target/file: Re-enable optional fd_buffered_io=1 operation 2012-10-02 13:15:21 -07:00
target_core_file.h target/file: Re-enable optional fd_buffered_io=1 operation 2012-10-02 13:15:21 -07:00
target_core_hba.c target: header reshuffle, part2 2011-12-14 11:26:05 +00:00
target_core_iblock.c Merge branch 'for-3.7/core' of git://git.kernel.dk/linux-block 2012-10-11 09:04:23 +09:00
target_core_iblock.h target/iblock: Add parameter to specify read-only devices 2012-07-16 17:29:11 -07:00
target_core_internal.h target: refactor core_update_device_list_for_node() 2012-07-16 17:35:24 -07:00
target_core_pr.c target: move the dereference below the NULL test 2012-09-17 18:04:14 -07:00
target_core_pr.h target: replace ->execute_task with ->execute_cmd 2012-05-06 15:11:14 -07:00
target_core_pscsi.c target: Fix minor spelling typos in drivers/target 2012-09-17 17:13:31 -07:00
target_core_pscsi.h target: remove struct se_task 2012-05-06 15:11:26 -07:00
target_core_rd.c target: Drop se_subsystem_api->[write_cache,fua_write]_emulated flags 2012-09-17 17:13:34 -07:00
target_core_rd.h target: don't limit transfer sizes for the ramdisk backend 2012-04-14 17:40:30 -07:00
target_core_sbc.c target: reintroduce some obsolete SCSI-2 commands 2012-10-26 16:49:40 -07:00
target_core_spc.c target: Re-add explict zeroing of INQUIRY bounce buffer memory 2012-10-31 22:17:12 -07:00
target_core_stat.c target: remove unused including <generated/utsrelease.h> 2012-09-17 17:13:34 -07:00
target_core_tmr.c target: replace the processing thread with a TMR work queue 2012-07-16 17:35:21 -07:00
target_core_tpg.c target: Fix minor spelling typos in drivers/target 2012-09-17 17:13:31 -07:00
target_core_transport.c target: Fix double-free of se_cmd in target_complete_tmr_failure 2012-10-26 16:21:20 -07:00
target_core_ua.c target: Use array_zalloc for device_list 2012-03-15 19:15:51 -07:00
target_core_ua.h