aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs
diff options
context:
space:
mode:
authorChris Mason <chris.mason@fusionio.com>2012-07-02 15:29:53 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-07-16 08:47:39 -0700
commitd0f7cf8a1ab0479ecc37989bd332c28d5ff04f89 (patch)
tree2102c322528824d7564b2bf39406f2e00f795e07 /fs/btrfs
parentc45f606a03193a95a55ef1802646e5a67fff642b (diff)
downloadkernel_samsung_smdk4412-d0f7cf8a1ab0479ecc37989bd332c28d5ff04f89.zip
kernel_samsung_smdk4412-d0f7cf8a1ab0479ecc37989bd332c28d5ff04f89.tar.gz
kernel_samsung_smdk4412-d0f7cf8a1ab0479ecc37989bd332c28d5ff04f89.tar.bz2
Btrfs: run delayed directory updates during log replay
commit b6305567e7d31b0bec1b8cb9ec0cadd7f7086f5f upstream. 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/btrfs')
-rw-r--r--fs/btrfs/tree-log.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 7fa128d..faf7d0b 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -691,6 +691,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;
}
@@ -896,6 +898,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;
@@ -1476,6 +1479,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);