ext4: make online defrag error reporting consistent
authorEric Whitney <enwlinux@gmail.com>
Mon, 22 Jun 2015 01:38:03 +0000 (21:38 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 22 Jun 2015 01:38:03 +0000 (21:38 -0400)
Make the error reporting behavior resulting from the unsupported use
of online defrag on files with data journaling enabled consistent with
that implemented for bigalloc file systems. Difference found with
ext4/308.

Signed-off-by: Eric Whitney <enwlinux@gmail.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/ext4/move_extent.c

index 8c04afb90b1b17a502ea3068d37c25f30f31b7a3..fb6f11709ae62b4d0452352422bb6f3f50660ba3 100644 (file)
@@ -571,12 +571,16 @@ ext4_move_extents(struct file *o_filp, struct file *d_filp, __u64 orig_blk,
                        orig_inode->i_ino, donor_inode->i_ino);
                return -EINVAL;
        }
-       /* TODO: This is non obvious task to swap blocks for inodes with full
-          jornaling enabled */
+
+       /* TODO: it's not obvious how to swap blocks for inodes with full
+          journaling enabled */
        if (ext4_should_journal_data(orig_inode) ||
            ext4_should_journal_data(donor_inode)) {
-               return -EINVAL;
+               ext4_msg(orig_inode->i_sb, KERN_ERR,
+                        "Online defrag not supported with data journaling");
+               return -EOPNOTSUPP;
        }
+
        /* Protect orig and donor inodes against a truncate */
        lock_two_nondirectories(orig_inode, donor_inode);