Page MenuHomeFreeBSD

fix the NFS server for ERELOOKUP operation redos
ClosedPublic

Authored by rmacklem on Dec 31 2020, 10:28 PM.

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
R10 FreeBSD src repository
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; 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.