ext4: enforce online defrag restriction for encrypted files
authorEric Whitney <enwlinux@gmail.com>
Mon, 29 Aug 2016 19:45:11 +0000 (15:45 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 29 Aug 2016 19:45:11 +0000 (15:45 -0400)
Online defragging of encrypted files is not currently implemented.
However, the move extent ioctl can still return successfully when
called.  For example, this occurs when xfstest ext4/020 is run on an
encrypted file system, resulting in a corrupted test file and a
corresponding test failure.

Until the proper functionality is implemented, fail the move extent
ioctl if either the original or donor file is encrypted.

Cc: stable@vger.kernel.org
Signed-off-by: Eric Whitney <enwlinux@gmail.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/move_extent.c

index a920c5d29fac0a5b5ef83c9cca18feeb3dcc0fe7..6fc14def0c707231ba6430dfb851307a7a13c3eb 100644 (file)
@@ -598,6 +598,13 @@ ext4_move_extents(struct file *o_filp, struct file *d_filp, __u64 orig_blk,
                return -EOPNOTSUPP;
        }
 
+       if (ext4_encrypted_inode(orig_inode) ||
+           ext4_encrypted_inode(donor_inode)) {
+               ext4_msg(orig_inode->i_sb, KERN_ERR,
+                        "Online defrag not supported for encrypted files");
+               return -EOPNOTSUPP;
+       }
+
        /* Protect orig and donor inodes against a truncate */
        lock_two_nondirectories(orig_inode, donor_inode);