diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index d0860f2d36d0aae5c7f8890fb44e67369264f634..2f49b12a4c40f66b6ec2700a5655d16bc30fc5cf 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -4741,6 +4741,9 @@ 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.