From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: Create a iSCSI DomU with disks in another DomU running on the same Dom0 Date: Fri, 11 Jan 2013 13:51:53 -0500 Message-ID: <20130111185153.GA29020@phenom.dumpdata.com> References: <50D41DF3.306@citrix.com> <20121221140320.GD25526@phenom.dumpdata.com> <50D47678.2050903@citrix.com> <20121221173513.GB27893@phenom.dumpdata.com> <50E430B0.3070605@citrix.com> <20130102213621.GA15765@phenom.dumpdata.com> <50EDC3C1.3010100@citrix.com> <20130111150655.GB15353@phenom.dumpdata.com> <50F03680.3020800@citrix.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="ew6BAiZeqk4r7MaW" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <50F03680.3020800@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Roger Pau =?iso-8859-1?Q?Monn=E9?= Cc: xen-devel List-Id: xen-devel@lists.xenproject.org --ew6BAiZeqk4r7MaW Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Jan 11, 2013 at 04:57:52PM +0100, Roger Pau Monn=E9 wrote: > Hello Konrad, >=20 > I've found the problem, blkback is adding granted pages to the bio that= =20 > is then passed to the underlying block device. When using a iscsi=20 > target running on another DomU in the same h/w this bios end up in=20 > netback, and then when performing the gnttab copy operation, it=20 > complains because the passed mfn belongs to a different domain. OK, so my original theory was sound. The m2p override "sticks". >=20 > I've checked this by applying the appended patch to blkback, which=20 > allocates a buffer to pass to the bio instead of using the granted=20 > page. Of course this should not applied, since it implies additional=20 > memcpys. >=20 > I think the right way to solve this would be to change netback to=20 > use gnttab_map and memcpy instead of gnttab_copy, but I guess this=20 > will imply a performance degradation (haven't benchmarked it, but I=20 > assume gnttab_copy is used in netback because it is faster than=20 > gnttab_map + memcpy + gnttab_unmap). Or blkback is altered to use grant_copy. Or perhaps m2p_override can do multiple PAGE_FOREIGN? (So if it detects a collision it will do something smart.. like allocate a new page or update the=20 kmap_op with extra information). And yes, grant_map in netback is much much slower that grant_copy (I tested 2.6.32 vs 3.7 using a Xen 4.1.3 with the grant_copy fixes that Jan came up with). See attached. >=20 > --- >=20 > diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-bl= kback/blkback.c > index 8808028..9740cbb 100644 > --- a/drivers/block/xen-blkback/blkback.c > +++ b/drivers/block/xen-blkback/blkback.c > @@ -80,6 +80,8 @@ struct pending_req { > unsigned short operation; > int status; > struct list_head free_list; > + struct page *grant_pages[BLKIF_MAX_SEGMENTS_PER_REQUEST]; > + void *bio_pages[BLKIF_MAX_SEGMENTS_PER_REQUEST]; > DECLARE_BITMAP(unmap_seg, BLKIF_MAX_SEGMENTS_PER_REQUEST); > }; > =20 > @@ -701,6 +703,7 @@ static void xen_blk_drain_io(struct xen_blkif *blki= f) > =20 > static void __end_block_io_op(struct pending_req *pending_req, int err= or) > { > + int i; > /* An error fails the entire request. */ > if ((pending_req->operation =3D=3D BLKIF_OP_FLUSH_DISKCACHE) && > (error =3D=3D -EOPNOTSUPP)) { > @@ -724,6 +727,16 @@ static void __end_block_io_op(struct pending_req *= pending_req, int error) > * the proper response on the ring. > */ > if (atomic_dec_and_test(&pending_req->pendcnt)) { > + for (i =3D 0; i < pending_req->nr_pages; i++) { > + BUG_ON(pending_req->bio_pages[i] =3D=3D NULL); > + if (pending_req->operation =3D=3D BLKIF_OP_READ) { > + void *grant =3D kmap_atomic(pending_req->grant_pages[i]); > + memcpy(grant, pending_req->bio_pages[i], > + PAGE_SIZE); > + kunmap_atomic(grant); > + } > + kfree(pending_req->bio_pages[i]); > + } > xen_blkbk_unmap(pending_req); > make_response(pending_req->blkif, pending_req->id, > pending_req->operation, pending_req->status); > @@ -846,7 +859,6 @@ static int dispatch_rw_block_io(struct xen_blkif *b= lkif, > int operation; > struct blk_plug plug; > bool drain =3D false; > - struct page *pages[BLKIF_MAX_SEGMENTS_PER_REQUEST]; > =20 > switch (req->operation) { > case BLKIF_OP_READ: > @@ -889,6 +901,7 @@ static int dispatch_rw_block_io(struct xen_blkif *b= lkif, > pending_req->operation =3D req->operation; > pending_req->status =3D BLKIF_RSP_OKAY; > pending_req->nr_pages =3D nseg; > + memset(pending_req->bio_pages, 0, sizeof(pending_req->bio_pages)); > =20 > for (i =3D 0; i < nseg; i++) { > seg[i].nsec =3D req->u.rw.seg[i].last_sect - > @@ -933,7 +946,7 @@ static int dispatch_rw_block_io(struct xen_blkif *b= lkif, > * the hypercall to unmap the grants - that is all done in > * xen_blkbk_unmap. > */ > - if (xen_blkbk_map(req, pending_req, seg, pages)) > + if (xen_blkbk_map(req, pending_req, seg, pending_req->grant_pages)) > goto fail_flush; > =20 > /* > @@ -943,9 +956,17 @@ static int dispatch_rw_block_io(struct xen_blkif *= blkif, > xen_blkif_get(blkif); > =20 > for (i =3D 0; i < nseg; i++) { > + void *grant; > + pending_req->bio_pages[i] =3D kmalloc(PAGE_SIZE, GFP_KERNEL); > + if (req->operation =3D=3D BLKIF_OP_WRITE) { > + grant =3D kmap_atomic(pending_req->grant_pages[i]); > + memcpy(pending_req->bio_pages[i], grant, > + PAGE_SIZE); > + kunmap_atomic(grant); > + } > while ((bio =3D=3D NULL) || > (bio_add_page(bio, > - pages[i], > + virt_to_page(pending_req->bio_pages[i]), > seg[i].nsec << 9, > seg[i].buf & ~PAGE_MASK) =3D=3D 0)) { > =20 >=20 >=20 --ew6BAiZeqk4r7MaW Content-Type: image/png Content-Disposition: attachment; filename="grant_copy_vs_grant_map.png" Content-Transfer-Encoding: base64 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 YQAAAABJRU5ErkJggg== --ew6BAiZeqk4r7MaW Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel --ew6BAiZeqk4r7MaW--