Commit a34e4c3f authored by Qu Wenruo's avatar Qu Wenruo Committed by David Sterba

btrfs: remove stripe boundary calculation for encoded I/O

Stop looking at the stripe boundary in
btrfs_encoded_read_regular_fill_pages() now that btrfs_submit_bio can
split bios.
Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 30493ff4
...@@ -9971,7 +9971,6 @@ int btrfs_encoded_read_regular_fill_pages(struct btrfs_inode *inode, ...@@ -9971,7 +9971,6 @@ int btrfs_encoded_read_regular_fill_pages(struct btrfs_inode *inode,
u64 file_offset, u64 disk_bytenr, u64 file_offset, u64 disk_bytenr,
u64 disk_io_size, struct page **pages) u64 disk_io_size, struct page **pages)
{ {
struct btrfs_fs_info *fs_info = inode->root->fs_info;
struct btrfs_encoded_read_private priv = { struct btrfs_encoded_read_private priv = {
.inode = inode, .inode = inode,
.file_offset = file_offset, .file_offset = file_offset,
...@@ -9979,33 +9978,13 @@ int btrfs_encoded_read_regular_fill_pages(struct btrfs_inode *inode, ...@@ -9979,33 +9978,13 @@ int btrfs_encoded_read_regular_fill_pages(struct btrfs_inode *inode,
}; };
unsigned long i = 0; unsigned long i = 0;
u64 cur = 0; u64 cur = 0;
int ret;
init_waitqueue_head(&priv.wait); init_waitqueue_head(&priv.wait);
/* /* Submit bios for the extent, splitting due to bio limits as necessary. */
* Submit bios for the extent, splitting due to bio or stripe limits as
* necessary.
*/
while (cur < disk_io_size) { while (cur < disk_io_size) {
struct extent_map *em;
struct btrfs_io_geometry geom;
struct bio *bio = NULL; struct bio *bio = NULL;
u64 remaining; u64 remaining = disk_io_size - cur;
em = btrfs_get_chunk_map(fs_info, disk_bytenr + cur,
disk_io_size - cur);
if (IS_ERR(em)) {
ret = PTR_ERR(em);
} else {
ret = btrfs_get_io_geometry(fs_info, em, BTRFS_MAP_READ,
disk_bytenr + cur, &geom);
free_extent_map(em);
}
if (ret) {
WRITE_ONCE(priv.status, errno_to_blk_status(ret));
break;
}
remaining = min(geom.len, disk_io_size - cur);
while (bio || remaining) { while (bio || remaining) {
size_t bytes = min_t(u64, remaining, PAGE_SIZE); size_t bytes = min_t(u64, remaining, PAGE_SIZE);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment