On 2/4/2017 13:41, Kinglong Mee wrote: > When the first time pynfs runs after rpc/nfsd startup, always get the warning, > > Got error: Connection closed > > Commit 778620364ef5 "sunrpc/cache: make cache flushing more reliable." lets > cache_is_expired() checking expired as, > > return (h->expiry_time < seconds_since_boot()) || > (detail->flush_time >= h->last_refresh); > > The detail->flush_time is equal to h->last_refresh time, when the cache is > new created and then do the upcall immediately. So that, the cache will be > treated as expired and be cleaned when write_flush(). > > This patch skips checking the pending cache expired when doing upcall. > > Signed-off-by: Kinglong Mee <kinglongmee@xxxxxxxxx> > --- > include/linux/sunrpc/cache.h | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h > index 62a60ee..9961c1f 100644 > --- a/include/linux/sunrpc/cache.h > +++ b/include/linux/sunrpc/cache.h > @@ -204,8 +204,11 @@ static inline void cache_put(struct cache_head *h, struct cache_detail *cd) > kref_put(&h->ref, cd->cache_put); > } > > -static inline int cache_is_expired(struct cache_detail *detail, struct cache_head *h) > +static inline bool cache_is_expired(struct cache_detail *detail, struct cache_head *h) > { > + if (test_bit(CACHE_PENDING, &h->flags)) > + return false; > + Sorry, with this patch there is a bug exist, When a pending cache exist, sunrpc_destroy_cache_detail() cann't cleanup the cache_detail, but user always free it later, that will cause a NULL reference. Please ignore this patch, maybe another patch for the above problem will be sent. thanks, Kinglong Mee > return (h->expiry_time < seconds_since_boot()) || > (detail->flush_time >= h->last_refresh); > } > -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html