fuse: direct-io: don't dirty ITER_BVEC pages
authorMiklos Szeredi <mszeredi@redhat.com>
Wed, 24 Aug 2016 16:17:04 +0000 (18:17 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 24 Sep 2016 08:07:41 +0000 (10:07 +0200)
commit8aa6a2a34fbb8f7a326c50ffc6738461798b5d77
tree955ba2b20c30c40f4f85ac5d28e4ab6ec09f5f05
parent5e0286ed4f61c840802adc432cbcb6c90d08e0d8
fuse: direct-io: don't dirty ITER_BVEC pages

commit 8fba54aebbdf1f999738121922e74bf796ad60ee upstream.

When reading from a loop device backed by a fuse file it deadlocks on
lock_page().

This is because the page is already locked by the read() operation done on
the loop device.  In this case we don't want to either lock the page or
dirty it.

So do what fs/direct-io.c does: only dirty the page for ITER_IOVEC vectors.

Reported-by: Sheng Yang <sheng@yasker.org>
Fixes: aa4d86163e4e ("block: loop: switch to VFS ITER_BVEC")
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Reviewed-by: Sheng Yang <sheng@yasker.org>
Reviewed-by: Ashish Samant <ashish.samant@oracle.com>
Tested-by: Sheng Yang <sheng@yasker.org>
Tested-by: Ashish Samant <ashish.samant@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/fuse/file.c