提交 6a74490d 编写于 作者: B Bryan Schumaker 提交者: Trond Myklebust

NFS: Pass super operations and xattr handlers in the nfs_subversion

I can set all variables in the nfs_fill_super() function, allowing me to
remove the nfs4_fill_super() function.
Signed-off-by: NBryan Schumaker <bjschuma@netapp.com>
Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
上级 1179acc6
...@@ -327,6 +327,7 @@ void nfs_zap_acl_cache(struct inode *inode); ...@@ -327,6 +327,7 @@ void nfs_zap_acl_cache(struct inode *inode);
extern int nfs_wait_bit_killable(void *word); extern int nfs_wait_bit_killable(void *word);
/* super.c */ /* super.c */
extern const struct super_operations nfs_sops;
extern struct file_system_type nfs_fs_type; extern struct file_system_type nfs_fs_type;
extern struct file_system_type nfs_xdev_fs_type; extern struct file_system_type nfs_xdev_fs_type;
#ifdef CONFIG_NFS_V4 #ifdef CONFIG_NFS_V4
......
...@@ -16,6 +16,8 @@ struct nfs_subversion { ...@@ -16,6 +16,8 @@ struct nfs_subversion {
struct file_system_type *nfs_fs; /* NFS filesystem type */ struct file_system_type *nfs_fs; /* NFS filesystem type */
const struct rpc_version *rpc_vers; /* NFS version information */ const struct rpc_version *rpc_vers; /* NFS version information */
const struct nfs_rpc_ops *rpc_ops; /* NFS operations */ const struct nfs_rpc_ops *rpc_ops; /* NFS operations */
const struct super_operations *sops; /* NFS Super operations */
const struct xattr_handler **xattr; /* NFS xattr handlers */
struct list_head list; /* List of NFS versions */ struct list_head list; /* List of NFS versions */
}; };
......
...@@ -11,6 +11,7 @@ static struct nfs_subversion nfs_v2 = { ...@@ -11,6 +11,7 @@ static struct nfs_subversion nfs_v2 = {
.nfs_fs = &nfs_fs_type, .nfs_fs = &nfs_fs_type,
.rpc_vers = &nfs_version2, .rpc_vers = &nfs_version2,
.rpc_ops = &nfs_v2_clientops, .rpc_ops = &nfs_v2_clientops,
.sops = &nfs_sops,
}; };
int __init init_nfs_v2(void) int __init init_nfs_v2(void)
......
...@@ -11,6 +11,7 @@ static struct nfs_subversion nfs_v3 = { ...@@ -11,6 +11,7 @@ static struct nfs_subversion nfs_v3 = {
.nfs_fs = &nfs_fs_type, .nfs_fs = &nfs_fs_type,
.rpc_vers = &nfs_version3, .rpc_vers = &nfs_version3,
.rpc_ops = &nfs_v3_clientops, .rpc_ops = &nfs_v3_clientops,
.sops = &nfs_sops,
}; };
int __init init_nfs_v3(void) int __init init_nfs_v3(void)
......
...@@ -71,25 +71,10 @@ struct nfs_subversion nfs_v4 = { ...@@ -71,25 +71,10 @@ struct nfs_subversion nfs_v4 = {
.nfs_fs = &nfs4_fs_type, .nfs_fs = &nfs4_fs_type,
.rpc_vers = &nfs_version4, .rpc_vers = &nfs_version4,
.rpc_ops = &nfs_v4_clientops, .rpc_ops = &nfs_v4_clientops,
.sops = &nfs4_sops,
.xattr = nfs4_xattr_handlers,
}; };
/*
* Set up an NFS4 superblock
*/
static void nfs4_fill_super(struct super_block *sb,
struct nfs_mount_info *mount_info)
{
sb->s_time_gran = 1;
sb->s_op = &nfs4_sops;
/*
* The VFS shouldn't apply the umask to mode bits. We will do
* so ourselves when necessary.
*/
sb->s_flags |= MS_POSIXACL;
sb->s_xattr = nfs4_xattr_handlers;
nfs_initialise_sb(sb);
}
/* /*
* Get the superblock for the NFS4 root partition * Get the superblock for the NFS4 root partition
*/ */
...@@ -101,7 +86,6 @@ nfs4_remote_mount(struct file_system_type *fs_type, int flags, ...@@ -101,7 +86,6 @@ nfs4_remote_mount(struct file_system_type *fs_type, int flags,
struct nfs_server *server; struct nfs_server *server;
struct dentry *mntroot = ERR_PTR(-ENOMEM); struct dentry *mntroot = ERR_PTR(-ENOMEM);
mount_info->fill_super = nfs4_fill_super;
mount_info->set_security = nfs_set_sb_security; mount_info->set_security = nfs_set_sb_security;
/* Get a volume representation */ /* Get a volume representation */
...@@ -236,8 +220,6 @@ struct dentry *nfs4_try_mount(int flags, const char *dev_name, ...@@ -236,8 +220,6 @@ struct dentry *nfs4_try_mount(int flags, const char *dev_name,
dfprintk(MOUNT, "--> nfs4_try_mount()\n"); dfprintk(MOUNT, "--> nfs4_try_mount()\n");
mount_info->fill_super = nfs4_fill_super;
export_path = data->nfs_server.export_path; export_path = data->nfs_server.export_path;
data->nfs_server.export_path = "/"; data->nfs_server.export_path = "/";
root_mnt = nfs_do_root_mount(&nfs4_remote_fs_type, flags, mount_info, root_mnt = nfs_do_root_mount(&nfs4_remote_fs_type, flags, mount_info,
...@@ -257,7 +239,7 @@ nfs4_remote_referral_mount(struct file_system_type *fs_type, int flags, ...@@ -257,7 +239,7 @@ nfs4_remote_referral_mount(struct file_system_type *fs_type, int flags,
const char *dev_name, void *raw_data) const char *dev_name, void *raw_data)
{ {
struct nfs_mount_info mount_info = { struct nfs_mount_info mount_info = {
.fill_super = nfs4_fill_super, .fill_super = nfs_fill_super,
.set_security = nfs_clone_sb_security, .set_security = nfs_clone_sb_security,
.cloned = raw_data, .cloned = raw_data,
}; };
......
...@@ -298,7 +298,7 @@ struct file_system_type nfs_xdev_fs_type = { ...@@ -298,7 +298,7 @@ struct file_system_type nfs_xdev_fs_type = {
.fs_flags = FS_RENAME_DOES_D_MOVE|FS_REVAL_DOT|FS_BINARY_MOUNTDATA, .fs_flags = FS_RENAME_DOES_D_MOVE|FS_REVAL_DOT|FS_BINARY_MOUNTDATA,
}; };
static const struct super_operations nfs_sops = { const struct super_operations nfs_sops = {
.alloc_inode = nfs_alloc_inode, .alloc_inode = nfs_alloc_inode,
.destroy_inode = nfs_destroy_inode, .destroy_inode = nfs_destroy_inode,
.write_inode = nfs_write_inode, .write_inode = nfs_write_inode,
...@@ -2105,10 +2105,12 @@ void nfs_fill_super(struct super_block *sb, struct nfs_mount_info *mount_info) ...@@ -2105,10 +2105,12 @@ void nfs_fill_super(struct super_block *sb, struct nfs_mount_info *mount_info)
sb->s_blocksize_bits = 0; sb->s_blocksize_bits = 0;
sb->s_blocksize = 0; sb->s_blocksize = 0;
if (data->bsize) sb->s_xattr = server->nfs_client->cl_nfs_mod->xattr;
sb->s_op = server->nfs_client->cl_nfs_mod->sops;
if (data && data->bsize)
sb->s_blocksize = nfs_block_size(data->bsize, &sb->s_blocksize_bits); sb->s_blocksize = nfs_block_size(data->bsize, &sb->s_blocksize_bits);
if (server->nfs_client->rpc_ops->version == 3) { if (server->nfs_client->rpc_ops->version != 2) {
/* The VFS shouldn't apply the umask to mode bits. We will do /* The VFS shouldn't apply the umask to mode bits. We will do
* so ourselves when necessary. * so ourselves when necessary.
*/ */
...@@ -2116,7 +2118,6 @@ void nfs_fill_super(struct super_block *sb, struct nfs_mount_info *mount_info) ...@@ -2116,7 +2118,6 @@ void nfs_fill_super(struct super_block *sb, struct nfs_mount_info *mount_info)
sb->s_time_gran = 1; sb->s_time_gran = 1;
} }
sb->s_op = &nfs_sops;
nfs_initialise_sb(sb); nfs_initialise_sb(sb);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册