]> git.openfabrics.org - ~shefty/rdma-dev.git/blobdiff - fs/btrfs/tree-log.c
Btrfs: only log the inode item if we can get away with it
[~shefty/rdma-dev.git] / fs / btrfs / tree-log.c
index 40b9efd20e4311b0f922b41f60035da488d59920..f05fca778cb4100e0bd2b8dc9f08b052fbf24112 100644 (file)
@@ -3429,14 +3429,20 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
        } else {
                if (test_and_clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
                                       &BTRFS_I(inode)->runtime_flags)) {
+                       clear_bit(BTRFS_INODE_COPY_EVERYTHING,
+                                 &BTRFS_I(inode)->runtime_flags);
                        ret = btrfs_truncate_inode_items(trans, log,
                                                         inode, 0, 0);
                } else {
                        if (inode_only == LOG_INODE_ALL)
                                fast_search = true;
-                       max_key.type = BTRFS_XATTR_ITEM_KEY;
+                       if (test_and_clear_bit(BTRFS_INODE_COPY_EVERYTHING,
+                                              &BTRFS_I(inode)->runtime_flags))
+                               max_key.type = BTRFS_XATTR_ITEM_KEY;
+                       else
+                               max_key.type = BTRFS_INODE_ITEM_KEY;
                        ret = drop_objectid_items(trans, log, path, ino,
-                                                 BTRFS_XATTR_ITEM_KEY);
+                                                 max_key.type);
                }
        }
        if (ret) {