mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
btrfs: cleanup merging conditions in submit_extent_page
The merge call was factored out to a separate helper but it's a trivial one and arguably we can opencode it and cache the value. Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
8eec8296a0
commit
0c8508a6e7
@ -2744,18 +2744,6 @@ static int __must_check submit_one_bio(struct bio *bio, int mirror_num,
|
|||||||
return blk_status_to_errno(ret);
|
return blk_status_to_errno(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int merge_bio(struct extent_io_tree *tree, struct page *page,
|
|
||||||
unsigned long offset, size_t size, struct bio *bio,
|
|
||||||
unsigned long bio_flags)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
if (tree->ops)
|
|
||||||
ret = tree->ops->merge_bio_hook(page, offset, size, bio,
|
|
||||||
bio_flags);
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @opf: bio REQ_OP_* and REQ_* flags as one value
|
* @opf: bio REQ_OP_* and REQ_* flags as one value
|
||||||
* @bio_ret: must be valid pointer, newly allocated bio will be stored there
|
* @bio_ret: must be valid pointer, newly allocated bio will be stored there
|
||||||
@ -2774,23 +2762,27 @@ static int submit_extent_page(unsigned int opf, struct extent_io_tree *tree,
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
struct bio *bio;
|
struct bio *bio;
|
||||||
int contig = 0;
|
|
||||||
int old_compressed = prev_bio_flags & EXTENT_BIO_COMPRESSED;
|
|
||||||
size_t page_size = min_t(size_t, size, PAGE_SIZE);
|
size_t page_size = min_t(size_t, size, PAGE_SIZE);
|
||||||
sector_t sector = offset >> 9;
|
sector_t sector = offset >> 9;
|
||||||
|
|
||||||
ASSERT(bio_ret);
|
ASSERT(bio_ret);
|
||||||
|
|
||||||
if (*bio_ret) {
|
if (*bio_ret) {
|
||||||
|
bool contig;
|
||||||
|
bool can_merge = true;
|
||||||
|
|
||||||
bio = *bio_ret;
|
bio = *bio_ret;
|
||||||
if (old_compressed)
|
if (prev_bio_flags & EXTENT_BIO_COMPRESSED)
|
||||||
contig = bio->bi_iter.bi_sector == sector;
|
contig = bio->bi_iter.bi_sector == sector;
|
||||||
else
|
else
|
||||||
contig = bio_end_sector(bio) == sector;
|
contig = bio_end_sector(bio) == sector;
|
||||||
|
|
||||||
if (prev_bio_flags != bio_flags || !contig ||
|
if (tree->ops && tree->ops->merge_bio_hook(page, offset,
|
||||||
|
page_size, bio, bio_flags))
|
||||||
|
can_merge = false;
|
||||||
|
|
||||||
|
if (prev_bio_flags != bio_flags || !contig || !can_merge ||
|
||||||
force_bio_submit ||
|
force_bio_submit ||
|
||||||
merge_bio(tree, page, pg_offset, page_size, bio, bio_flags) ||
|
|
||||||
bio_add_page(bio, page, page_size, pg_offset) < page_size) {
|
bio_add_page(bio, page, page_size, pg_offset) < page_size) {
|
||||||
ret = submit_one_bio(bio, mirror_num, prev_bio_flags);
|
ret = submit_one_bio(bio, mirror_num, prev_bio_flags);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user