> On Aug 29, 2017, at 5:52 PM, J. Bruce Fields <bfields@xxxxxxxxxxxx> wrote: > > On Sat, Aug 26, 2017 at 02:06:05PM -0400, Chuck Lever wrote: >> >>> On Aug 25, 2017, at 5:52 PM, J. Bruce Fields <bfields@xxxxxxxxxx> wrote: >>> >>> From: "J. Bruce Fields" <bfields@xxxxxxxxxx> >>> >>> This is my attempt to fix the NFS server so we don't unnecessarily >>> recall delegations when the operation breaking the delegation comes from >>> the same client that holds the delegation. >>> >>> To do that we need some way to pass the identity of the breaker down >>> through the VFS. >>> >>> I didn't feel like adding another argument to all the VFS functions that >>> this might need to be passed down through. But all of those functions >>> already take a struct inode **delegated inode, so instead I turned that >>> into a single-member struct deleg_ctrl *, which I then added a second >>> member to. >>> >>> I dunno, welcome any more straightforward ways of doing this if anyone >>> has suggestions. >>> >>> My first attempt was to do this by instead checking for conflicts in the >>> caller (nfsd) and then passing down one just one bit telling the lease >>> code conflicts had already been checked so it didn't need to. But >>> that's much too early to check for conflicts, since the caller doesn't >>> have the necessary inode locks yet. >>> >>> I'm still missing testing. Regression tests pass, but I haven't >>> actually confirmed that the self-conflicts are gone! Off to go hack on >>> pynfs.... >> >> FWIW, I observe a lot of delegation recall activity when running > > How are you measuring that? My observation is based on wire traces. >> the git regression tests on an NFSv4.x mount. This is a single >> client. > >> >> Unpack a recent release of the git tarball. >> >> $ cd src/git >> $ make clean >> $ make >> $ make test >> >> Easily scriptable, and you can "cd t/" and run individual >> regression tests if you like. > > Thanks, I'll look into that. > > --b. -- Chuck Lever