mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-25 15:13:35 +00:00
fuse: return -EIOCBQUEUED from fuse_direct_IO() for all async requests
If request submission fails for an async request (i.e., get_user_pages() returns -ERESTARTSYS), we currently skip the -EIOCBQUEUED return and drop into wait_for_sync_kiocb() forever. Avoid this by always returning -EIOCBQUEUED for async requests. If an error occurs, the error is passed into fuse_aio_complete(), returned via aio_complete() and thus propagated to userspace via io_getevents(). Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Maxim Patlasov <MPatlasov@parallels.com> Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
This commit is contained in:
parent
28420dad23
commit
c9ecf989cc
@ -2432,7 +2432,7 @@ fuse_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov,
|
|||||||
fuse_aio_complete(io, ret < 0 ? ret : 0, -1);
|
fuse_aio_complete(io, ret < 0 ? ret : 0, -1);
|
||||||
|
|
||||||
/* we have a non-extending, async request, so return */
|
/* we have a non-extending, async request, so return */
|
||||||
if (ret > 0 && !is_sync_kiocb(iocb))
|
if (!is_sync_kiocb(iocb))
|
||||||
return -EIOCBQUEUED;
|
return -EIOCBQUEUED;
|
||||||
|
|
||||||
ret = wait_on_sync_kiocb(iocb);
|
ret = wait_on_sync_kiocb(iocb);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user