Commit 288d7224 authored by Anna Schumaker's avatar Anna Schumaker Committed by Trond Myklebust
Browse files

NFS: Implement get_nfs_version()



This is a pair for put_nfs_version(), and is used for incrementing the
reference count on the nfs version module. I also updated the callers I
could find who had this hardcoded up until now.

Signed-off-by: default avatarAnna Schumaker <anna.schumaker@oracle.com>
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent 3c91e4b7
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -100,12 +100,18 @@ struct nfs_subversion *find_nfs_version(unsigned int version)
	if (!nfs)
		return ERR_PTR(-EPROTONOSUPPORT);

	if (!try_module_get(nfs->owner))
	if (!get_nfs_version(nfs))
		return ERR_PTR(-EAGAIN);

	return nfs;
}

int get_nfs_version(struct nfs_subversion *nfs)
{
	return try_module_get(nfs->owner);
}
EXPORT_SYMBOL_GPL(get_nfs_version);

void put_nfs_version(struct nfs_subversion *nfs)
{
	module_put(nfs->owner);
@@ -149,7 +155,7 @@ struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init)

	clp->cl_minorversion = cl_init->minorversion;
	clp->cl_nfs_mod = cl_init->nfs_mod;
	if (!try_module_get(clp->cl_nfs_mod->owner))
	if (!get_nfs_version(clp->cl_nfs_mod))
		goto error_dealloc;

	clp->rpc_ops = clp->cl_nfs_mod->rpc_ops;
+2 −2
Original line number Diff line number Diff line
@@ -1541,7 +1541,7 @@ static int nfs_fs_context_dup(struct fs_context *fc, struct fs_context *src_fc)
	}
	nfs_copy_fh(ctx->mntfh, src->mntfh);

	__module_get(ctx->nfs_mod->owner);
	get_nfs_version(ctx->nfs_mod);
	ctx->client_address		= NULL;
	ctx->mount_server.hostname	= NULL;
	ctx->nfs_server.export_path	= NULL;
@@ -1633,7 +1633,7 @@ static int nfs_init_fs_context(struct fs_context *fc)
		}

		ctx->nfs_mod = nfss->nfs_client->cl_nfs_mod;
		__module_get(ctx->nfs_mod->owner);
		get_nfs_version(ctx->nfs_mod);
	} else {
		/* defaults */
		ctx->timeo		= NFS_UNSPEC_TIMEO;
+1 −1
Original line number Diff line number Diff line
@@ -182,7 +182,7 @@ struct vfsmount *nfs_d_automount(struct path *path)
	ctx->version		= client->rpc_ops->version;
	ctx->minorversion	= client->cl_minorversion;
	ctx->nfs_mod		= client->cl_nfs_mod;
	__module_get(ctx->nfs_mod->owner);
	get_nfs_version(ctx->nfs_mod);

	ret = client->rpc_ops->submount(fc, server);
	if (ret < 0) {
+1 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ struct nfs_subversion {
};

struct nfs_subversion *find_nfs_version(unsigned int);
int get_nfs_version(struct nfs_subversion *);
void put_nfs_version(struct nfs_subversion *);
void register_nfs_version(struct nfs_subversion *);
void unregister_nfs_version(struct nfs_subversion *);