Commit 446aaa6e authored by Kazuya Mio's avatar Kazuya Mio Committed by Theodore Ts'o

ext4: initialize moved_len before calling ext4_move_extents()

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.
Signed-off-by: default avatarKazuya Mio <k-mio@sx.jp.nec.com>
Signed-off-by: default avatarAkira Fujita <a-fujita@rs.jp.nec.com>
Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
parent 94d7c16c
...@@ -239,6 +239,7 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) ...@@ -239,6 +239,7 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
} }
} }
me.moved_len = 0;
err = ext4_move_extents(filp, donor_filp, me.orig_start, err = ext4_move_extents(filp, donor_filp, me.orig_start,
me.donor_start, me.len, &me.moved_len); me.donor_start, me.len, &me.moved_len);
fput(donor_filp); fput(donor_filp);
......
...@@ -947,7 +947,6 @@ move_extent_per_page(struct file *o_filp, struct inode *donor_inode, ...@@ -947,7 +947,6 @@ move_extent_per_page(struct file *o_filp, struct inode *donor_inode,
* @orig_start: logical start offset in block for orig * @orig_start: logical start offset in block for orig
* @donor_start: logical start offset in block for donor * @donor_start: logical start offset in block for donor
* @len: the number of blocks to be moved * @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 * Check the arguments of ext4_move_extents() whether the files can be
* exchanged with each other. * exchanged with each other.
...@@ -955,8 +954,8 @@ move_extent_per_page(struct file *o_filp, struct inode *donor_inode, ...@@ -955,8 +954,8 @@ move_extent_per_page(struct file *o_filp, struct inode *donor_inode,
*/ */
static int static int
mext_check_arguments(struct inode *orig_inode, mext_check_arguments(struct inode *orig_inode,
struct inode *donor_inode, __u64 orig_start, 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; ext4_lblk_t orig_blocks, donor_blocks;
unsigned int blkbits = orig_inode->i_blkbits; unsigned int blkbits = orig_inode->i_blkbits;
...@@ -1010,13 +1009,6 @@ mext_check_arguments(struct inode *orig_inode, ...@@ -1010,13 +1009,6 @@ mext_check_arguments(struct inode *orig_inode,
return -EINVAL; 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;
}
if ((orig_start > EXT_MAX_BLOCK) || if ((orig_start > EXT_MAX_BLOCK) ||
(donor_start > EXT_MAX_BLOCK) || (donor_start > EXT_MAX_BLOCK) ||
(*len > EXT_MAX_BLOCK) || (*len > EXT_MAX_BLOCK) ||
...@@ -1226,7 +1218,7 @@ ext4_move_extents(struct file *o_filp, struct file *d_filp, ...@@ -1226,7 +1218,7 @@ ext4_move_extents(struct file *o_filp, struct file *d_filp,
double_down_write_data_sem(orig_inode, donor_inode); double_down_write_data_sem(orig_inode, donor_inode);
/* Check the filesystem environment whether move_extent can be done */ /* Check the filesystem environment whether move_extent can be done */
ret1 = mext_check_arguments(orig_inode, donor_inode, orig_start, ret1 = mext_check_arguments(orig_inode, donor_inode, orig_start,
donor_start, &len, *moved_len); donor_start, &len);
if (ret1) if (ret1)
goto out; goto out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment