Page MenuHomeFreeBSD

fix the NFS server for ERELOOKUP operation redos
ClosedPublic

Authored by rmacklem on Dec 31 2020, 10:28 PM.
Tags
None
Referenced Files
Unknown Object (File)
Jan 26 2024, 10:45 PM
Unknown Object (File)
Dec 28 2023, 10:25 AM
Unknown Object (File)
Dec 20 2023, 11:51 AM
Unknown Object (File)
Dec 20 2023, 5:22 AM
Unknown Object (File)
Dec 5 2023, 5:38 PM
Unknown Object (File)
Oct 8 2023, 8:47 AM
Unknown Object (File)
Sep 18 2023, 12:41 AM
Unknown Object (File)
Sep 18 2023, 12:40 AM
Subscribers
None

Details

Summary

r367672 modified UFS such that certain VOPs, such as
VOP_CREATE() will intermittently return ERELOOKUP.
When this happens, the entire system call, or NFS
operation in the case of the NFS server, must be redone.

This patch adds that support to the NFS server by rolling
back the state of the NFS request arguments and NFS
reply arguments mbuf lists to the condition they were
in before the operation and then redoing the operation.

Test Plan

This problem was detected by the "4 large compiles"
connectathon test, which does four concurrent
compiles within the same NFS mounted directory.

Without this patch, the loader step would fail, due to
not have created all output files.
With this patch, the test works correctly.
I will also be requesting testing be done by pho@.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

rmacklem created this revision.
kib added inline comments.
sys/fs/nfsserver/nfs_nfsdport.c
6577

Not specific to this review.

I think this function lacks assert WRT consistency between bpos and bextpg*.

This revision is now accepted and ready to land.Jan 1 2021, 3:13 PM
This revision was automatically updated to reflect the committed changes.