On Mon, Jan 07, 2019 at 10:06:19PM +0000, Trond Myklebust wrote: > On Mon, 2019-01-07 at 16:32 -0500, bfields@xxxxxxxxxxxx wrote: > > So maybe we actually need > > > > static bool svc_xprt_has_something_to_do(struct svc_xprt *xprt) > > { > > + mb(); > > You would at best need a 'smp_rmb()'. There is nothing to gain from > adding a write barrier here, That's not my understanding. What we have is basically: 1 2 ---- ---- WRITE to A WRITE to B READ from A and B READ from A and B and we want to guarantee that at least one of those two reads will see both of the writes. A read barrier only orders reads with respect to the barrier, it doesn't do anything about writes, so doesn't guarantee anything here. --b. > and you don't even need a read barrier in > the non-smp case. > > > if (xprt->xpt_flags & ((1<<XPT_CONN)|(1<<XPT_CLOSE))) > > return true; > > if (xprt->xpt_flags & ((1<<XPT_DATA)|(1<<XPT_DEFERRED))) { > > > > Then whichever memory barrier executes second guarantees that the > > following check sees the result of both the XPT_DATA and xpt_nr_rqsts > > changes. I think.... > > > > -- > Trond Myklebust > Linux NFS client maintainer, Hammerspace > trond.myklebust@xxxxxxxxxxxxxxx > >