Btrfs: do not log extents when we only log new names
authorLiu Bo <bo.li.liu@oracle.com>
Thu, 1 Nov 2012 06:38:47 +0000 (06:38 +0000)
committerJosef Bacik <jbacik@fusionio.com>
Wed, 12 Dec 2012 22:15:18 +0000 (17:15 -0500)
When we log new names, we need to log just enough to recreate the inode
during log replay, and there is no need to log extents along with it.

This actually fixes a bug revealed by xfstests 241, where it shows
that we're logging some extents that have not updated metadata,
so we don't get proper EXTENT_DATA items to be copied to log tree.

Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
fs/btrfs/tree-log.c

index 81e407d9677a73bc5329a9807492a5c580d17ec0..4ec41ecb4d652e6cb36b4b164263146004501ee8 100644 (file)
@@ -3435,7 +3435,8 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
                        ret = btrfs_truncate_inode_items(trans, log,
                                                         inode, 0, 0);
                } else {
-                       fast_search = true;
+                       if (inode_only == LOG_INODE_ALL)
+                               fast_search = true;
                        max_key.type = BTRFS_XATTR_ITEM_KEY;
                        ret = drop_objectid_items(trans, log, path, ino,
                                                  BTRFS_XATTR_ITEM_KEY);