[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH MINI-OS v3 2/2] xenbus: workaround oxenstored short-write
Oxenstored has a behaviour that it only writes a contiguous piece of data. When it writes across ring boundary it will return a short-write while there is still room. That leads to mini-os stalling when it sees there is not enough data in the ring. Given that oxenstored is the default xenstored implementation we think it would be useful to workaround this for the benefit of running mini-os (and unikernel based on it) on any Xen installation. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- xenbus/xenbus.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/xenbus/xenbus.c b/xenbus/xenbus.c index 0ab387a..abf8b1b 100644 --- a/xenbus/xenbus.c +++ b/xenbus/xenbus.c @@ -205,8 +205,11 @@ static void xenbus_thread_func(void *ign) prod = xenstore_buf->rsp_prod; DEBUG("Rsp_cons %d, rsp_prod %d.\n", xenstore_buf->rsp_cons, xenstore_buf->rsp_prod); - if (xenstore_buf->rsp_prod - xenstore_buf->rsp_cons < sizeof(msg)) + if (xenstore_buf->rsp_prod - xenstore_buf->rsp_cons < sizeof(msg)) { + /* Work around oxenstored bug */ + notify_remote_via_evtchn(start_info.store_evtchn); break; + } rmb(); memcpy_from_ring(xenstore_buf->rsp, &msg, @@ -217,8 +220,11 @@ static void xenbus_thread_func(void *ign) xenstore_buf->rsp_prod - xenstore_buf->rsp_cons, msg.req_id); if (xenstore_buf->rsp_prod - xenstore_buf->rsp_cons < - sizeof(msg) + msg.len) + sizeof(msg) + msg.len) { + /* Work around oxenstored bug */ + notify_remote_via_evtchn(start_info.store_evtchn); break; + } DEBUG("Message is good.\n"); -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |