Re: [PATCH -V8 2/9] vfs: Add name to file handle conversion support

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

 



On Wed, 19 May 2010 14:22:22 +0530, "Aneesh Kumar K. V" <aneesh.kumar@xxxxxxxxxxxxxxxxxx> wrote:
> On Wed, 19 May 2010 16:15:51 +0900, "J. R. Okajima" <hooanon05@xxxxxxxxxxx> wrote:
> > 
> > "Aneesh Kumar K. V":
> > > Now that we are not doing UUID based vfsmount lookup this make
> > > sense. Will update in the next iteration with UUID to be part of
> > > super_block.
> > 
> > Because this UUID is just for some FS's userspace helpers (in other
> > words, returning UUID is FS specific behaviour), I am afraid it is not a
> > good ideat to put the array into generic super_block.
> 
> UUID should be looked at as the file system identifier and IMHO struct
> super_block is the right place to hold it. For ex: ext*  put then in
> ext*_super_block. File system that doesn't support UUID can leave the
> superblock field zero filled.
> 
> 
> > 
> > About the design or approach, this might have been discussed earlier,
> > but I'd like to suggest to clarify some points here.
> > - While these new systemcalls provide generic features, the
> >   implementation depends upon s_export_op, ie. NFS-exporting.
> >   It means there are two requirements for these systemcalls, enabling
> >   CONFIG_EXPORTFS and FS has to set s_export_op.
> >   Is this acceptable?
> 
> 
> I think exportfs is the right interface we want to depend on for
> generating a handle. We should not be having another parallel interface for file
> handle generation. But agreed that we should return -EOPNOTSUPP in case
> EXPORTFS is disabled.
> 
> 
> > 
> > - exportfs_encode_fh() supports the default encoding
> >   export_encode_fh(), but exportfs_decode_fh() doesn't.
> >   The latest patch series modifes exportfs_decode_fh() to return ESTALE,
> >   but I'd suggest to make the caller of export_encode_fh() to check
> >   s_export_op->fh_to_dentry() and return ENOSYS.
> 
> I will fix to make the syscall return EOPNOTSUPP in case fh_to_dentry is
> not supported. But i guess we still need to keep the change in
> exportfs_decode_fh to return -ESTALE in case these operations are not definied.
> 
> 
> 
> >   Or implement the default decode routine as a contrast of
> >   export_encode_fh().
> > 
> > - Some FS (or its userspace helper) may want to put UUID into the
> >   handle. If those FS already have UUID in their fs private_data, then
> >   putting a pointer (instead of an array) is better.
> >   Or creating two new operations in s_op to encode/decode handle
> >   may be good too (regardless CONFIG_EXPORTFS). The generic
> >   implementations should be provided, and when these function pointers
> >   in s_op are not set, they should be called as default. These generic
> >   implementaions will be able to be used by expfs.c too. And UUID in
> >   super_block will be unnecessary.
> 
> 
> IMHO that would be over design. We can depend on exportfs
> interfaces and if not defined return EOPNOTSUPP.
> 

How about the below patch ?

commit 5f421ffbe9dd7bb84c5992b1725c06b511bc76d8
Author: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx>
Date:   Wed May 19 14:52:44 2010 +0530

    vfs: Return ENOSYS if CONFIG_EXPORTFS is not enabled
    
    Both the syscalls need exportfs support enabled. So if CONFIG_EXPORTFS
    is not enabled return ENOSYS. While converting name to handle check
    whether the filesystem support handle decode. If not return EOPNOTSUPP.
    We don't do a similar check in open by handle because exportfs_decode_fh
    will return ESTALE if file system doesn't support fh_to_dentry callback.
    
    Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx>

diff --git a/fs/open.c b/fs/open.c
index 14e6d3c..b5fc067 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -1274,6 +1274,9 @@ SYSCALL_DEFINE4(name_to_handle_at, int, dfd, const char __user *, name,
 	long ret = -EINVAL;
 	struct path path;
 
+#ifndef CONFIG_EXPORTFS
+	return -ENOSYS;
+#endif
 	if ((flag & ~AT_SYMLINK_FOLLOW) != 0)
 		goto err_out;
 
@@ -1281,6 +1284,14 @@ SYSCALL_DEFINE4(name_to_handle_at, int, dfd, const char __user *, name,
 	ret = user_path_at(dfd, name, follow, &path);
 	if (ret)
 		goto err_out;
+	/*
+	 * We need t make sure wether the file system
+	 * support decoding of the file handle
+	 */
+	if (!path.mnt->mnt_sb->s_export_op ||
+		!path.mnt->mnt_sb->s_export_op->fh_to_dentry)
+		return -EOPNOTSUPP;
+
 	ret = do_sys_name_to_handle(&path, handle);
 	path_put(&path);
 err_out:
@@ -1450,6 +1461,9 @@ SYSCALL_DEFINE3(open_by_handle, int, mountdirfd,
 {
 	long ret;
 
+#ifndef CONFIG_EXPORTFS
+	return -ENOSYS;
+#endif
 	if (force_o_largefile())
 		flags |= O_LARGEFILE;
 
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux