55 lines
1.5 KiB
Diff
55 lines
1.5 KiB
Diff
From b6305567e7d31b0bec1b8cb9ec0cadd7f7086f5f Mon Sep 17 00:00:00 2001
|
|
From: Chris Mason <chris.mason@fusionio.com>
|
|
Date: Mon, 2 Jul 2012 15:29:53 -0400
|
|
Subject: Btrfs: run delayed directory updates during log replay
|
|
|
|
From: Chris Mason <chris.mason@fusionio.com>
|
|
|
|
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>
|
|
|
|
---
|
|
fs/btrfs/tree-log.c | 6 ++++++
|
|
1 file changed, 6 insertions(+)
|
|
|
|
--- a/fs/btrfs/tree-log.c
|
|
+++ b/fs/btrfs/tree-log.c
|
|
@@ -690,6 +690,8 @@ static noinline int drop_one_dir_item(st
|
|
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);
|
|
|