diff options
-rw-r--r-- | fs/open.c | 7 | ||||
-rw-r--r-- | include/uapi/linux/falloc.h | 14 |
2 files changed, 20 insertions, 1 deletions
@@ -232,7 +232,12 @@ int do_fallocate(struct file *file, int mode, loff_t offset, loff_t len) | |||
232 | 232 | ||
233 | /* Return error if mode is not supported */ | 233 | /* Return error if mode is not supported */ |
234 | if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE | | 234 | if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE | |
235 | FALLOC_FL_COLLAPSE_RANGE)) | 235 | FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE)) |
236 | return -EOPNOTSUPP; | ||
237 | |||
238 | /* Punch hole and zero range are mutually exclusive */ | ||
239 | if ((mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE)) == | ||
240 | (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE)) | ||
236 | return -EOPNOTSUPP; | 241 | return -EOPNOTSUPP; |
237 | 242 | ||
238 | /* Punch hole must have keep size set */ | 243 | /* Punch hole must have keep size set */ |
diff --git a/include/uapi/linux/falloc.h b/include/uapi/linux/falloc.h index 5ff562ddac0b..d1197ae3723c 100644 --- a/include/uapi/linux/falloc.h +++ b/include/uapi/linux/falloc.h | |||
@@ -27,4 +27,18 @@ | |||
27 | */ | 27 | */ |
28 | #define FALLOC_FL_COLLAPSE_RANGE 0x08 | 28 | #define FALLOC_FL_COLLAPSE_RANGE 0x08 |
29 | 29 | ||
30 | /* | ||
31 | * FALLOC_FL_ZERO_RANGE is used to convert a range of file to zeros preferably | ||
32 | * without issuing data IO. Blocks should be preallocated for the regions that | ||
33 | * span holes in the file, and the entire range is preferable converted to | ||
34 | * unwritten extents - even though file system may choose to zero out the | ||
35 | * extent or do whatever which will result in reading zeros from the range | ||
36 | * while the range remains allocated for the file. | ||
37 | * | ||
38 | * This can be also used to preallocate blocks past EOF in the same way as | ||
39 | * with fallocate. Flag FALLOC_FL_KEEP_SIZE should cause the inode | ||
40 | * size to remain the same. | ||
41 | */ | ||
42 | #define FALLOC_FL_ZERO_RANGE 0x10 | ||
43 | |||
30 | #endif /* _UAPI_FALLOC_H_ */ | 44 | #endif /* _UAPI_FALLOC_H_ */ |