On Sat, 27 Aug 2022, Al Viro wrote: > On Fri, Aug 26, 2022 at 12:10:43PM +1000, NeilBrown wrote: > > > if (is_create_with_attrs(open)) > > nfsd4_acl_to_attr(NF4REG, open->op_acl, &attrs); > > + inode = d_inode(path.dentry); > > > > - inode_lock_nested(inode, I_MUTEX_PARENT); > > + child = filename_create_one_len(open->op_fname, > > + open->op_fnamelen, > > + &path, 0, &wq); > > > > - child = lookup_one_len(open->op_fname, parent, open->op_fnamelen); > > - if (IS_ERR(child)) { > > - status = nfserrno(PTR_ERR(child)); > > - goto out; > > - } > > + if (IS_ERR(child)) > > + return nfserrno(PTR_ERR(child)); > > Leaks acls, by the look of it? Yep - I think that fell through a crack when I reordered patches to get get some clean-ups into nfsd before this repost. > > > + if (!IS_PAR_UPDATE(fhp->fh_dentry->d_inode) && > > + inode_trylock_shared(fhp->fh_dentry->d_inode)) { > > + /* only have a shared lock */ > > + inode_unlock_shared(fhp->fh_dentry->d_inode); > > + fhp->fh_no_atomic_attr = true; > > + fhp->fh_no_wcc = true; > > Er... Shouldn't that be IS_PAR_UPDATE() && ... ? > Definitely. Thanks! NeilBrown