On Fri, Dec 06, 2019 at 11:00:02AM -0500, Joel Fernandes wrote: > +Paul, here is the dependent patch for the list_prev_rcu() patch Madhuparna > posted. Got it, thank you! And however this turns out, it does illustrate the value of the sparse address-space checks! Thanx, Paul > On Fri, Dec 06, 2019 at 08:46:40PM +0530, madhuparnabhowmik04@xxxxxxxxx wrote: > > From: Madhuparna Bhowmik <madhuparnabhowmik04@xxxxxxxxx> > > > > This patch fixes the following errors: > > fs/nfs/dir.c:2353:14: error: incompatible types in comparison expression (different address spaces): > > fs/nfs/dir.c:2353:14: struct list_head [noderef] <asn:4> * > > fs/nfs/dir.c:2353:14: struct list_head * > > > > caused due to directly accessing the prev pointer of > > a RCU protected list. > > Accessing the pointer using the macro list_prev_rcu() fixes this error. > > > > Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik04@xxxxxxxxx> > > --- > > fs/nfs/dir.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c > > index e180033e35cf..2035254cc283 100644 > > --- a/fs/nfs/dir.c > > +++ b/fs/nfs/dir.c > > @@ -2350,7 +2350,7 @@ static int nfs_access_get_cached_rcu(struct inode *inode, const struct cred *cre > > rcu_read_lock(); > > if (nfsi->cache_validity & NFS_INO_INVALID_ACCESS) > > goto out; > > - lh = rcu_dereference(nfsi->access_cache_entry_lru.prev); > > + lh = rcu_dereference(list_prev_rcu(&nfsi->access_cache_entry_lru)); > > cache = list_entry(lh, struct nfs_access_entry, lru); > > if (lh == &nfsi->access_cache_entry_lru || > > cred != cache->cred) > > -- > > 2.17.1 > >