exportfs: add new methods
Subsystems (4)
PATCH 2/18 exportfs: add new methods
Add the guts for the new filesystem API to exportfs.
There's now a fh_to_dentry method that returns a dentry for the object looked for given a filehandle fragment, and a fh_to_parent operation that returns the dentry for the encoded parent directory in case the file handle contains it.
There are default implementations for these methods that only take a callback for an nfs-enhanced iget variant and implement the rest of the semantics.
include/linux/exportfs.h +30 -0
@@ -4,6 +4,7 @@#include <linux/types.h> struct dentry ; +struct inode ;struct super_block ;struct vfsmount ;
@@ -101,6 +102,21 @@ struct fid {* the filehandle fragment. encode_fh() should return the number of bytes * stored or a negative error code such as %-ENOSPC * +* fh_to_dentry: +* @fh_to_dentry is given a &struct super_block (@sb) and a file handle +* fragment (@fh, @fh_len). It should return a &struct dentry which refers +* to the same file that the file handle fragment refers to. If it cannot, +* it should return a %NULL pointer if the file was found but no acceptable +* &dentries were available, or an %ERR_PTR error code indicating why it +* couldn't be found (e.g. %ENOENT or %ENOMEM). Any suitable dentry can be +* returned including, if necessary, a new dentry created with d_alloc_root. +* The caller can then find any other extant dentries by following the +* d_alias links. +* +* fh_to_parent: +* Same as @fh_to_dentry, except that it returns a pointer to the parent +* dentry if it was encoded into the filehandle fragment by @encode_fh. +* * get_name: * @get_name should find a name for the given @child in the given @parent * directory. The name should be stored in the @name (with the
@@ -139,6 +155,10 @@ struct export_operations { void *context);int (*encode_fh)(struct dentry *de,__u32 *fh,int *max_len,int connectable); +struct dentry * (*fh_to_dentry)(struct super_block *sb,struct fid *fid, +int fh_len,int fh_type); +struct dentry * (*fh_to_parent)(struct super_block *sb,struct fid *fid, +int fh_len,int fh_type);int (*get_name)(struct dentry *parent,char *name,struct dentry *child);struct dentry * (*get_parent)(struct dentry *child);
@@ -161,4 +181,14 @@ extern struct dentry *exportfs_decode_fh int fh_len, int fileid_type, int (*acceptable)(void *, struct dentry *), void *context); +/* +* Generic helpers for filesystems. +*/ +extern struct dentry *generic_fh_to_dentry (struct super_block *sb, +struct fid *fid,int fh_len,int fh_type, +struct inode *(*get_inode) (struct super_block *sb,u64 ino,u32 gen)); +extern struct dentry *generic_fh_to_parent (struct super_block *sb, +struct fid *fid,int fh_len,int fh_type, +struct inode *(*get_inode) (struct super_block *sb,u64 ino,u32 gen)); +#endif /* LINUX_EXPORTFS_H */
fs/exportfs/expfs.c +130 -6
147 lines not on this page · raw message
fs/libfs.c +88 -0
100 lines not on this page · raw message
--
fs/exportfs/expfs.c struct dentry *exportfs_decode_fh(struct · line 568
Quoted 5 lines · On Wed, 19 Sep 2007 18:30:25 +0200 Christoph Hellwig <[email protected]> wrote:
fs/exportfs/expfs.c +5
-0+/* +* It's not a directory. Life is a little more complicated. +*/ +struct dentry *target_dir, *nresult; +char nbuf[NAME_MAX +1 ];
Lots of stack usage there.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs
Quoted 10 lines · Andrew Morton
fs/exportfs/expfs.c struct dentry *exportfs_decode_fh(struct · line 568
Quoted 5 lines · On Wed, 19 Sep 2007 18:30:25 +0200 Christoph Hellwig <[email protected]> wrote:
fs/exportfs/expfs.c +5
-0+/* +* It's not a directory. Life is a little more complicated. +*/ +struct dentry *target_dir, *nresult; +char nbuf[NAME_MAX +1 ];Lots of stack usage there.
True. But this is just copying the old code around to make use of the new methods, so I didn't want to mess with underlying details.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs