Skip to content

Commit

Permalink
Correct failure to attach the PV block front device on Citrix
Browse files Browse the repository at this point in the history
XenServer configurations that advertise the multi-page ring extension,
but only allow a single page of ring space.

sys/dev/xen/blkfront/blkfront.c:
	If only one page of ring space is being used, do not publish
	in the XenStore the number of pages in use (1), via either
	of the supported multi-page ring extension schemes.

	Single page operation is the same with or without the
	ring-page extension being negotiated.   Relying on the
	legacy behavior avoids an incompatible difference in how
	the two ring-page extension schemes that are out in the
	wild, deal with the base case of a single page.  The
	Amazon/Red Hat drivers use the same XenStore variable as
	if the extension was not negotiated.  The Citrix drivers
	assume the new ring reference XenStore variables will be
	available

Reported by:	Oliver Schonefeld <[email protected]>
MFC after:	3 days
  • Loading branch information
Justin T. Gibbs authored and Justin T. Gibbs committed Mar 25, 2012
1 parent bd944e0 commit 0d17232
Showing 1 changed file with 19 additions and 15 deletions.
34 changes: 19 additions & 15 deletions sys/dev/xen/blkfront/blkfront.c
Original file line number Diff line number Diff line change
Expand Up @@ -698,21 +698,25 @@ blkfront_initialize(struct xb_softc *sc)
return;

/* Support both backend schemes for relaying ring page limits. */
error = xs_printf(XST_NIL, node_path,
"num-ring-pages","%u", sc->ring_pages);
if (error) {
xenbus_dev_fatal(sc->xb_dev, error,
"writing %s/num-ring-pages",
node_path);
return;
}
error = xs_printf(XST_NIL, node_path,
"ring-page-order","%u", fls(sc->ring_pages) - 1);
if (error) {
xenbus_dev_fatal(sc->xb_dev, error,
"writing %s/ring-page-order",
node_path);
return;
if (sc->ring_pages > 1) {
error = xs_printf(XST_NIL, node_path,
"num-ring-pages","%u", sc->ring_pages);
if (error) {
xenbus_dev_fatal(sc->xb_dev, error,
"writing %s/num-ring-pages",
node_path);
return;
}

error = xs_printf(XST_NIL, node_path,
"ring-page-order", "%u",
fls(sc->ring_pages) - 1);
if (error) {
xenbus_dev_fatal(sc->xb_dev, error,
"writing %s/ring-page-order",
node_path);
return;
}
}

error = xs_printf(XST_NIL, node_path,
Expand Down

0 comments on commit 0d17232

Please sign in to comment.