diff options
author | Chris Mason <chris.mason@oracle.com> | 2010-11-29 01:56:33 +0100 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2010-11-29 01:56:33 +0100 |
commit | 163cf09c2a0ee5cac6285f9347975bd1e97725da (patch) | |
tree | 5a83cd42d57fcc4d92d12965b5eafdb472e89b02 /fs/btrfs/ordered-data.h | |
parent | Btrfs: setup blank root and fs_info for mount time (diff) | |
download | linux-163cf09c2a0ee5cac6285f9347975bd1e97725da.tar.xz linux-163cf09c2a0ee5cac6285f9347975bd1e97725da.zip |
Btrfs: deal with DIO bios that span more than one ordered extent
The new DIO bio splitting code has problems when the bio
spans more than one ordered extent. This will happen as the
generic DIO code merges our get_blocks calls together into
a bigger single bio.
This fixes things by walking forward in the ordered extent
code finding all the overlapping ordered extents and completing them
all at once.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to '')
-rw-r--r-- | fs/btrfs/ordered-data.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/btrfs/ordered-data.h b/fs/btrfs/ordered-data.h index 8ac365492a3f..61dca83119dd 100644 --- a/fs/btrfs/ordered-data.h +++ b/fs/btrfs/ordered-data.h @@ -141,6 +141,9 @@ int btrfs_remove_ordered_extent(struct inode *inode, int btrfs_dec_test_ordered_pending(struct inode *inode, struct btrfs_ordered_extent **cached, u64 file_offset, u64 io_size); +int btrfs_dec_test_first_ordered_pending(struct inode *inode, + struct btrfs_ordered_extent **cached, + u64 *file_offset, u64 io_size); int btrfs_add_ordered_extent(struct inode *inode, u64 file_offset, u64 start, u64 len, u64 disk_len, int type); int btrfs_add_ordered_extent_dio(struct inode *inode, u64 file_offset, |