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? > 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.