[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20181210171318.16998-44-vgoyal@redhat.com>
Date: Mon, 10 Dec 2018 12:13:09 -0500
From: Vivek Goyal <vgoyal@...hat.com>
To: linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org,
kvm@...r.kernel.org
Cc: vgoyal@...hat.com, miklos@...redi.hu, stefanha@...hat.com,
dgilbert@...hat.com, sweil@...hat.com, swhiteho@...hat.com
Subject: [PATCH 43/52] fuse: Take inode lock for dax inode truncation
When a file is opened with O_TRUNC, we need to make sure that any other
DAX operation is not in progress. DAX expects i_size to be stable.
In fuse_iomap_begin() we check for i_size at multiple places and we expect
i_size to not change.
Another problem is, if we setup a mapping in fuse_iomap_begin(), and
file gets truncated and dax read/write happens, KVM currently hangs.
It tries to fault in a page which does not exist on host (file got
truncated). It probably requries fixing in KVM.
So for now, take inode lock. Once KVM is fixed, we might have to
have a look at it again.
Signed-off-by: Vivek Goyal <vgoyal@...hat.com>
---
fs/fuse/file.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index d0942ce0a6c3..cb28cf26a6e7 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -406,7 +406,7 @@ int fuse_open_common(struct inode *inode, struct file *file, bool isdir)
int err;
bool lock_inode = (file->f_flags & O_TRUNC) &&
fc->atomic_o_trunc &&
- fc->writeback_cache;
+ (fc->writeback_cache || IS_DAX(inode));
err = generic_file_open(inode, file);
if (err)
--
2.13.6
Powered by blists - more mailing lists