提交 883bb163 编写于 作者: C Chuck Lever 提交者: Trond Myklebust

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: NChuck Lever <chuck.lever@oracle.com>
上级 1093a60e
...@@ -43,31 +43,25 @@ static LIST_HEAD(nlm_blocked); ...@@ -43,31 +43,25 @@ static LIST_HEAD(nlm_blocked);
/** /**
* nlmclnt_init - Set up per-NFS mount point lockd data structures * nlmclnt_init - Set up per-NFS mount point lockd data structures
* @server_name: server's hostname * @nlm_init: pointer to arguments structure
* @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
* *
* Returns pointer to an appropriate nlm_host struct, * Returns pointer to an appropriate nlm_host struct,
* or an ERR_PTR value. * or an ERR_PTR value.
*/ */
struct nlm_host *nlmclnt_init(const char *server_name, struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init)
const struct sockaddr *server_address,
size_t server_addrlen,
unsigned short protocol, u32 nfs_version)
{ {
struct nlm_host *host; struct nlm_host *host;
u32 nlm_version = (nfs_version == 2) ? 1 : 4; u32 nlm_version = (nlm_init->nfs_version == 2) ? 1 : 4;
int status; int status;
status = lockd_up(protocol); status = lockd_up(nlm_init->protocol);
if (status < 0) if (status < 0)
return ERR_PTR(status); return ERR_PTR(status);
host = nlmclnt_lookup_host((struct sockaddr_in *)server_address, host = nlmclnt_lookup_host((struct sockaddr_in *)nlm_init->address,
protocol, nlm_version, nlm_init->protocol, nlm_version,
server_name, strlen(server_name)); nlm_init->hostname,
strlen(nlm_init->hostname));
if (host == NULL) { if (host == NULL) {
lockd_down(); lockd_down();
return ERR_PTR(-ENOLCK); return ERR_PTR(-ENOLCK);
......
...@@ -468,18 +468,21 @@ static int nfs_start_lockd(struct nfs_server *server) ...@@ -468,18 +468,21 @@ static int nfs_start_lockd(struct nfs_server *server)
{ {
struct nlm_host *host; struct nlm_host *host;
struct nfs_client *clp = server->nfs_client; struct nfs_client *clp = server->nfs_client;
u32 nfs_version = clp->rpc_ops->version; struct nlmclnt_initdata nlm_init = {
unsigned short protocol = server->flags & NFS_MOUNT_TCP ? .hostname = clp->cl_hostname,
IPPROTO_TCP : IPPROTO_UDP; .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; return 0;
if (server->flags & NFS_MOUNT_NONLM) if (server->flags & NFS_MOUNT_NONLM)
return 0; return 0;
host = nlmclnt_init(clp->cl_hostname, host = nlmclnt_init(&nlm_init);
(struct sockaddr *)&clp->cl_addr,
clp->cl_addrlen, protocol, nfs_version);
if (IS_ERR(host)) if (IS_ERR(host))
return PTR_ERR(host); return PTR_ERR(host);
......
...@@ -32,14 +32,23 @@ struct nlmsvc_binding { ...@@ -32,14 +32,23 @@ struct nlmsvc_binding {
extern struct nlmsvc_binding * nlmsvc_ops; 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 * Functions exported by the lockd module
*/ */
extern struct nlm_host *nlmclnt_init(const char *server_name,
const struct sockaddr *server_address, extern struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init);
size_t server_addrlen,
unsigned short protocol,
u32 nfs_version);
extern void nlmclnt_done(struct nlm_host *host); extern void nlmclnt_done(struct nlm_host *host);
extern int nlmclnt_proc(struct nlm_host *host, int cmd, extern int nlmclnt_proc(struct nlm_host *host, int cmd,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册