diff options
author | Josef Bacik <josef@redhat.com> | 2010-05-23 11:07:21 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2010-05-25 10:34:57 -0400 |
commit | 11c65dccf70be9ace5dbd3906778e1a099b1fee1 (patch) | |
tree | 1289f139ddf652e39672374b6f9051994c21ce57 /fs/btrfs/extent_io.c | |
parent | 4b46fce23349bfca781a32e2707a18328ca5ae22 (diff) |
Btrfs: do aio_write instead of write
In order for AIO to work, we need to implement aio_write. This patch converts
our btrfs_file_write to btrfs_aio_write. I've tested this with xfstests and
nothing broke, and the AIO stuff magically started working. Thanks,
Signed-off-by: Josef Bacik <josef@redhat.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/extent_io.c')
-rw-r--r-- | fs/btrfs/extent_io.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 1a57c17d4029..a53aca338c7f 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c | |||
@@ -2017,6 +2017,7 @@ static int __extent_read_full_page(struct extent_io_tree *tree, | |||
2017 | sector_t sector; | 2017 | sector_t sector; |
2018 | struct extent_map *em; | 2018 | struct extent_map *em; |
2019 | struct block_device *bdev; | 2019 | struct block_device *bdev; |
2020 | struct btrfs_ordered_extent *ordered; | ||
2020 | int ret; | 2021 | int ret; |
2021 | int nr = 0; | 2022 | int nr = 0; |
2022 | size_t page_offset = 0; | 2023 | size_t page_offset = 0; |
@@ -2028,7 +2029,15 @@ static int __extent_read_full_page(struct extent_io_tree *tree, | |||
2028 | set_page_extent_mapped(page); | 2029 | set_page_extent_mapped(page); |
2029 | 2030 | ||
2030 | end = page_end; | 2031 | end = page_end; |
2031 | lock_extent(tree, start, end, GFP_NOFS); | 2032 | while (1) { |
2033 | lock_extent(tree, start, end, GFP_NOFS); | ||
2034 | ordered = btrfs_lookup_ordered_extent(inode, start); | ||
2035 | if (!ordered) | ||
2036 | break; | ||
2037 | unlock_extent(tree, start, end, GFP_NOFS); | ||
2038 | btrfs_start_ordered_extent(inode, ordered, 1); | ||
2039 | btrfs_put_ordered_extent(ordered); | ||
2040 | } | ||
2032 | 2041 | ||
2033 | if (page->index == last_byte >> PAGE_CACHE_SHIFT) { | 2042 | if (page->index == last_byte >> PAGE_CACHE_SHIFT) { |
2034 | char *userpage; | 2043 | char *userpage; |