fuse: allocate for_background dio requests based on io->async state
Commit8b41e671
introduced explicit background checking for fuse_req structures with BUG_ON() checks for the appropriate type of request in in the associated send functions. Commitbcba24cc
introduced the ability to send dio requests as background requests but does not update the request allocation based on the type of I/O request. As a result, a BUG_ON() triggers in the fuse_request_send_background() background path if an async I/O is sent. Allocate a request based on the async state of the fuse_io_priv to avoid the BUG. Signed-off-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
This commit is contained in:
parent
f722406faa
commit
de82b92301
|
@ -1278,7 +1278,10 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, const struct iovec *iov,
|
|||
|
||||
iov_iter_init(&ii, iov, nr_segs, count, 0);
|
||||
|
||||
req = fuse_get_req(fc, fuse_iter_npages(&ii));
|
||||
if (io->async)
|
||||
req = fuse_get_req_for_background(fc, fuse_iter_npages(&ii));
|
||||
else
|
||||
req = fuse_get_req(fc, fuse_iter_npages(&ii));
|
||||
if (IS_ERR(req))
|
||||
return PTR_ERR(req);
|
||||
|
||||
|
@ -1314,7 +1317,11 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, const struct iovec *iov,
|
|||
break;
|
||||
if (count) {
|
||||
fuse_put_request(fc, req);
|
||||
req = fuse_get_req(fc, fuse_iter_npages(&ii));
|
||||
if (io->async)
|
||||
req = fuse_get_req_for_background(fc,
|
||||
fuse_iter_npages(&ii));
|
||||
else
|
||||
req = fuse_get_req(fc, fuse_iter_npages(&ii));
|
||||
if (IS_ERR(req))
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue