mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-29 01:51:39 +00:00
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. Signed-off-by: Christoph Hellwig <hch@lst.de> Cc: Neil Brown <neilb@suse.de> Cc: "J. Bruce Fields" <bfields@fieldses.org> Cc: <linux-ext4@vger.kernel.org> Cc: Dave Kleikamp <shaggy@austin.ibm.com> Cc: Anton Altaparmakov <aia21@cantab.net> Cc: David Chinner <dgc@sgi.com> Cc: Timothy Shimmin <tes@sgi.com> Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Cc: Hugh Dickins <hugh@veritas.com> Cc: Chris Mason <mason@suse.com> Cc: Jeff Mahoney <jeffm@suse.com> Cc: "Vladimir V. Saveliev" <vs@namesys.com> Cc: Steven Whitehouse <swhiteho@redhat.com> Cc: Mark Fasheh <mark.fasheh@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
6e91ea2bb0
commit
2596110a39
3 changed files with 249 additions and 7 deletions
|
@ -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(struct vfsmount *mnt, struct fid *fid,
|
|||
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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue