Re: nfs4 mounts failing with 3.6.0-rc1

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2012-08-08 at 10:42 -0400, Bryan Schumaker wrote:
> So you're suggesting something like this?  I can split it into two patches for the final submission, one to rename the modules and one to move the nfs4_fs_type back to nfs.ko.

One patch should suffice, since you can't split this up into something
that fixes both issues.

Then maybe we can add a separate patch with a MODULE_ALIAS("nfs4") so
that distros can start removing the /etc/modprobe.conf alias entries.

> diff --git a/fs/nfs/Makefile b/fs/nfs/Makefile
> index 8bf3a3f..b7db608 100644
> --- a/fs/nfs/Makefile
> +++ b/fs/nfs/Makefile
> @@ -12,19 +12,19 @@ nfs-$(CONFIG_ROOT_NFS)	+= nfsroot.o
>  nfs-$(CONFIG_SYSCTL)	+= sysctl.o
>  nfs-$(CONFIG_NFS_FSCACHE) += fscache.o fscache-index.o
>  
> -obj-$(CONFIG_NFS_V2) += nfs2.o
> -nfs2-y := nfs2super.o proc.o nfs2xdr.o
> +obj-$(CONFIG_NFS_V2) += nfsv2.o
> +nfsv2-y := nfs2super.o proc.o nfs2xdr.o
>  
> -obj-$(CONFIG_NFS_V3) += nfs3.o
> -nfs3-y := nfs3super.o nfs3client.o nfs3proc.o nfs3xdr.o
> -nfs3-$(CONFIG_NFS_V3_ACL) += nfs3acl.o
> +obj-$(CONFIG_NFS_V3) += nfsv3.o
> +nfsv3-y := nfs3super.o nfs3client.o nfs3proc.o nfs3xdr.o
> +nfsv3-$(CONFIG_NFS_V3_ACL) += nfs3acl.o
>  
> -obj-$(CONFIG_NFS_V4) += nfs4.o
> -nfs4-y := nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o nfs4super.o nfs4file.o \
> +obj-$(CONFIG_NFS_V4) += nfsv4.o
> +nfsv4-y := nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o nfs4super.o nfs4file.o \
>  	  delegation.o idmap.o callback.o callback_xdr.o callback_proc.o \
>  	  nfs4namespace.o nfs4getroot.o nfs4client.o
> -nfs4-$(CONFIG_SYSCTL)	+= nfs4sysctl.o
> -nfs4-$(CONFIG_NFS_V4_1)	+= pnfs.o pnfs_dev.o
> +nfsv4-$(CONFIG_SYSCTL)	+= nfs4sysctl.o
> +nfsv4-$(CONFIG_NFS_V4_1)	+= pnfs.o pnfs_dev.o
>  
>  obj-$(CONFIG_PNFS_FILE_LAYOUT) += nfs_layout_nfsv41_files.o
>  nfs_layout_nfsv41_files-y := nfs4filelayout.o nfs4filelayoutdev.o
> diff --git a/fs/nfs/client.c b/fs/nfs/client.c
> index 9fc0d9d..9969444 100644
> --- a/fs/nfs/client.c
> +++ b/fs/nfs/client.c
> @@ -105,7 +105,7 @@ struct nfs_subversion *get_nfs_version(unsigned int version)
>  
>  	if (IS_ERR(nfs)) {
>  		mutex_lock(&nfs_version_mutex);
> -		request_module("nfs%d", version);
> +		request_module("nfsv%d", version);
>  		nfs = find_nfs_version(version);
>  		mutex_unlock(&nfs_version_mutex);
>  	}
> diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h
> index 19c1a56..43f4971 100644
> --- a/fs/nfs/nfs4_fs.h
> +++ b/fs/nfs/nfs4_fs.h
> @@ -205,6 +205,9 @@ extern const struct dentry_operations nfs4_dentry_operations;
>  int nfs_atomic_open(struct inode *, struct dentry *, struct file *,
>  
> +/* super.c */
> +extern struct file_system_type nfs4_fs_type;
> +
>  /* nfs4namespace.c */
>  rpc_authflavor_t nfs_find_best_sec(struct nfs4_secinfo_flavors *);
>  struct rpc_clnt *nfs4_create_sec_client(struct rpc_clnt *, struct inode *, struct qstr *);
> diff --git a/fs/nfs/nfs4super.c b/fs/nfs/nfs4super.c
> index 12a31a9..bd61221 100644
> --- a/fs/nfs/nfs4super.c
> +++ b/fs/nfs/nfs4super.c
> @@ -23,14 +23,6 @@ static struct dentry *nfs4_referral_mount(struct file_system_type *fs_type,
>  static struct dentry *nfs4_remote_referral_mount(struct file_system_type *fs_type,
>  	int flags, const char *dev_name, void *raw_data);
>  
> -static struct file_system_type nfs4_fs_type = {
> -	.owner		= THIS_MODULE,
> -	.name		= "nfs4",
> -	.mount		= nfs_fs_mount,
> -	.kill_sb	= nfs_kill_super,
> -	.fs_flags	= FS_RENAME_DOES_D_MOVE|FS_REVAL_DOT|FS_BINARY_MOUNTDATA,
> -};
> -
>  static struct file_system_type nfs4_remote_fs_type = {
>  	.owner		= THIS_MODULE,
>  	.name		= "nfs4",
> @@ -344,14 +336,8 @@ static int __init init_nfs_v4(void)
>  	if (err)
>  		goto out1;
>  
> -	err = register_filesystem(&nfs4_fs_type);
> -	if (err < 0)
> -		goto out2;
> -
>  	register_nfs_version(&nfs_v4);
>  	return 0;
> -out2:
> -	nfs4_unregister_sysctl();
>  out1:
>  	nfs_idmap_quit();
>  out:
> @@ -361,7 +347,6 @@ out:
>  static void __exit exit_nfs_v4(void)
>  {
>  	unregister_nfs_version(&nfs_v4);
> -	unregister_filesystem(&nfs4_fs_type);
>  	nfs4_unregister_sysctl();
>  	nfs_idmap_quit();
>  }
> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> index ac6a3c5..49b2dfa 100644
> --- a/fs/nfs/super.c
> +++ b/fs/nfs/super.c
> @@ -319,6 +319,15 @@ EXPORT_SYMBOL_GPL(nfs_sops);
>  static void nfs4_validate_mount_flags(struct nfs_parsed_mount_data *);
>  static int nfs4_validate_mount_data(void *options,
>  	struct nfs_parsed_mount_data *args, const char *dev_name);
> +
> +struct file_system_type nfs4_fs_type = {
> +	.owner		= THIS_MODULE,
> +	.name		= "nfs4",
> +	.mount		= nfs_fs_mount,
> +	.kill_sb	= nfs_kill_super,
> +	.fs_flags	= FS_RENAME_DOES_D_MOVE|FS_REVAL_DOT|FS_BINARY_MOUNTDATA,
> +};
> +EXPORT_SYMBOL_GPL(nfs4_fs_type);
>  #endif
>  
>  static struct shrinker acl_shrinker = {
> @@ -326,6 +335,27 @@ static struct shrinker acl_shrinker = {
>  	.seeks		= DEFAULT_SEEKS,
>  };
>  
> +#if IS_ENABLED(CONFIG_NFS_V4)
> +static int __init register_nfs4_fs(void)
> +{
> +	return register_filesystem(&nfs4_fs_type);
> +}
> +
> +static void unregister_nfs4_fs(void)
> +{
> +	unregister_filesystem(&nfs4_fs_type);
> +}
> +#else
> +static int __init register_nfs4_fs(void)
> +{
> +	return 0;
> +}
> +
> +static void unregister_nfs4_fs(void)
> +{
> +}
> +#endif /* CONFIG_NFS_V4 */

Why not put these helpers in the same section as the declaration of
nfs4_fs_type?

> +
>  /*
>   * Register the NFS filesystems
>   */
> @@ -337,12 +367,18 @@ int __init register_nfs_fs(void)
>  	if (ret < 0)
>  		goto error_0;
>  
> -	ret = nfs_register_sysctl();
> +	ret = register_nfs4_fs();
>  	if (ret < 0)
>  		goto error_1;
> +
> +	ret = nfs_register_sysctl();
> +	if (ret < 0)
> +		goto error_2;
>  	register_shrinker(&acl_shrinker);
>  	return 0;
>  
> +error_2:
> +	unregister_nfs4_fs();
>  error_1:
>  	unregister_filesystem(&nfs_fs_type);
>  error_0:
> @@ -356,6 +392,7 @@ void __exit unregister_nfs_fs(void)
>  {
>  	unregister_shrinker(&acl_shrinker);
>  	nfs_unregister_sysctl();
> +	unregister_nfs4_fs();
>  	unregister_filesystem(&nfs_fs_type);
>  }
>  

-- 
Trond Myklebust
Linux NFS client maintainer

NetApp
Trond.Myklebust@xxxxxxxxxx
www.netapp.com

��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux