On Wed, 2026-04-08 at 14:16 -0400, Chuck Lever wrote:
> On Tue, Apr 7, 2026, at 9:21 AM, Jeff Layton wrote:
> > If a NFS client requests a directory delegation with a notification
> > bitmask covering directory change events, the server shouldn't recall
> > the delegation. Instead the client will be notified of the change after
> > the fact.
> > 
> > Add support for ignoring lease breaks on directory changes. Add a new
> > flags parameter to try_break_deleg() and teach __break_lease how to
> > ignore certain types of delegation break events.
> > 
> > Signed-off-by: Jeff Layton <[email protected]>
> > ---
> 
> > diff --git a/fs/locks.c b/fs/locks.c
> > index 8e44b1f6c15a..dafa0752fdce 100644
> > --- a/fs/locks.c
> > +++ b/fs/locks.c
> 
> > @@ -1670,7 +1709,7 @@ int __break_lease(struct inode *inode, unsigned int 
> > flags)
> >                     locks_delete_lock_ctx(&fl->c, &dispose);
> >     }
> > 
> > -   if (list_empty(&ctx->flc_lease))
> > +   if (!visible_leases_remaining(inode, flags))
> >             goto out;
> > 
> >     if (flags & LEASE_BREAK_NONBLOCK) {
> 
> After breaking visible leases, the restart: label calls any_leases_conflict()
> which does not filter ignored dir-delegation leases. When only ignored leases
> remain, any_leases_conflict returns true, but visible_leases_remaining also
> returned true (triggering the wait). The code picks the first lease (possibly
> ignored), computes break_time = 1 jiffy, blocks, then loops.                  
>                                    
> 
> For example, suppose you have two directory delegations on a directory, one
> with FL_IGN_DIR_DELETE and one without. After the non-ignored one is broken
> and removed, the ignored one keeps any_leases_conflict returning true. The
> loop spins at 1-jiffy intervals until the ignored delegation is released.  
> 
> Should the restart: block skip ignored leases?
> 

Yep. The right fix is to switch the any_leases_conflict() call to
visible_leases_remaining(). I'll code that up and test it.

Thanks for the review!
-- 
Jeff Layton <[email protected]>

Reply via email to