aboutsummaryrefslogtreecommitdiffstats
path: root/fs/lockd/clntlock.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/lockd/clntlock.c')
-rw-r--r--fs/lockd/clntlock.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/fs/lockd/clntlock.c b/fs/lockd/clntlock.c
index d070b18e539d..0b45fd3a4bfd 100644
--- a/fs/lockd/clntlock.c
+++ b/fs/lockd/clntlock.c
@@ -41,6 +41,48 @@ struct nlm_wait {
41 41
42static LIST_HEAD(nlm_blocked); 42static LIST_HEAD(nlm_blocked);
43 43
44/**
45 * nlmclnt_init - Set up per-NFS mount point lockd data structures
46 * @nlm_init: pointer to arguments structure
47 *
48 * Returns pointer to an appropriate nlm_host struct,
49 * or an ERR_PTR value.
50 */
51struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init)
52{
53 struct nlm_host *host;
54 u32 nlm_version = (nlm_init->nfs_version == 2) ? 1 : 4;
55 int status;
56
57 status = lockd_up(nlm_init->protocol);
58 if (status < 0)
59 return ERR_PTR(status);
60
61 host = nlmclnt_lookup_host((struct sockaddr_in *)nlm_init->address,
62 nlm_init->protocol, nlm_version,
63 nlm_init->hostname,
64 strlen(nlm_init->hostname));
65 if (host == NULL) {
66 lockd_down();
67 return ERR_PTR(-ENOLCK);
68 }
69
70 return host;
71}
72EXPORT_SYMBOL_GPL(nlmclnt_init);
73
74/**
75 * nlmclnt_done - Release resources allocated by nlmclnt_init()
76 * @host: nlm_host structure reserved by nlmclnt_init()
77 *
78 */
79void nlmclnt_done(struct nlm_host *host)
80{
81 nlm_release_host(host);
82 lockd_down();
83}
84EXPORT_SYMBOL_GPL(nlmclnt_done);
85
44/* 86/*
45 * Queue up a lock for blocking so that the GRANTED request can see it 87 * Queue up a lock for blocking so that the GRANTED request can see it
46 */ 88 */