[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4cc5bcea13db7904174353d08e85157356282a59.1731684329.git.josef@toxicpanda.com>
Date: Fri, 15 Nov 2024 10:30:31 -0500
From: Josef Bacik <josef@...icpanda.com>
To: kernel-team@...com,
linux-fsdevel@...r.kernel.org,
jack@...e.cz,
amir73il@...il.com,
brauner@...nel.org,
torvalds@...ux-foundation.org,
viro@...iv.linux.org.uk,
linux-xfs@...r.kernel.org,
linux-btrfs@...r.kernel.org,
linux-mm@...ck.org,
linux-ext4@...r.kernel.org
Subject: [PATCH v8 18/19] btrfs: disable defrag on pre-content watched files
We queue up inodes to be defrag'ed asynchronously, which means we do not
have their original file for readahead. This means that the code to
skip readahead on pre-content watched files will not run, and we could
potentially read in empty pages.
Handle this corner case by disabling defrag on files that are currently
being watched for pre-content events.
Signed-off-by: Josef Bacik <josef@...icpanda.com>
---
fs/btrfs/ioctl.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index c9302d193187..1e5913f276be 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -2635,6 +2635,15 @@ static int btrfs_ioctl_defrag(struct file *file, void __user *argp)
goto out;
}
+ /*
+ * Don't allow defrag on pre-content watched files, as it could
+ * populate the page cache with 0's via readahead.
+ */
+ if (fsnotify_file_has_pre_content_watches(file)) {
+ ret = -EINVAL;
+ goto out;
+ }
+
if (argp) {
if (copy_from_user(&range, argp, sizeof(range))) {
ret = -EFAULT;
--
2.43.0
Powered by blists - more mailing lists