OpenSolaris

Printable Version Enter a New Search
Bug ID 6668354
Synopsis rfs4_find_dr() should avoid freeing DRC entry too early
State 10-Fix Delivered (Fix available in build)
Category:Subcategory kernel:nfsv4
Keywords rtiq_regression
Responsible Engineer Pavel Filipensky
Reported Against snv_83
Duplicate Of
Introduced In solaris_nevada
Commit to Fix snv_86
Fixed In snv_86
Release Fixed solaris_nevada(snv_86) , solaris_10u6(s10u6_01) (Bug ID:2160602)
Related Bugs 6416641
Submit Date 27-February-2008
Last Update Date 28-March-2008
Description
After putback of 6416641, rfs4_find_dr() is not checking the
dr_time_used field, when walking the DRC bucket for given XID.

Following can happen:

1) some DRC bucket has several entries old only few miliseconds,
they should be used if same request is retransmitted.


2) some NFS client sends a new request which is hashed according
to XID to same DRC bucket as above. rfs4_find_dr() will try to find
if matching entry (same XID, same client). As this is a new request
such entry is not found, and whole bucket is walked. As side effect
all entries in state NFS4_DUP_REPLAY are freed, no matter how old
are they.

This breaks the main purpose of DRC - avoidance of multiple processing 
of non-idempotent requests.
Work Around
N/A
Comments
N/A