DF-2995 / run.log
DF-2995 run transcripts (ssh, captured during verification) guest: DragonFly dfbsd 6.5-DEVELOPMENT #0 X86_64_GENERIC NFS server exporting /tmp/nfsroot (maproot=root), nfsd -u -t -n 4 == baseline mbufs == 8/146632 mbufs in use (current/max): 256/33296 mbuf clusters in use (current/max) 264 mbufs and mbuf clusters allocated to data $ sysctl vfs.nfs.gatherdelay_v3=5000 vfs.nfs.gatherdelay_v3: 0 -> 5000 == 300 malformed-fh v3 WRITEs (fhlen=5) with gatherdelay_v3=5000 == write[296]: reply status=5 write[297]: reply status=5 write[298]: reply status=5 write[299]: reply status=5 == mbufs after == 607/146632 mbufs in use (current/max): 256/33296 mbuf clusters in use (current/max) 863 mbufs and mbuf clusters allocated to data => +599 mbufs leaked by 300 requests (~2 mbufs each), persistent, server still healthy (NULL replies in 0.0002s). == control: gatherdelay_v3 back to 0, 300 more identical requests == $ sysctl vfs.nfs.gatherdelay_v3=0 $ /root/nfspoc writebadfh 300 write[299]: reply status=5 607/146632 mbufs in use (current/max): => ZERO additional leak when write-gathering is off — the leak is exclusively the nfsrv_writegather nfsmout double-reply path.