All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Aneesh Kumar K. V" <aneesh.kumar@linux.vnet.ibm.com>
To: Neil Brown <neilb@suse.de>
Cc: hch@infradead.org, viro@zeniv.linux.org.uk, adilger@sun.com,
	corbet@lwn.net, serue@us.ibm.com, linux-fsdevel@vger.kernel.org,
	sfrench@us.ibm.com, philippe.deniel@CEA.FR,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH -V7 5/9] vfs: Add freadlink syscall
Date: Thu, 13 May 2010 11:55:56 +0530	[thread overview]
Message-ID: <87vdas1fnv.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <20100513114351.793caf70@notabene.brown>

On Thu, 13 May 2010 11:43:51 +1000, Neil Brown <neilb@suse.de> wrote:
> On Wed, 12 May 2010 21:20:40 +0530
> "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> wrote:
> 
> > This enables to use open-by-handle and then get the link target
> > details of a symlink using the fd returned by handle
> > 
> 
> 
> I find it very frustrating that a new syscall seems to be needed here.
> We have 'readlinkat', and it should be enough.
> How:  the 'dfd' has to be a 'directory', and the path name as to be non-empty.
> 
> The following patch allows 'path' to be NULL and in that case 'dfd' to be a
> non-directory.  This allows readlinkat and faccessat (and probably others)
> to be used on an fd with not following path name.
> 
> What do people think of this alternative?
> 

I will add this in the next iteration and drop the freadlink syscall.


> NeilBrown
> 
> 
> From: NeilBrown <neilb@suse.de>
> 
> Allow '*at' syscalls to have a NULL path name, thus using the 'fd' directly.
> 
> Move the 'is a directory' test from path_init to the start of link_path_walk
> (which is always called after a successful path_init).
> Remove the file_permission(MAY_EXEC) test from path_init as such a test
> already exists in link_path_walk as exec_permission()
> Allow user_path_at to use a NULL resulting in the dfd being the target object.
> 
> This effectively provides an 'f*' version for all syscalls with a '*at'
> version. In particular: link, access, chmod, chown, stat, readlink, utimes
> 
> Some of those already have f* versions, but link, access, readlink all
> benefit directly, and futimes code can be tidied up.
> 
> NULL is only allowed if 'dfd' is not ATFD_CWD to reduce possible
> backward-compatibility issues.
> 
> openat is not effected by this change, even in non-O_CREAT instances.  Maybe
> it should.
> 
> Signed-off-by: NeilBrown <neilb@suse.de>
> 
> 
> diff --git a/fs/namei.c b/fs/namei.c
> index 48e60a1..b9b091e 100644
> --- a/fs/namei.c
> +++ b/fs/namei.c
> @@ -824,6 +824,11 @@ static int link_path_walk(const char *name, struct nameidata *nd)
>  		goto return_reval;
> 
>  	inode = nd->path.dentry->d_inode;
> +
> +	err = -ENOTDIR;
> +	if (!S_ISDIR(inode->i_mode))
> +		goto return_err;
> +
>  	if (nd->depth)
>  		lookup_flags = LOOKUP_FOLLOW | (nd->flags & LOOKUP_CONTINUE);
> 
> @@ -1030,14 +1035,6 @@ static int path_init(int dfd, const char *name, unsigned int flags, struct namei
> 
>  		dentry = file->f_path.dentry;
> 
> -		retval = -ENOTDIR;
> -		if (!S_ISDIR(dentry->d_inode->i_mode))
> -			goto fput_fail;
> -
> -		retval = file_permission(file, MAY_EXEC);
> -		if (retval)
> -			goto fput_fail;
> -
>  		nd->path = file->f_path;
>  		path_get(&file->f_path);
> 
> @@ -1241,17 +1238,22 @@ int user_path_at(int dfd, const char __user *name, unsigned flags,
>  		 struct path *path)
>  {
>  	struct nameidata nd;
> -	char *tmp = getname(name);
> -	int err = PTR_ERR(tmp);
> -	if (!IS_ERR(tmp)) {
> -
> -		BUG_ON(flags & LOOKUP_PARENT);
> +	char *tmp;
> +	int err;
> 
> -		err = do_path_lookup(dfd, tmp, flags, &nd);
> -		putname(tmp);
> -		if (!err)
> -			*path = nd.path;
> +	BUG_ON(flags & LOOKUP_PARENT);
> +	if (name == NULL && dfd >= 0)
> +		err = do_path_lookup(dfd, "", flags, &nd);
> +	else {
> +		tmp = getname(name);
> +		err = PTR_ERR(tmp);
> +		if (!IS_ERR(tmp)) {
> +			err = do_path_lookup(dfd, tmp, flags, &nd);
> +			putname(tmp);
> +		}
>  	}
> +	if (!err)
> +		*path = nd.path;
>  	return err;
>  }
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2010-05-13  6:26 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-12 15:50 [PATCH -V7 0/8] Generic name to handle and open by handle syscalls Aneesh Kumar K.V
2010-05-12 15:50 ` [PATCH -V7 1/9] exportfs: Return the minimum required handle size Aneesh Kumar K.V
2010-05-12 15:50 ` [PATCH -V7 2/9] vfs: Add uuid based vfsmount lookup Aneesh Kumar K.V
2010-05-12 15:50 ` [PATCH -V7 3/9] vfs: Add name to file handle conversion support Aneesh Kumar K.V
2010-05-12 21:49   ` Andreas Dilger
2010-05-12 22:43     ` Neil Brown
2010-05-13  6:17       ` Aneesh Kumar K. V
2010-05-13  7:11         ` Neil Brown
2010-05-13  8:30           ` Andreas Dilger
2010-05-13  8:47             ` Neil Brown
2010-05-13 14:21             ` Aneesh Kumar K. V
2010-05-13 18:17               ` Aneesh Kumar K. V
2010-05-13 22:54                 ` Andreas Dilger
2010-05-14 17:25                   ` Al Viro
2010-05-14 18:18                     ` Aneesh Kumar K. V
2010-05-14 18:40                       ` Al Viro
2010-05-15  5:31                         ` Aneesh Kumar K. V
2010-05-15  6:00                           ` Al Viro
2010-05-15 15:28                             ` Aneesh Kumar K. V
2010-05-13  0:20     ` Dave Chinner
2010-05-13  6:23       ` Aneesh Kumar K. V
2010-05-13  7:31         ` Dave Chinner
2010-05-13  5:56     ` Aneesh Kumar K. V
2010-05-13 14:24     ` Aneesh Kumar K. V
2010-05-12 15:50 ` [PATCH -V7 4/9] vfs: Add open by file handle support Aneesh Kumar K.V
2010-05-12 23:44   ` Neil Brown
2010-05-13  6:09     ` Dave Chinner
2010-05-13  6:37       ` Aneesh Kumar K. V
2010-05-14 10:41         ` Dave Chinner
2010-05-12 15:50 ` [PATCH -V7 5/9] vfs: Add freadlink syscall Aneesh Kumar K.V
2010-05-13  1:43   ` Neil Brown
2010-05-13  6:25     ` Aneesh Kumar K. V [this message]
2010-05-13  6:56       ` Neil Brown
2010-05-13  7:34         ` Aneesh Kumar K. V
2010-05-13  8:09           ` Neil Brown
2010-05-14 11:18         ` Aneesh Kumar K. V
2010-05-12 15:50 ` [PATCH -V7 6/9] ext4: Add get_fsid callback Aneesh Kumar K.V
2010-05-13  3:11   ` Dave Chinner
2010-05-13  6:32     ` Aneesh Kumar K. V
2010-05-14  1:44       ` Dave Chinner
2010-05-14  1:44         ` Dave Chinner
2010-05-15  6:09         ` Aneesh Kumar K. V
2010-05-15  6:09           ` Aneesh Kumar K. V
2010-05-14 17:32   ` Coly Li
2010-05-14 18:21     ` Aneesh Kumar K. V
2010-05-14 19:08       ` Coly Li
2010-05-12 15:50 ` [PATCH -V7 7/9] x86: Add new syscalls for x86_32 Aneesh Kumar K.V
2010-05-12 15:50 ` [PATCH -V7 8/9] x86: Add new syscalls for x86_64 Aneesh Kumar K.V
2010-05-12 15:50 ` [PATCH -V7 9/9] ext3: Add get_fsid callback Aneesh Kumar K.V

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87vdas1fnv.fsf@linux.vnet.ibm.com \
    --to=aneesh.kumar@linux.vnet.ibm.com \
    --cc=adilger@sun.com \
    --cc=corbet@lwn.net \
    --cc=hch@infradead.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=neilb@suse.de \
    --cc=philippe.deniel@CEA.FR \
    --cc=serue@us.ibm.com \
    --cc=sfrench@us.ibm.com \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.