Message ID | 20200303015859.18813-2-dongli.zhang@oracle.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [1/2] xenbus: req->body should be updated before req->state | expand |
Hi, On 03/03/2020 01:58, Dongli Zhang wrote: > This patch adds the barrier to guarantee that req->err is always updated > before req->state. > > Otherwise, read_reply() would not return ERR_PTR(req->err) but > req->body, when process_writes()->xb_write() is failed. The memory barrier below looks good. However, as mentionned in patch #1, barrier() is not the correct barrier to pair with virt_wmb(). > > Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com> > --- > drivers/xen/xenbus/xenbus_comms.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/xen/xenbus/xenbus_comms.c b/drivers/xen/xenbus/xenbus_comms.c > index 852ed161fc2a..eb5151fc8efa 100644 > --- a/drivers/xen/xenbus/xenbus_comms.c > +++ b/drivers/xen/xenbus/xenbus_comms.c > @@ -397,6 +397,8 @@ static int process_writes(void) > if (state.req->state == xb_req_state_aborted) > kfree(state.req); > else { > + /* write err, then update state */ > + virt_wmb(); > state.req->state = xb_req_state_got_reply; > wake_up(&state.req->wq); > } > Cheers,
diff --git a/drivers/xen/xenbus/xenbus_comms.c b/drivers/xen/xenbus/xenbus_comms.c index 852ed161fc2a..eb5151fc8efa 100644 --- a/drivers/xen/xenbus/xenbus_comms.c +++ b/drivers/xen/xenbus/xenbus_comms.c @@ -397,6 +397,8 @@ static int process_writes(void) if (state.req->state == xb_req_state_aborted) kfree(state.req); else { + /* write err, then update state */ + virt_wmb(); state.req->state = xb_req_state_got_reply; wake_up(&state.req->wq); }
This patch adds the barrier to guarantee that req->err is always updated before req->state. Otherwise, read_reply() would not return ERR_PTR(req->err) but req->body, when process_writes()->xb_write() is failed. Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com> --- drivers/xen/xenbus/xenbus_comms.c | 2 ++ 1 file changed, 2 insertions(+)