|
@@ -4827,6 +4827,7 @@ static int btrfs_log_inode(struct btrfs_trans_handle *trans,
|
|
|
struct extent_map_tree *em_tree = &inode->extent_tree;
|
|
|
u64 logged_isize = 0;
|
|
|
bool need_log_inode_item = true;
|
|
|
+ bool xattrs_logged = false;
|
|
|
|
|
|
path = btrfs_alloc_path();
|
|
|
if (!path)
|
|
@@ -5128,6 +5129,7 @@ next_key:
|
|
|
err = btrfs_log_all_xattrs(trans, root, inode, path, dst_path);
|
|
|
if (err)
|
|
|
goto out_unlock;
|
|
|
+ xattrs_logged = true;
|
|
|
if (max_key.type >= BTRFS_EXTENT_DATA_KEY && !fast_search) {
|
|
|
btrfs_release_path(path);
|
|
|
btrfs_release_path(dst_path);
|
|
@@ -5140,6 +5142,11 @@ log_extents:
|
|
|
btrfs_release_path(dst_path);
|
|
|
if (need_log_inode_item) {
|
|
|
err = log_inode_item(trans, log, dst_path, inode);
|
|
|
+ if (!err && !xattrs_logged) {
|
|
|
+ err = btrfs_log_all_xattrs(trans, root, inode, path,
|
|
|
+ dst_path);
|
|
|
+ btrfs_release_path(path);
|
|
|
+ }
|
|
|
if (err)
|
|
|
goto out_unlock;
|
|
|
}
|