extern int nfs_wait_bit_killable(void *word);
 
 /* super.c */
+extern const struct super_operations nfs_sops;
 extern struct file_system_type nfs_fs_type;
 extern struct file_system_type nfs_xdev_fs_type;
 #ifdef CONFIG_NFS_V4
 
        struct file_system_type *nfs_fs;        /* NFS filesystem type */
        const struct rpc_version *rpc_vers;     /* NFS version information */
        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 */
 };
 
 
        .nfs_fs   = &nfs_fs_type,
        .rpc_vers = &nfs_version2,
        .rpc_ops  = &nfs_v2_clientops,
+       .sops     = &nfs_sops,
 };
 
 int __init init_nfs_v2(void)
 
        .nfs_fs   = &nfs_fs_type,
        .rpc_vers = &nfs_version3,
        .rpc_ops  = &nfs_v3_clientops,
+       .sops     = &nfs_sops,
 };
 
 int __init init_nfs_v3(void)
 
        .nfs_fs   = &nfs4_fs_type,
        .rpc_vers = &nfs_version4,
        .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
  */
        struct nfs_server *server;
        struct dentry *mntroot = ERR_PTR(-ENOMEM);
 
-       mount_info->fill_super = nfs4_fill_super;
        mount_info->set_security = nfs_set_sb_security;
 
        /* Get a volume representation */
 
        dfprintk(MOUNT, "--> nfs4_try_mount()\n");
 
-       mount_info->fill_super = nfs4_fill_super;
-
        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,
                           const char *dev_name, void *raw_data)
 {
        struct nfs_mount_info mount_info = {
-               .fill_super = nfs4_fill_super,
+               .fill_super = nfs_fill_super,
                .set_security = nfs_clone_sb_security,
                .cloned = raw_data,
        };
 
        .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,
        .destroy_inode  = nfs_destroy_inode,
        .write_inode    = nfs_write_inode,
 
        sb->s_blocksize_bits = 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);
 
-       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
                 * so ourselves when necessary.
                 */
                sb->s_time_gran = 1;
        }
 
-       sb->s_op = &nfs_sops;
        nfs_initialise_sb(sb);
 }