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:
parent
bd944e019e
commit
0d17232400
@ -698,6 +698,7 @@ blkfront_initialize(struct xb_softc *sc)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Support both backend schemes for relaying ring page limits. */
|
/* Support both backend schemes for relaying ring page limits. */
|
||||||
|
if (sc->ring_pages > 1) {
|
||||||
error = xs_printf(XST_NIL, node_path,
|
error = xs_printf(XST_NIL, node_path,
|
||||||
"num-ring-pages","%u", sc->ring_pages);
|
"num-ring-pages","%u", sc->ring_pages);
|
||||||
if (error) {
|
if (error) {
|
||||||
@ -706,14 +707,17 @@ blkfront_initialize(struct xb_softc *sc)
|
|||||||
node_path);
|
node_path);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = xs_printf(XST_NIL, node_path,
|
error = xs_printf(XST_NIL, node_path,
|
||||||
"ring-page-order","%u", fls(sc->ring_pages) - 1);
|
"ring-page-order", "%u",
|
||||||
|
fls(sc->ring_pages) - 1);
|
||||||
if (error) {
|
if (error) {
|
||||||
xenbus_dev_fatal(sc->xb_dev, error,
|
xenbus_dev_fatal(sc->xb_dev, error,
|
||||||
"writing %s/ring-page-order",
|
"writing %s/ring-page-order",
|
||||||
node_path);
|
node_path);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
error = xs_printf(XST_NIL, node_path,
|
error = xs_printf(XST_NIL, node_path,
|
||||||
"max-requests","%u", sc->max_requests);
|
"max-requests","%u", sc->max_requests);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user