Message ID | 20170208222507.25715-14-bart.vanassche@sandisk.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On Wed, 2017-02-08 at 14:24 -0800, Bart Van Assche wrote: > 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> > --- Applied. -- To unsubscribe from this list: send the line "unsubscribe target-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 01fd61eb2e12..1e1f1ed2ef17 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -2450,7 +2450,8 @@ transport_generic_new_cmd(struct se_cmd *cmd) target_execute_cmd(cmd); return 0; } - transport_cmd_check_stop(cmd, false, true); + if (transport_cmd_check_stop(cmd, false, true)) + return 0; ret = cmd->se_tfo->write_pending(cmd); if (ret == -EAGAIN || ret == -ENOMEM)