diff options
author | Chris Mason <chris.mason@oracle.com> | 2008-07-24 11:57:52 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-09-25 11:04:05 -0400 |
commit | 3eaa2885276fd6dac7b076a793932428b7168e74 (patch) | |
tree | b06382bec68bf1755597a74ac8225f3bcddda5e5 /fs/btrfs/ordered-data.h | |
parent | 64f26f745084872b916cd1bef6054e21b15c5784 (diff) |
Btrfs: Fix the defragmention code and the block relocation code for data=ordered
Before setting an extent to delalloc, the code needs to wait for
pending ordered extents.
Also, the relocation code needs to wait for ordered IO before scanning
the block group again. This is because the extents are not removed
until the IO for the new extents is finished
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/ordered-data.h')
-rw-r--r-- | fs/btrfs/ordered-data.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/btrfs/ordered-data.h b/fs/btrfs/ordered-data.h index 199cb0b4f1d9..5efe6b63c74c 100644 --- a/fs/btrfs/ordered-data.h +++ b/fs/btrfs/ordered-data.h | |||
@@ -80,6 +80,9 @@ struct btrfs_ordered_extent { | |||
80 | /* reference count */ | 80 | /* reference count */ |
81 | atomic_t refs; | 81 | atomic_t refs; |
82 | 82 | ||
83 | /* the inode we belong to */ | ||
84 | struct inode *inode; | ||
85 | |||
83 | /* list of checksums for insertion when the extent io is done */ | 86 | /* list of checksums for insertion when the extent io is done */ |
84 | struct list_head list; | 87 | struct list_head list; |
85 | 88 | ||
@@ -88,6 +91,9 @@ struct btrfs_ordered_extent { | |||
88 | 91 | ||
89 | /* our friendly rbtree entry */ | 92 | /* our friendly rbtree entry */ |
90 | struct rb_node rb_node; | 93 | struct rb_node rb_node; |
94 | |||
95 | /* a per root list of all the pending ordered extents */ | ||
96 | struct list_head root_extent_list; | ||
91 | }; | 97 | }; |
92 | 98 | ||
93 | 99 | ||
@@ -137,4 +143,5 @@ int btrfs_wait_on_page_writeback_range(struct address_space *mapping, | |||
137 | pgoff_t start, pgoff_t end); | 143 | pgoff_t start, pgoff_t end); |
138 | int btrfs_fdatawrite_range(struct address_space *mapping, loff_t start, | 144 | int btrfs_fdatawrite_range(struct address_space *mapping, loff_t start, |
139 | loff_t end, int sync_mode); | 145 | loff_t end, int sync_mode); |
146 | int btrfs_wait_ordered_extents(struct btrfs_root *root); | ||
140 | #endif | 147 | #endif |