On 17/12/2015 02:15, Fam Zheng wrote: >> > if (notifier) { >> > notifier_list_add(&req->cancel_notifiers, notifier); >> > } >> > - if (req->io_canceled) { >> > - return; >> > - } >> > scsi_req_ref(req); >> > scsi_req_dequeue(req); >> > req->io_canceled = true; > if (req->aiocb) { > blk_aio_cancel_async(req->aiocb); > } else { > scsi_req_cancel_complete(req); > } > > A second TMF must be blk_aio_cancel_async case, otherwise the first one would > have already completed the request synchronously in scsi_req_cancel_complete.
Good point. > With that in mind, I think returning early is not a problem. But I suppose > these are also idempotent so this change is not breaking anything, either. Right, the issue is that all these calls are idempotent, but the notifier may not; that is why I prefer to be safe and ensure that all notifier additions are matched by a notify. But you explained well why this should be safe, I'll add a note to the commit message. Paolo