ext4: online defrag not supported with DAX
authorRoss Zwisler <[email protected]>
Fri, 26 Feb 2016 23:19:49 +0000 (15:19 -0800)
committerLinus Torvalds <[email protected]>
Sat, 27 Feb 2016 18:28:52 +0000 (10:28 -0800)
commit73f34a5e2ceddfca27c999c170620e6354aaf6d7
treebbadfef9feecde6b2961f248166f7a526004faaa
parent0a6cf9137ded4856b41910a4336677ee0ffa6736
ext4: online defrag not supported with DAX

Online defrag operations for ext4 are hard coded to use the page cache.
See ext4_ioctl() -> ext4_move_extents() -> move_extent_per_page()

When combined with DAX I/O, which circumvents the page cache, this can
result in data corruption.  This was observed with xfstests ext4/307 and
ext4/308.

Fix this by only allowing online defrag for non-DAX files.

Signed-off-by: Ross Zwisler <[email protected]>
Reviewed-by: Jan Kara <[email protected]>
Cc: Theodore Ts'o <[email protected]>
Cc: Al Viro <[email protected]>
Cc: Dan Williams <[email protected]>
Cc: Dave Chinner <[email protected]>
Cc: Jens Axboe <[email protected]>
Cc: Matthew Wilcox <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
fs/ext4/ioctl.c