summaryrefslogtreecommitdiff
path: root/fs/btrfs/ordered-data.h
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-07-24 19:57:52 +0400
committerChris Mason <chris.mason@oracle.com>2008-09-25 19:04:05 +0400
commit3eaa2885276fd6dac7b076a793932428b7168e74 (patch)
treeb06382bec68bf1755597a74ac8225f3bcddda5e5 /fs/btrfs/ordered-data.h
parent64f26f745084872b916cd1bef6054e21b15c5784 (diff)
downloadlinux-3eaa2885276fd6dac7b076a793932428b7168e74.tar.xz
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.h7
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 {
/* reference count */
atomic_t refs;
+ /* the inode we belong to */
+ struct inode *inode;
+
/* list of checksums for insertion when the extent io is done */
struct list_head list;
@@ -88,6 +91,9 @@ struct btrfs_ordered_extent {
/* our friendly rbtree entry */
struct rb_node rb_node;
+
+ /* a per root list of all the pending ordered extents */
+ struct list_head root_extent_list;
};
@@ -137,4 +143,5 @@ int btrfs_wait_on_page_writeback_range(struct address_space *mapping,
pgoff_t start, pgoff_t end);
int btrfs_fdatawrite_range(struct address_space *mapping, loff_t start,
loff_t end, int sync_mode);
+int btrfs_wait_ordered_extents(struct btrfs_root *root);
#endif