Messages in this thread Patch in this message |  | | From | Daeho Jeong <> | Subject | [PATCH] f2fs: change the way of handling range.len in F2FS_IOC_SEC_TRIM_FILE | Date | Fri, 10 Jul 2020 11:15:05 +0900 |
| |
From: Daeho Jeong <daehojeong@google.com>
Changed the way of handling range.len of F2FS_IOC_SEC_TRIM_FILE. 1. Added -1 value support for range.len to signify the end of file. 2. If the end of the range passes over the end of file, it means until the end of file. 3. ignored the case of that range.len is zero to prevent the function from making end_addr zero and triggering different behaviour of the function.
Signed-off-by: Daeho Jeong <daehojeong@google.com> --- fs/f2fs/file.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index 368c80f8e2a1..1c4601f99326 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -3813,21 +3813,19 @@ static int f2fs_sec_trim_file(struct file *filp, unsigned long arg) file_start_write(filp); inode_lock(inode); - if (f2fs_is_atomic_file(inode) || f2fs_compressed_file(inode)) { + if (f2fs_is_atomic_file(inode) || f2fs_compressed_file(inode) || + range.start >= inode->i_size) { ret = -EINVAL; goto err; } - if (range.start >= inode->i_size) { - ret = -EINVAL; + if (range.len == 0) goto err; - } - if (inode->i_size - range.start < range.len) { - ret = -E2BIG; - goto err; - } - end_addr = range.start + range.len; + if (range.len == (u64)-1 || inode->i_size - range.start < range.len) + end_addr = inode->i_size; + else + end_addr = range.start + range.len; to_end = (end_addr == inode->i_size); if (!IS_ALIGNED(range.start, F2FS_BLKSIZE) || -- 2.27.0.383.g050319c2ae-goog
|  |