exportfs: remove old methods
Subsystems (2)
PATCH 39/41 exportfs: remove old methods
From: Christoph Hellwig <[email protected]>
Now that all filesystems are converted remove support for the old methods.
Signed-off-by Christoph Hellwig <[email protected]>
Cc Neil Brown <[email protected]>
Cc "J. Bruce Fields" <[email protected]>
Cc <[email protected]>
Cc Dave Kleikamp <[email protected]>
Cc Anton Altaparmakov <[email protected]>
Cc David Chinner <[email protected]>
Cc Timothy Shimmin <[email protected]>
Cc OGAWA Hirofumi <[email protected]>
Cc Hugh Dickins <[email protected]>
Cc Chris Mason <[email protected]>
Cc Jeff Mahoney <[email protected]>
Cc "Vladimir V. Saveliev" <[email protected]>
Cc Steven Whitehouse <[email protected]>
Cc Mark Fasheh <[email protected]>
Signed-off-by Andrew Morton <[email protected]>
---
fs/exportfs/expfs.c | 179 ------------------------------------- fs/nfsd/export.c | 8 - include/linux/exportfs.h | 41 -------- 3 files changed, 3 insertions(+), 225 deletions(-)
fs/exportfs/expfs.c renamed from fs/exportfs/expfs.c~exportfs-remove-old-methods +0 -179
@@ -13,19 +13,6 @@ static int get_name(struct dentry *dentr struct dentry *child); -static struct dentry *exportfs_get_dentry (struct super_block *sb,void *obj) -{ -struct dentry *result =ERR_PTR (-ESTALE ); - -if (sb->s_export_op->get_dentry) { - result = sb->s_export_op->get_dentry (sb, obj); -if (!result) - result =ERR_PTR (-ESTALE ); - } - -return result; -} -static int exportfs_get_name (struct dentry *dir,char *name,struct dentry *child) {
@@ -214,125 +201,6 @@ reconnect_path(struct super_block *sb, sreturn 0 ; } -/** -* find_exported_dentry - helper routine to implement export_operations->decode_fh -* @sb: The &super_block identifying the filesystem -* @obj: An opaque identifier of the object to be found - passed to -* get_inode -* @parent: An optional opqaue identifier of the parent of the object. -* @acceptable: A function used to test possible &dentries to see if they are -* acceptable -* @context: A parameter to @acceptable so that it knows on what basis to -* judge. -* -* find_exported_dentry is the central helper routine to enable file systems -* to provide the decode_fh() export_operation. It's main task is to take -* an &inode, find or create an appropriate &dentry structure, and possibly -* splice this into the dcache in the correct place. -* -* The decode_fh() operation provided by the filesystem should call -* find_exported_dentry() with the same parameters that it received except -* that instead of the file handle fragment, pointers to opaque identifiers -* for the object and optionally its parent are passed. The default decode_fh -* routine passes one pointer to the start of the filehandle fragment, and -* one 8 bytes into the fragment. It is expected that most filesystems will -* take this approach, though the offset to the parent identifier may well be -* different. -* -* find_exported_dentry() will call get_dentry to get an dentry pointer from -* the file system. If any &dentry in the d_alias list is acceptable, it will -* be returned. Otherwise find_exported_dentry() will attempt to splice a new -* &dentry into the dcache using get_name() and get_parent() to find the -* appropriate place. -*/ - -struct dentry * -find_exported_dentry (struct super_block *sb,void *obj,void *parent, -int (*acceptable)(void *context,struct dentry *de), -void *context) -{ -struct dentry *result, *alias; -int err = -ESTALE ; - -/* -* Attempt to find the inode. -*/ - result =exportfs_get_dentry (sb, obj); -if (IS_ERR (result)) -return result; - -if (S_ISDIR (result->d_inode->i_mode)) { -if (!(result->d_flags &DCACHE_DISCONNECTED )) { -if (acceptable (context, result)) -return result; - err = -EACCES ; - goto err_result; - } - - err =reconnect_path (sb, result); -if (err) - goto err_result; - }else { -struct dentry *target_dir, *nresult; -char nbuf[NAME_MAX +1 ]; - - alias =find_acceptable_alias (result, acceptable, context); -if (alias) -return alias; - -if (parent ==NULL ) - goto err_result; - - target_dir =exportfs_get_dentry (sb,parent); -if (IS_ERR (target_dir)) { - err =PTR_ERR (target_dir); - goto err_result; - } - - err =reconnect_path (sb, target_dir); -if (err) { -dput (target_dir); - goto err_result; - } - -/* -* As we weren't after a directory, have one more step to go. -*/ - err =exportfs_get_name (target_dir, nbuf, result); -if (!err) { -mutex_lock (&target_dir->d_inode->i_mutex); - nresult =lookup_one_len (nbuf, target_dir, -strlen (nbuf)); -mutex_unlock (&target_dir->d_inode->i_mutex); -if (!IS_ERR (nresult)) { -if (nresult->d_inode) { -dput (result); - result = nresult; - }else -dput (nresult); - } - } -dput (target_dir); - } - - alias =find_acceptable_alias (result, acceptable, context); -if (alias) -return alias; - -/* drat - I just cannot find anything acceptable */ -dput (result); -/* It might be justifiable to return ESTALE here, -* but the filehandle at-least looks reasonable good -* and it may just be a permission problem, so returning -* -EACCESS is safer -*/ -return ERR_PTR (-EACCES ); - - err_result: -dput (result); -return ERR_PTR (err); -} -struct getdents_callback {char *name;/* name that was found. It already points to a buffer NAME_MAX+1 is size */
@@ -462,38 +330,6 @@ static int export_encode_fh(struct dentrreturn type; } - -/** -* export_decode_fh - default export_operations->decode_fh function -* @sb: The superblock -* @fh: pointer to the file handle fragment -* @fh_len: length of file handle fragment -* @acceptable: function for testing acceptability of dentrys -* @context: context for @acceptable -* -* This is the default decode_fh() function. -* a fileid_type of 1 indicates that the filehandlefragment -* just contains an object identifier understood by get_dentry. -* a fileid_type of 2 says that there is also a directory -* identifier 8 bytes in to the filehandlefragement. -*/ -static struct dentry *export_decode_fh (struct super_block *sb,__u32 *fh,int fh_len, -int fileid_type, -int (*acceptable)(void *context,struct dentry *de), -void *context) -{ -__u32 parent[2 ]; - parent[0 ] = parent[1 ] =0 ; -if (fh_len <2 || fileid_type >2 ) -return NULL ; -if (fileid_type ==2 ) { -if (fh_len >2 ) parent[0 ] = fh[2 ]; -if (fh_len >3 ) parent[1 ] = fh[3 ]; - } -return find_exported_dentry (sb, fh, parent, - acceptable, context); -} -int exportfs_encode_fh (struct dentry *dentry,struct fid *fid,int *max_len,int connectable) {
@@ -518,19 +354,6 @@ struct dentry *exportfs_decode_fh(structint err;/* -* Old way of doing things. Will go away soon. -*/ -if (!nop->fh_to_dentry) { -if (nop->decode_fh) { -return nop->decode_fh (mnt->mnt_sb, fid->raw, fh_len, - fileid_type, acceptable, context); - }else { -return export_decode_fh (mnt->mnt_sb, fid->raw, fh_len, - fileid_type, acceptable, context); - } - } - -/* * Try to get any dentry for the given file handle from the filesystem. */ result = nop->fh_to_dentry (mnt->mnt_sb, fid, fh_len, fileid_type);
@@ -652,6 +475,4 @@ struct dentry *exportfs_decode_fh(struct }EXPORT_SYMBOL_GPL (exportfs_decode_fh); -EXPORT_SYMBOL (find_exported_dentry); -MODULE_LICENSE ("GPL" );
fs/nfsd/export.c renamed from fs/nfsd/export.c~exportfs-remove-old-methods +3 -5
@@ -386,15 +386,13 @@ static int check_export(struct inode *indprintk ("exp_export: export of non-dev fs without fsid\n" );return -EINVAL ; } -if (!inode->i_sb->s_export_op) { + +if (!inode->i_sb->s_export_op || + !inode->i_sb->s_export_op->fh_to_dentry) {dprintk ("exp_export: export of invalid fs type.\n" );return -EINVAL ; } -/* Ok, we can export it */ ; -if (!inode->i_sb->s_export_op->find_exported_dentry) - inode->i_sb->s_export_op->find_exported_dentry = - find_exported_dentry;return 0 ; }
include/linux/exportfs.h renamed from include/linux/exportfs.h~exportfs-remove-old-methods +0 -41
73 lines not on this page · raw message
_