Commit b722e40b authored by Josef Bacik's avatar Josef Bacik Committed by Jan Kara
Browse files

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: default avatarJosef Bacik <josef@toxicpanda.com>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Link: https://patch.msgid.link/4cc5bcea13db7904174353d08e85157356282a59.1731684329.git.josef@toxicpanda.com
parent 7f4796a4
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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 (unlikely(FMODE_FSNOTIFY_HSM(file->f_mode))) {
			ret = -EINVAL;
			goto out;
		}

		if (argp) {
			if (copy_from_user(&range, argp, sizeof(range))) {
				ret = -EFAULT;