From: Namjae Jeon <namjae.jeon@xxxxxxxxxxx> Punch hole return EOPNOTSUPP about a non-REGULAR file also. So change EINVAL to be consistent with xfs. And move this check to the start of ext4_fallocate(). Signed-off-by: Namjae Jeon <namjae.jeon@xxxxxxxxxxx> Signed-off-by: Ashish Sangwan <a.sangwan@xxxxxxxxxxx> --- fs/ext4/extents.c | 9 +++------ fs/ext4/inode.c | 3 --- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 3276865..b38f487 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -4741,9 +4741,6 @@ static long ext4_zero_range(struct file *file, loff_t offset, trace_ext4_zero_range(inode, offset, len, mode); - if (!S_ISREG(inode->i_mode)) - return -EINVAL; - /* * Write out all dirty pages to avoid race conditions * Then release them. @@ -4888,6 +4885,9 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len) if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE | FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE)) return -EOPNOTSUPP; + + if (!S_ISREG(inode->i_mode)) + return -EINVAL; if (mode & FALLOC_FL_PUNCH_HOLE) return ext4_punch_hole(inode, offset, len); @@ -5403,9 +5403,6 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len) len & (EXT4_BLOCK_SIZE(sb) - 1)) return -EINVAL; - if (!S_ISREG(inode->i_mode)) - return -EINVAL; - if (EXT4_SB(inode->i_sb)->s_cluster_ratio > 1) return -EOPNOTSUPP; diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index d7b7462..d6cbbe3 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3524,9 +3524,6 @@ int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length) unsigned int credits; int ret = 0; - if (!S_ISREG(inode->i_mode)) - return -EOPNOTSUPP; - trace_ext4_punch_hole(inode, offset, length, 0); /* -- 1.7.11-rc0 -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html