--- x/fs/aio.c +++ y/fs/aio.c @@ -2195,6 +2195,11 @@ SYSCALL_DEFINE3(io_cancel, aio_context_t if (kiocb->ki_res.obj == obj) { ret = kiocb->ki_cancel(&kiocb->rw); list_del_init(&kiocb->ki_list); + if (ret == 0 && kiocb->rw.ki_flags & IOCB_AIO_RW) { + struct aio_kiocb *iocb = container_of(&kiocb->rw, + struct aio_kiocb, rw); + refcount_inc(&iocb->ki_refcnt); + } break; } }