On 7/7/2022, Dmitry Bogdanov wrote: > Hi Thinh, > > On Wed, Jul 06, 2022 at 04:34:49PM -0700, Thinh Nguyen wrote: >> If the tmr_notify is not implemented, simply execute a generic command >> completion to notify the command abort. > Why? What are you trying to fix? If tmr_notify() is not implemented (which most don't), then the user won't get notified of the command completion. I was trying to directly notify the user via target_complete_cmd(). It may not be the right way to handle this, any advise? Thanks, Thinh >> Signed-off-by: Thinh Nguyen <Thinh.Nguyen@xxxxxxxxxxxx> >> --- >> drivers/target/target_core_tmr.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/drivers/target/target_core_tmr.c b/drivers/target/target_core_tmr.c >> index 7a7e24069ba7..2af80d0998bf 100644 >> --- a/drivers/target/target_core_tmr.c >> +++ b/drivers/target/target_core_tmr.c >> @@ -14,6 +14,7 @@ >> #include <linux/spinlock.h> >> #include <linux/list.h> >> #include <linux/export.h> >> +#include <scsi/scsi_proto.h> >> >> #include <target/target_core_base.h> >> #include <target/target_core_backend.h> >> @@ -150,6 +151,9 @@ void core_tmr_abort_task( >> if (dev->transport->tmr_notify) >> dev->transport->tmr_notify(dev, TMR_ABORT_TASK, >> &aborted_list); >> + else >> + target_complete_cmd(se_cmd, >> + SAM_STAT_TASK_ABORTED); > That is wrong and breaks a command lifecycle and command kref counting. > target_complete_cmd is used to be called by a backend driver. >> >> list_del_init(&se_cmd->state_list); >> target_put_cmd_and_wait(se_cmd);