diff options
author | Jan Schmidt <list.btrfs@jan-o-sch.net> | 2012-03-23 12:32:28 -0400 |
---|---|---|
committer | Jan Schmidt <list.btrfs@jan-o-sch.net> | 2012-03-27 08:51:21 -0400 |
commit | 7a3ae2f8c8c8432e65467b7fc84d5deab04061a0 (patch) | |
tree | e93c46eb8def633533fe80032872f71b36fc03b8 /fs/btrfs/backref.h | |
parent | 103e976616fe9c2a3e40764c979fa1a592274da2 (diff) |
Btrfs: fix regression in scrub path resolving
In commit 4692cf58 we introduced new backref walking code for btrfs. This
assumes we're searching live roots, which requires a transaction context.
While scrubbing, however, we must not join a transaction because this could
deadlock with the commit path. Additionally, what scrub really wants to do
is resolving a logical address in the commit root it's currently checking.
This patch adds support for logical to path resolving on commit roots and
makes scrub use that.
Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
Diffstat (limited to 'fs/btrfs/backref.h')
-rw-r--r-- | fs/btrfs/backref.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/btrfs/backref.h b/fs/btrfs/backref.h index d00dfa9ca934..57ea2e959e4d 100644 --- a/fs/btrfs/backref.h +++ b/fs/btrfs/backref.h | |||
@@ -22,6 +22,8 @@ | |||
22 | #include "ioctl.h" | 22 | #include "ioctl.h" |
23 | #include "ulist.h" | 23 | #include "ulist.h" |
24 | 24 | ||
25 | #define BTRFS_BACKREF_SEARCH_COMMIT_ROOT ((struct btrfs_trans_handle *)0) | ||
26 | |||
25 | struct inode_fs_paths { | 27 | struct inode_fs_paths { |
26 | struct btrfs_path *btrfs_path; | 28 | struct btrfs_path *btrfs_path; |
27 | struct btrfs_root *fs_root; | 29 | struct btrfs_root *fs_root; |
@@ -44,9 +46,8 @@ int tree_backref_for_extent(unsigned long *ptr, struct extent_buffer *eb, | |||
44 | u64 *out_root, u8 *out_level); | 46 | u64 *out_root, u8 *out_level); |
45 | 47 | ||
46 | int iterate_extent_inodes(struct btrfs_fs_info *fs_info, | 48 | int iterate_extent_inodes(struct btrfs_fs_info *fs_info, |
47 | struct btrfs_path *path, | ||
48 | u64 extent_item_objectid, | 49 | u64 extent_item_objectid, |
49 | u64 extent_offset, | 50 | u64 extent_offset, int search_commit_root, |
50 | iterate_extent_inodes_t *iterate, void *ctx); | 51 | iterate_extent_inodes_t *iterate, void *ctx); |
51 | 52 | ||
52 | int iterate_inodes_from_logical(u64 logical, struct btrfs_fs_info *fs_info, | 53 | int iterate_inodes_from_logical(u64 logical, struct btrfs_fs_info *fs_info, |