ext4: fix incorrect locking in move_extent_per_page
If we have to copy data we must drop i_data_sem because of get_blocks() will be called inside mext_page_mkuptodate(), but later we must reacquire it again because we are about to change extent's tree Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Jan Kara <jack@suse.cz>
This commit is contained in:
Родитель
29faed1638
Коммит
6e2631463f
|
@ -1013,10 +1013,11 @@ data_copy:
|
||||||
*err = -EBUSY;
|
*err = -EBUSY;
|
||||||
goto unlock_pages;
|
goto unlock_pages;
|
||||||
}
|
}
|
||||||
|
ext4_double_down_write_data_sem(orig_inode, donor_inode);
|
||||||
replaced_count = mext_replace_branches(handle, orig_inode, donor_inode,
|
replaced_count = mext_replace_branches(handle, orig_inode, donor_inode,
|
||||||
orig_blk_offset,
|
orig_blk_offset,
|
||||||
block_len_in_page, err);
|
block_len_in_page, err);
|
||||||
|
ext4_double_up_write_data_sem(orig_inode, donor_inode);
|
||||||
if (*err) {
|
if (*err) {
|
||||||
if (replaced_count) {
|
if (replaced_count) {
|
||||||
block_len_in_page = replaced_count;
|
block_len_in_page = replaced_count;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче