[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] oxenstored: fix short-write issue
When oxenstored wrote to the ring, it wrote a chunk of contiguous data. Originally when it tried to write across ring boundary, it returned a short-write when there is still room. That led to stalling mini-os's xenstore thread at times. Fix this by calling write function for a second time when the first write completes partially. Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- Cc: David Scott <dave@xxxxxxxxxx> Cc: Ian Campbell <ian.campbell@xxxxxxxxxx> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Ian, backport candidate for as far as you can manage. --- tools/ocaml/libs/xb/xb.ml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/ocaml/libs/xb/xb.ml b/tools/ocaml/libs/xb/xb.ml index 50944b5..0730d13 100644 --- a/tools/ocaml/libs/xb/xb.ml +++ b/tools/ocaml/libs/xb/xb.ml @@ -91,10 +91,12 @@ let write_fd back con s len = Unix.write back.fd s 0 len let write_mmap back con s len = - let ws = Xs_ring.write back.mmap s len in - if ws > 0 then + let ws = ref (Xs_ring.write back.mmap s len) in + if !ws < len then + ws := !ws + Xs_ring.write back.mmap (String.sub s !ws (len - !ws)) (len - !ws); + if !ws > 0 then back.eventchn_notify (); - ws + !ws let write con s len = match con.backend with -- 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 |