mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
f2fs: exclude special cases for f2fs_move_file_range
When src and dst is the same file, and the latter part of source region overlaps with the former part of destination region, current implement will overwrite data which hasn't been moved yet and truncate data in overlapped region. This patch return -EINVAL when such cases occur and return 0 when source region and destination region is actually the same part of the same file. Signed-off-by: Fan li <fanofcode.li@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
649d7df29c
commit
d95fd91c1a
1 changed files with 7 additions and 0 deletions
|
@ -2092,6 +2092,13 @@ static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
|
|||
if (f2fs_encrypted_inode(src) || f2fs_encrypted_inode(dst))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (src == dst) {
|
||||
if (pos_in == pos_out)
|
||||
return 0;
|
||||
if (pos_out > pos_in && pos_out < pos_in + len)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
inode_lock(src);
|
||||
if (src != dst) {
|
||||
if (!inode_trylock(dst)) {
|
||||
|
|
Loading…
Add table
Reference in a new issue