diff --git a/block/bio.c b/block/bio.c
index b64cedc7f87cf1cf5f24bf4c50c808ae6a59f210..b2423e7aae084fa63beee0c2386cf456ef426753 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -776,6 +776,8 @@ bool __bio_try_merge_page(struct bio *bio, struct page *page,
 
 		if (vec_end_addr + 1 != page_addr + off)
 			return false;
+		if (xen_domain() && !xen_biovec_phys_mergeable(bv, page))
+			return false;
 		if (same_page && (vec_end_addr & PAGE_MASK) != page_addr)
 			return false;