Re: [PATCH RFC 03/24] vfs: add try_break_deleg calls for parents to vfs_{link,rename,unlink}

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, 2024-03-16 at 23:57 +0000, Al Viro wrote:
> On Fri, Mar 15, 2024 at 12:52:54PM -0400, Jeff Layton wrote:
> > @@ -4603,9 +4606,12 @@ int vfs_link(struct dentry *old_dentry, struct mnt_idmap *idmap,
> >  	else if (max_links && inode->i_nlink >= max_links)
> >  		error = -EMLINK;
> >  	else {
> > -		error = try_break_deleg(inode, delegated_inode);
> > -		if (!error)
> > -			error = dir->i_op->link(old_dentry, dir, new_dentry);
> > +		error = try_break_deleg(dir, delegated_inode);
> > +		if (!error) {
> > +			error = try_break_deleg(inode, delegated_inode);
> > +			if (!error)
> > +				error = dir->i_op->link(old_dentry, dir, new_dentry);
> > +		}
> 
> A minor nit: that might be easier to follow as
> 		error = try_break_deleg(dir, delegated_inode);
> 		if (!error)
> 			error = try_break_deleg(inode, delegated_inode);
> 		if (!error)
> 			error = dir->i_op->link(old_dentry, dir, new_dentry);
> 
> and let the compiler deal with optimizing it - any C compiler is going to be
> able to figure out that one out.  vfs_link() is a mix of those styles anyway -
> we have
>         if (!error && (inode->i_state & I_LINKABLE)) {
>                 spin_lock(&inode->i_lock);
>                 inode->i_state &= ~I_LINKABLE;
>                 spin_unlock(&inode->i_lock);
>         }
> immediately afterwards; might as well make that consistent, especially since
> you are getting more shallow nesting that way.

Sounds good. Fixed in my tree.

Thanks for the review so far!
-- 
Jeff Layton <jlayton@xxxxxxxxxx>





[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux