From: Nick Piggin on
On Tue, Jun 15, 2010 at 10:42:54PM +0530, Aneesh Kumar K.V wrote:
> The patch update may_open to allow handle based open on symlinks.
> The file handle based API use file descritor returned from open_by_handle_at
> to do different file system operations. To find the link target name we
> need to get a file descriptor on symlinks.

This is a pretty big change, isn't it? Have you looked through vfs to
ensure this is actually OK? I was just looking at remount,ro code, for
example, and it seems to assume only writable open files on ISREG
files.

Is this restricted to RDONLY? Really, it should be O_NONE...


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Aneesh Kumar K. V on
On Thu, 8 Jul 2010 01:23:03 +1000, Nick Piggin <npiggin(a)suse.de> wrote:
> On Tue, Jun 15, 2010 at 10:42:54PM +0530, Aneesh Kumar K.V wrote:
> > The patch update may_open to allow handle based open on symlinks.
> > The file handle based API use file descritor returned from open_by_handle_at
> > to do different file system operations. To find the link target name we
> > need to get a file descriptor on symlinks.
>
> This is a pretty big change, isn't it?

Yes

> Have you looked through vfs to
> ensure this is actually OK? I was just looking at remount,ro code, for
> example, and it seems to assume only writable open files on ISREG
> files.

I verified that write and read returns an error on that descriptor. I
will look at rest of code to ensure the it doesn't break assumptions in
the rest of VFS.

>
> Is this restricted to RDONLY? Really, it should be O_NONE...
>
>

we need the interface so that we can do fstat(lstat) and readlink using the
handle. If we are against the idea of allowing an fd on symlink, how about
adding stat_by_handle and readlink_by_handle syscall ? That way we can
drop "vfs: Support null pathname in readlink" patch

-aneesh
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Nick Piggin on
On Tue, Jun 15, 2010 at 10:42:54PM +0530, Aneesh Kumar K.V wrote:
> The patch update may_open to allow handle based open on symlinks.
> The file handle based API use file descritor returned from open_by_handle_at
> to do different file system operations. To find the link target name we
> need to get a file descriptor on symlinks.
>
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar(a)linux.vnet.ibm.com>
> ---
> fs/namei.c | 17 ++++++++++++++---
> 1 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/fs/namei.c b/fs/namei.c
> index c2d19c7..417bf53 100644
> --- a/fs/namei.c
> +++ b/fs/namei.c
> @@ -1422,7 +1422,7 @@ int vfs_create(struct inode *dir, struct dentry *dentry, int mode,
> return error;
> }
>
> -int may_open(struct path *path, int acc_mode, int flag)
> +static int __may_open(struct path *path, int acc_mode, int flag, int handle)
> {
> struct dentry *dentry = path->dentry;
> struct inode *inode = dentry->d_inode;
> @@ -1433,7 +1433,13 @@ int may_open(struct path *path, int acc_mode, int flag)
>
> switch (inode->i_mode & S_IFMT) {
> case S_IFLNK:
> - return -ELOOP;
> + /*
> + * For file handle based open we should allow
> + * open of symlink.
> + */
> + if (!handle)
> + return -ELOOP;
> + break;
> case S_IFDIR:
> if (acc_mode & MAY_WRITE)
> return -EISDIR;
> @@ -1473,6 +1479,11 @@ int may_open(struct path *path, int acc_mode, int flag)
> return break_lease(inode, flag);
> }
>
> +int may_open(struct path *path, int acc_mode, int flag)
> +{
> + return __may_open(path, acc_mode, flag, 0);
> +}

Why don't you just add MAY_OPEN_LNK instead of this ugliness?

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Nick Piggin on
On Wed, Jul 07, 2010 at 09:54:52PM +0530, Aneesh Kumar K. V wrote:
> On Thu, 8 Jul 2010 01:23:03 +1000, Nick Piggin <npiggin(a)suse.de> wrote:
> > On Tue, Jun 15, 2010 at 10:42:54PM +0530, Aneesh Kumar K.V wrote:
> > > The patch update may_open to allow handle based open on symlinks.
> > > The file handle based API use file descritor returned from open_by_handle_at
> > > to do different file system operations. To find the link target name we
> > > need to get a file descriptor on symlinks.
> >
> > This is a pretty big change, isn't it?
>
> Yes
>
> > Have you looked through vfs to
> > ensure this is actually OK? I was just looking at remount,ro code, for
> > example, and it seems to assume only writable open files on ISREG
> > files.
>
> I verified that write and read returns an error on that descriptor. I
> will look at rest of code to ensure the it doesn't break assumptions in
> the rest of VFS.
>
> >
> > Is this restricted to RDONLY? Really, it should be O_NONE...
> >
> >
>
> we need the interface so that we can do fstat(lstat) and readlink using the
> handle. If we are against the idea of allowing an fd on symlink, how about
> adding stat_by_handle and readlink_by_handle syscall ? That way we can
> drop "vfs: Support null pathname in readlink" patch

It would be nice to avoid introducing open files to symlinks, but
I don't know about really the *right* thing to do though. I think
avoiding adding any by-handle syscalls except for open by handle
may be a good idea... OTOH if this is really a special case for
handles...

I haven't followed this thread closely, so can you just go back
and explain to me why you need this? Ie. that you can't achieve with
a path-to-handle follow/nofollow option.


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Aneesh Kumar K. V on
On Thu, 8 Jul 2010 02:57:19 +1000, Nick Piggin <npiggin(a)suse.de> wrote:
> On Wed, Jul 07, 2010 at 09:54:52PM +0530, Aneesh Kumar K. V wrote:
> > On Thu, 8 Jul 2010 01:23:03 +1000, Nick Piggin <npiggin(a)suse.de> wrote:
> > > On Tue, Jun 15, 2010 at 10:42:54PM +0530, Aneesh Kumar K.V wrote:
> > > > The patch update may_open to allow handle based open on symlinks.
> > > > The file handle based API use file descritor returned from open_by_handle_at
> > > > to do different file system operations. To find the link target name we
> > > > need to get a file descriptor on symlinks.
> > >
> > > This is a pretty big change, isn't it?
> >
> > Yes
> >
> > > Have you looked through vfs to
> > > ensure this is actually OK? I was just looking at remount,ro code, for
> > > example, and it seems to assume only writable open files on ISREG
> > > files.
> >
> > I verified that write and read returns an error on that descriptor. I
> > will look at rest of code to ensure the it doesn't break assumptions in
> > the rest of VFS.
> >
> > >
> > > Is this restricted to RDONLY? Really, it should be O_NONE...
> > >
> > >
> >
> > we need the interface so that we can do fstat(lstat) and readlink using the
> > handle. If we are against the idea of allowing an fd on symlink, how about
> > adding stat_by_handle and readlink_by_handle syscall ? That way we can
> > drop "vfs: Support null pathname in readlink" patch
>
> It would be nice to avoid introducing open files to symlinks, but
> I don't know about really the *right* thing to do though. I think
> avoiding adding any by-handle syscalls except for open by handle
> may be a good idea... OTOH if this is really a special case for
> handles...
>
> I haven't followed this thread closely, so can you just go back
> and explain to me why you need this? Ie. that you can't achieve with
> a path-to-handle follow/nofollow option.


We need to be able to read the link target using file handle. The exact
usecase i have is with respect to implementing READLINK operation on a
userspace NFS server. The request contain the file handle and the
response include target name.

Similarly we need to able to get file attribute based on file handle.
I was using readlinkat and fstat to obtain both the above information
using the descriptor returned by open_by_handle on a file handle
representing symlink

-aneesh
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/