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: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
parent
1093a60ef3
commit
883bb163f8
3 changed files with 32 additions and 26 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue