Correct failure to attach the PV block front device on Citrix

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 <schonefeld@ids-mannheim.de>
MFC after:	3 days
This commit is contained in:
Justin T. Gibbs 2012-03-25 14:20:43 +00:00
parent bd944e019e
commit 0d17232400

View File

@ -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,