]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - fs/open.c
fs: add hole punching to fallocate
[mv-sheeva.git] / fs / open.c
index 4197b9ed023d8d1b1831ddf8f706d2a34a934aa6..5b6ef7e2859e30f6a6d577576c65961e5c001f22 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -223,7 +223,12 @@ int do_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
                return -EINVAL;
 
        /* Return error if mode is not supported */
-       if (mode && !(mode & FALLOC_FL_KEEP_SIZE))
+       if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))
+               return -EOPNOTSUPP;
+
+       /* Punch hole must have keep size set */
+       if ((mode & FALLOC_FL_PUNCH_HOLE) &&
+           !(mode & FALLOC_FL_KEEP_SIZE))
                return -EOPNOTSUPP;
 
        if (!(file->f_mode & FMODE_WRITE))