| From a7e5cfdf2877ab5bdcab34941cc27b6efcddb630 Mon Sep 17 00:00:00 2001 |
| From: Ming Lei <ming.lei@redhat.com> |
| Date: Fri, 29 Mar 2019 15:07:54 +0800 |
| Subject: block: pass page to xen_biovec_phys_mergeable |
| |
| [ Upstream commit 0383ad4374f7ad7edd925a2ee4753035c3f5508a ] |
| |
| xen_biovec_phys_mergeable() only needs .bv_page of the 2nd bio bvec |
| for checking if the two bvecs can be merged, so pass page to |
| xen_biovec_phys_mergeable() directly. |
| |
| No function change. |
| |
| Cc: ris Ostrovsky <boris.ostrovsky@oracle.com> |
| Cc: Juergen Gross <jgross@suse.com> |
| Cc: xen-devel@lists.xenproject.org |
| Cc: Omar Sandoval <osandov@fb.com> |
| Cc: Christoph Hellwig <hch@lst.de> |
| Reviewed-by: Christoph Hellwig <hch@lst.de> |
| Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> |
| Signed-off-by: Ming Lei <ming.lei@redhat.com> |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| block/blk.h | 2 +- |
| drivers/xen/biomerge.c | 5 +++-- |
| include/xen/xen.h | 4 +++- |
| 3 files changed, 7 insertions(+), 4 deletions(-) |
| |
| diff --git a/block/blk.h b/block/blk.h |
| index 5d636ee416630..e27fd1512e4bb 100644 |
| --- a/block/blk.h |
| +++ b/block/blk.h |
| @@ -75,7 +75,7 @@ static inline bool biovec_phys_mergeable(struct request_queue *q, |
| |
| if (addr1 + vec1->bv_len != addr2) |
| return false; |
| - if (xen_domain() && !xen_biovec_phys_mergeable(vec1, vec2)) |
| + if (xen_domain() && !xen_biovec_phys_mergeable(vec1, vec2->bv_page)) |
| return false; |
| if ((addr1 | mask) != ((addr2 + vec2->bv_len - 1) | mask)) |
| return false; |
| diff --git a/drivers/xen/biomerge.c b/drivers/xen/biomerge.c |
| index f3fbb700f5697..05a286d24f148 100644 |
| --- a/drivers/xen/biomerge.c |
| +++ b/drivers/xen/biomerge.c |
| @@ -4,12 +4,13 @@ |
| #include <xen/xen.h> |
| #include <xen/page.h> |
| |
| +/* check if @page can be merged with 'vec1' */ |
| bool xen_biovec_phys_mergeable(const struct bio_vec *vec1, |
| - const struct bio_vec *vec2) |
| + const struct page *page) |
| { |
| #if XEN_PAGE_SIZE == PAGE_SIZE |
| unsigned long bfn1 = pfn_to_bfn(page_to_pfn(vec1->bv_page)); |
| - unsigned long bfn2 = pfn_to_bfn(page_to_pfn(vec2->bv_page)); |
| + unsigned long bfn2 = pfn_to_bfn(page_to_pfn(page)); |
| |
| return bfn1 + PFN_DOWN(vec1->bv_offset + vec1->bv_len) == bfn2; |
| #else |
| diff --git a/include/xen/xen.h b/include/xen/xen.h |
| index 19d032373de5a..19a72f591e2bd 100644 |
| --- a/include/xen/xen.h |
| +++ b/include/xen/xen.h |
| @@ -43,8 +43,10 @@ extern struct hvm_start_info pvh_start_info; |
| #endif /* CONFIG_XEN_DOM0 */ |
| |
| struct bio_vec; |
| +struct page; |
| + |
| bool xen_biovec_phys_mergeable(const struct bio_vec *vec1, |
| - const struct bio_vec *vec2); |
| + const struct page *page); |
| |
| #if defined(CONFIG_MEMORY_HOTPLUG) && defined(CONFIG_XEN_BALLOON) |
| extern u64 xen_saved_max_mem_size; |
| -- |
| 2.20.1 |
| |