On Thu, Sep 26, 2024 at 08:42:06AM +1000, NeilBrown wrote: > I don't think so. > The old delegated_inode_new will be carried in to vfs_rename() and > passed to try_break_deleg() which will notice that it is not-NULL and > will "do the right thing". > > Both _old and _new are initialised to zero at the start of > do_renameat2(), Both are passed to break_deleg_wait() on the last time > through the retry_deleg loop which will drop the references - or will > preserve the reference if it isn't the last time - and both are only set > by try_break_deleg() which is careful to check if a prior value exists. > So I think there are no leaks. Yecchhhh... What happens if break_deleg() in there returns e.g. -ENOMEM when try_break_deleg() finds a matching inode? I'm not even saying it won't work, but it's way too brittle for my taste ;-/