Btrfs: run delayed directory updates during log replay
While we are resolving directory modifications in the tree log, we are triggering delayed metadata updates to the filesystem btrees. This commit forces the delayed updates to run so the replay code can find any modifications done. It stops us from crashing because the directory deleltion replay expects items to be removed immediately from the tree. Signed-off-by: Chris Mason <chris.mason@fusionio.com> cc: stable@kernel.org
This commit is contained in:
parent
7fd1a3f73f
commit
b6305567e7
|
@ -690,6 +690,8 @@ static noinline int drop_one_dir_item(struct btrfs_trans_handle *trans,
|
|||
kfree(name);
|
||||
|
||||
iput(inode);
|
||||
|
||||
btrfs_run_delayed_items(trans, root);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -895,6 +897,7 @@ again:
|
|||
ret = btrfs_unlink_inode(trans, root, dir,
|
||||
inode, victim_name,
|
||||
victim_name_len);
|
||||
btrfs_run_delayed_items(trans, root);
|
||||
}
|
||||
kfree(victim_name);
|
||||
ptr = (unsigned long)(victim_ref + 1) + victim_name_len;
|
||||
|
@ -1475,6 +1478,9 @@ again:
|
|||
ret = btrfs_unlink_inode(trans, root, dir, inode,
|
||||
name, name_len);
|
||||
BUG_ON(ret);
|
||||
|
||||
btrfs_run_delayed_items(trans, root);
|
||||
|
||||
kfree(name);
|
||||
iput(inode);
|
||||
|
||||
|
|
Loading…
Reference in New Issue