Re: [RFC][PATCH 04/13] do_utimes_path(): import pathname only once

Jan Kara <[email protected]>
Newsgroups org.kernel.vger.audit,org.kernel.vger.io-uring,org.kernel.vger.linux-fsdevel
Message-ID <cyz62c6deuwpbr3qw4zdghqbyykzfvuwgqkazbh76oaolexan6@pdxsskeemg5c>
On Sun 09-11-25 06:37:36, Al Viro wrote:
> Convert the user_path_at() call inside a retry loop into getname_flags() +
> filename_lookup() + putname() and leave only filename_lookup() inside
> the loop.
> 
> Since we have the default logics for use of LOOKUP_EMPTY (passed iff
> AT_EMPTY_PATH is present in flags), just use getname_uflags() and
> don't bother with setting LOOKUP_EMPTY in lookup_flags - getname_uflags()
> will pass the right thing to getname_flags() and filename_lookup()
> doesn't care about LOOKUP_EMPTY at all.
> 
> The things could be further simplified by use of cleanup.h stuff, but
> let's not clutter the patch with that.
> 
> Signed-off-by: Al Viro <[email protected]>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <[email protected]>

								Honza

> ---
>  fs/utimes.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/fs/utimes.c b/fs/utimes.c
> index c7c7958e57b2..262a4ddeb9cc 100644
> --- a/fs/utimes.c
> +++ b/fs/utimes.c
> @@ -8,6 +8,7 @@
>  #include <linux/compat.h>
>  #include <asm/unistd.h>
>  #include <linux/filelock.h>
> +#include "internal.h"
>  
>  static bool nsec_valid(long nsec)
>  {
> @@ -82,27 +83,27 @@ static int do_utimes_path(int dfd, const char __user *filename,
>  {
>  	struct path path;
>  	int lookup_flags = 0, error;
> +	struct filename *name;
>  
>  	if (flags & ~(AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH))
>  		return -EINVAL;
>  
>  	if (!(flags & AT_SYMLINK_NOFOLLOW))
>  		lookup_flags |= LOOKUP_FOLLOW;
> -	if (flags & AT_EMPTY_PATH)
> -		lookup_flags |= LOOKUP_EMPTY;
> +	name = getname_uflags(filename, flags);
>  
>  retry:
> -	error = user_path_at(dfd, filename, lookup_flags, &path);
> +	error = filename_lookup(dfd, name, lookup_flags, &path, NULL);
>  	if (error)
> -		return error;
> -
> +		goto out;
>  	error = vfs_utimes(&path, times);
>  	path_put(&path);
>  	if (retry_estale(error, lookup_flags)) {
>  		lookup_flags |= LOOKUP_REVAL;
>  		goto retry;
>  	}
> -
> +out:
> +	putname(name);
>  	return error;
>  }
>  
> -- 
> 2.47.3
> 
-- 
Jan Kara <[email protected]>
SUSE Labs, CR
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.