Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 883bb163 authored by Chuck Lever's avatar Chuck Lever Committed by Trond Myklebust
Browse files

NLM: Introduce an arguments structure for nlmclnt_init()



Clean up: pass 5 arguments to nlmclnt_init() in a structure similar to the
new nfs_client_initdata structure.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 1093a60e
Loading
Loading
Loading
Loading
+8 −14
Original line number Diff line number Diff line
@@ -43,31 +43,25 @@ static LIST_HEAD(nlm_blocked);

/**
 * nlmclnt_init - Set up per-NFS mount point lockd data structures
 * @server_name: server's hostname
 * @server_address: server's network address
 * @server_addrlen: length of server's address
 * @protocol: transport protocol lockd should use
 * @nfs_version: NFS protocol version for this mount point
 * @nlm_init: pointer to arguments structure
 *
 * Returns pointer to an appropriate nlm_host struct,
 * or an ERR_PTR value.
 */
struct nlm_host *nlmclnt_init(const char *server_name,
			      const struct sockaddr *server_address,
			      size_t server_addrlen,
			      unsigned short protocol, u32 nfs_version)
struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init)
{
	struct nlm_host *host;
	u32 nlm_version = (nfs_version == 2) ? 1 : 4;
	u32 nlm_version = (nlm_init->nfs_version == 2) ? 1 : 4;
	int status;

	status = lockd_up(protocol);
	status = lockd_up(nlm_init->protocol);
	if (status < 0)
		return ERR_PTR(status);

	host = nlmclnt_lookup_host((struct sockaddr_in *)server_address,
				   protocol, nlm_version,
				   server_name, strlen(server_name));
	host = nlmclnt_lookup_host((struct sockaddr_in *)nlm_init->address,
				   nlm_init->protocol, nlm_version,
				   nlm_init->hostname,
				   strlen(nlm_init->hostname));
	if (host == NULL) {
		lockd_down();
		return ERR_PTR(-ENOLCK);
+10 −7
Original line number Diff line number Diff line
@@ -468,18 +468,21 @@ static int nfs_start_lockd(struct nfs_server *server)
{
	struct nlm_host *host;
	struct nfs_client *clp = server->nfs_client;
	u32 nfs_version = clp->rpc_ops->version;
	unsigned short protocol = server->flags & NFS_MOUNT_TCP ?
						IPPROTO_TCP : IPPROTO_UDP;
	struct nlmclnt_initdata nlm_init = {
		.hostname	= clp->cl_hostname,
		.address	= (struct sockaddr *)&clp->cl_addr,
		.addrlen	= clp->cl_addrlen,
		.protocol	= server->flags & NFS_MOUNT_TCP ?
						IPPROTO_TCP : IPPROTO_UDP,
		.nfs_version	= clp->rpc_ops->version,
	};

	if (nfs_version > 3)
	if (nlm_init.nfs_version > 3)
		return 0;
	if (server->flags & NFS_MOUNT_NONLM)
		return 0;

	host = nlmclnt_init(clp->cl_hostname,
			    (struct sockaddr *)&clp->cl_addr,
			    clp->cl_addrlen, protocol, nfs_version);
	host = nlmclnt_init(&nlm_init);
	if (IS_ERR(host))
		return PTR_ERR(host);

+14 −5
Original line number Diff line number Diff line
@@ -32,14 +32,23 @@ struct nlmsvc_binding {

extern struct nlmsvc_binding *	nlmsvc_ops;

/*
 * Similar to nfs_client_initdata, but without the NFS-specific
 * rpc_ops field.
 */
struct nlmclnt_initdata {
	const char		*hostname;
	const struct sockaddr	*address;
	size_t			addrlen;
	unsigned short		protocol;
	u32			nfs_version;
};

/*
 * Functions exported by the lockd module
 */
extern struct nlm_host *nlmclnt_init(const char *server_name,
					const struct sockaddr *server_address,
					size_t server_addrlen,
					unsigned short protocol,
					u32 nfs_version);

extern struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init);
extern void	nlmclnt_done(struct nlm_host *host);

extern int	nlmclnt_proc(struct nlm_host *host, int cmd,