ext4: Initialize moved_len before calling ext4_move_extents()
PATCH 2/3 ext4: Initialize moved_len before calling ext4_move_extents()
# This is a RESENT patch
http://marc.info/?l=linux-ext4&m=125498954712519&w=4
ext4: initialize moved_len before calling ext4_move_extents()
From: Kazuya Mio <[email protected]>
moved_len of struct move_extent is used to notify exchanged blocks count to the user space.
So at the beginning of the EXT4_IOC_MOVE_EXT,moved_len should be always zero.
Without this patch, if wrong moved_len is passed from the user space, EXT4_IOC_MOVE_EXT will return wrong blocks count.
--- ioctl.c | 1 + move_extent.c | 12 ++---------- 2 files changed, 3 insertions(+), 10 deletions(-)
fs/ext4/ioctl.c +1 -0
@@ -251,6 +251,7 @@ setversion_out: } } + me.moved_len =0 ; err =ext4_move_extents (filp, donor_filp, me.orig_start, me.donor_start, me.len, &me.moved_len);fput (donor_filp);
fs/ext4/move_extent.c +1 -8
@@ -962,7 +962,6 @@ out2:* @orig_start: logical start offset in block for orig * @donor_start: logical start offset in block for donor * @len: the number of blocks to be moved -* @moved_len: moved block length * * Check the arguments of ext4_move_extents() whether the files can be * exchanged with each other.
@@ -971,7 +970,7 @@ out2:static int mext_check_arguments (struct inode *orig_inode,struct inode *donor_inode,__u64 orig_start, -__u64 donor_start,__u64 *len,__u64 moved_len) +__u64 donor_start,__u64 *len) {ext4_lblk_t orig_blocks, donor_blocks;unsigned int blkbits = orig_inode->i_blkbits;
@@ -1025,13 +1024,6 @@ mext_check_arguments(struct inode *orig_inode,return -EINVAL ; } -if (moved_len) { -ext4_debug ("ext4 move extent: moved_len should be 0 " -"[ino:orig %lu, donor %lu]\n" , orig_inode->i_ino, - donor_inode->i_ino); -return -EINVAL ; - }
[email protected]
maintainerQuoted 10 lines · Akira Fujita
ext4: initialize
moved_lenbefore callingext4_move_extents()From: Kazuya Mio <[email protected]>
moved_lenof structmove_extentis used to notify exchanged blocks count to the user space.
So at the beginning of theEXT4_IOC_MOVE_EXT,moved_lenshould be always zero.
Without this patch, if wrongmoved_lenis passed from the user space,EXT4_IOC_MOVE_EXTwill return wrong blocks count.
Applied with the following rewording of the patch description:
ext4: initialize moved_len before calling ext4_move_extents()
From: Kazuya Mio <[email protected]>
The move_extent.moved_len is used to pass back the number of exchanged blocks count to user space. Currently the caller must clear this field; but we spend more code space checking for this requirement than simply zeroing the field ourselves, so let's just make life easier for everyone all around.
- Ted