Code Review
/
kvmfornfv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Upgrade to 4.4.50-rt62
[kvmfornfv.git]
/
kernel
/
fs
/
ext4
/
move_extent.c
diff --git
a/kernel/fs/ext4/move_extent.c
b/kernel/fs/ext4/move_extent.c
index
e032a04
..
7861d80
100644
(file)
--- a/
kernel/fs/ext4/move_extent.c
+++ b/
kernel/fs/ext4/move_extent.c
@@
-60,10
+60,10
@@
ext4_double_down_write_data_sem(struct inode *first, struct inode *second)
{
if (first < second) {
down_write(&EXT4_I(first)->i_data_sem);
{
if (first < second) {
down_write(&EXT4_I(first)->i_data_sem);
- down_write_nested(&EXT4_I(second)->i_data_sem,
SINGLE_DEPTH_NESTING
);
+ down_write_nested(&EXT4_I(second)->i_data_sem,
I_DATA_SEM_OTHER
);
} else {
down_write(&EXT4_I(second)->i_data_sem);
} else {
down_write(&EXT4_I(second)->i_data_sem);
- down_write_nested(&EXT4_I(first)->i_data_sem,
SINGLE_DEPTH_NESTING
);
+ down_write_nested(&EXT4_I(first)->i_data_sem,
I_DATA_SEM_OTHER
);
}
}
}
}
@@
-390,6
+390,7
@@
data_copy:
*err = ext4_get_block(orig_inode, orig_blk_offset + i, bh, 0);
if (*err < 0)
break;
*err = ext4_get_block(orig_inode, orig_blk_offset + i, bh, 0);
if (*err < 0)
break;
+ bh = bh->b_this_page;
}
if (!*err)
*err = block_commit_write(pagep[0], from, from + replaced_size);
}
if (!*err)
*err = block_commit_write(pagep[0], from, from + replaced_size);
@@
-483,6
+484,13
@@
mext_check_arguments(struct inode *orig_inode,
return -EBUSY;
}
return -EBUSY;
}
+ if (IS_NOQUOTA(orig_inode) || IS_NOQUOTA(donor_inode)) {
+ ext4_debug("ext4 move extent: The argument files should "
+ "not be quota files [ino:orig %lu, donor %lu]\n",
+ orig_inode->i_ino, donor_inode->i_ino);
+ return -EBUSY;
+ }
+
/* Ext4 move extent supports only extent based file */
if (!(ext4_test_inode_flag(orig_inode, EXT4_INODE_EXTENTS))) {
ext4_debug("ext4 move extent: orig file is not extents "
/* Ext4 move extent supports only extent based file */
if (!(ext4_test_inode_flag(orig_inode, EXT4_INODE_EXTENTS))) {
ext4_debug("ext4 move extent: orig file is not extents "
@@
-590,6
+598,13
@@
ext4_move_extents(struct file *o_filp, struct file *d_filp, __u64 orig_blk,
return -EOPNOTSUPP;
}
return -EOPNOTSUPP;
}
+ if (ext4_encrypted_inode(orig_inode) ||
+ ext4_encrypted_inode(donor_inode)) {
+ ext4_msg(orig_inode->i_sb, KERN_ERR,
+ "Online defrag not supported for encrypted files");
+ return -EOPNOTSUPP;
+ }
+
/* Protect orig and donor inodes against a truncate */
lock_two_nondirectories(orig_inode, donor_inode);
/* Protect orig and donor inodes against a truncate */
lock_two_nondirectories(orig_inode, donor_inode);