aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/tree-log.c
diff options
context:
space:
mode:
authorJosef Bacik <jbacik@fusionio.com>2012-10-11 15:53:56 -0400
committerChris Mason <chris.mason@fusionio.com>2012-12-16 20:46:21 -0500
commite99761514999f64aff1985460967f93d9e8417f4 (patch)
tree67bd13d96325679bde7244d69cce501840b63796 /fs/btrfs/tree-log.c
parent5f3ab90a72f98adbf00c50ac2d4d2b47cf4a9685 (diff)
Btrfs: only log the inode item if we can get away with it
Currently we copy all the file information into the log, inode item, the refs, xattrs etc. Except most of this doesn't change from fsync to fsync, just the inode item changes. So set a flag if an xattr changes or a link is added, and otherwise only log the inode item. Thanks, Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'fs/btrfs/tree-log.c')
-rw-r--r--fs/btrfs/tree-log.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 40b9efd20e43..f05fca778cb4 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -3429,14 +3429,20 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
3429 } else { 3429 } else {
3430 if (test_and_clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC, 3430 if (test_and_clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
3431 &BTRFS_I(inode)->runtime_flags)) { 3431 &BTRFS_I(inode)->runtime_flags)) {
3432 clear_bit(BTRFS_INODE_COPY_EVERYTHING,
3433 &BTRFS_I(inode)->runtime_flags);
3432 ret = btrfs_truncate_inode_items(trans, log, 3434 ret = btrfs_truncate_inode_items(trans, log,
3433 inode, 0, 0); 3435 inode, 0, 0);
3434 } else { 3436 } else {
3435 if (inode_only == LOG_INODE_ALL) 3437 if (inode_only == LOG_INODE_ALL)
3436 fast_search = true; 3438 fast_search = true;
3437 max_key.type = BTRFS_XATTR_ITEM_KEY; 3439 if (test_and_clear_bit(BTRFS_INODE_COPY_EVERYTHING,
3440 &BTRFS_I(inode)->runtime_flags))
3441 max_key.type = BTRFS_XATTR_ITEM_KEY;
3442 else
3443 max_key.type = BTRFS_INODE_ITEM_KEY;
3438 ret = drop_objectid_items(trans, log, path, ino, 3444 ret = drop_objectid_items(trans, log, path, ino,
3439 BTRFS_XATTR_ITEM_KEY); 3445 max_key.type);
3440 } 3446 }
3441 } 3447 }
3442 if (ret) { 3448 if (ret) {