mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
sunrpc: start cache request seqno at 1 to fix netlink GET_REQS
sunrpc_cache_requests_snapshot() filters requests with
crq->seqno <= min_seqno. The min_seqno for the first netlink
dump call is cb->args[0] which is 0. Since next_seqno was
initialized to 0, the very first cache request got seqno=0
and was silently skipped by the snapshot (0 <= 0 is true).
This caused netlink-based GET_REQS to return 0 pending requests
even when a request was queued, preventing mountd from resolving
cache entries (particularly expkey/nfsd.fh). The unresolved
CACHE_PENDING state blocked all further notifications for the
entry, leading to permanent NFS4ERR_DELAY hangs.
Start next_seqno at 1 so all requests have seqno >= 1 and pass
the snapshot filter when min_seqno is 0.
Fixes: facc4e3c80 ("sunrpc: split cache_detail queue into request and reader lists")
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
parent
4183cf383b
commit
c00b472a13
|
|
@ -403,7 +403,7 @@ void sunrpc_init_cache_detail(struct cache_detail *cd)
|
|||
INIT_LIST_HEAD(&cd->readers);
|
||||
spin_lock_init(&cd->queue_lock);
|
||||
init_waitqueue_head(&cd->queue_wait);
|
||||
cd->next_seqno = 0;
|
||||
cd->next_seqno = 1;
|
||||
spin_lock(&cache_list_lock);
|
||||
cd->nextcheck = 0;
|
||||
cd->entries = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user