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