target: Stop execution if CMD_T_STOP has been set
authorBart Van Assche <bart.vanassche@sandisk.com>
Mon, 9 Jan 2017 18:14:54 +0000 (10:14 -0800)
committerNicholas Bellinger <nab@linux-iscsi.org>
Thu, 9 Feb 2017 08:39:12 +0000 (00:39 -0800)
commita5eb307f37d1e9909284b6f0a8f72bf55423c137
treef4051d2d6831f2fd98d7bc5906dd4a74e2d1e689
parent2d4760ee4720d5f0eeda770ce248244166676283
target: Stop execution if CMD_T_STOP has been set

Stop execution if CMD_T_STOP has been set for a command just after
the command has been added to the device command list and before
.write_pending() is called. The following sequence can trigger this:
- transport_handle_cdb_direct() gets called. This function namely
  sets CMD_T_ACTIVE before it calls transport_generic_new_cmd().
- __transport_wait_for_tasks() is called concurrently. This function
  sets CMD_T_STOP for all active commands that have not been aborted.

Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Andy Grover <agrover@redhat.com>
Cc: David Disseldorp <ddiss@suse.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_transport.c