On Mon, Jun 02, 2014 at 11:50:52AM +0200, Bart Van Assche wrote: > scsi_put_command() is either invoked before blk_start_request() or > after block layer processing has completed. scsi_cmnd.abort_work > is scheduled from inside the SCSI timeout handler. The block layer > guarantees that either the regular completion handler > (softirq_done_fn()) or the timeout handler (rq_timed_out_fn()) is > invoked but not both. This means that scsi_put_command() is never > invoked while abort_work is scheduled. Hence remove the > cancel_delayed_work() call from scsi_put_command(). > > Similarly, scsi_abort_command() is only invoked from the SCSI > timeout handler. If scsi_abort_command() is invoked for a SCSI > command with the SCSI_EH_ABORT_SCHEDULED flag set this means that > scmd_eh_abort_handler() has already invoked scsi_queue_insert() and > hence that scsi_cmnd.abort_work is no longer pending. Hence also > remove the cancel_delayed_work() call from scsi_abort_command(). > > Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> Looks good, Reviewed-by: Christoph Hellwig <hch@xxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html