aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/lockd/lockd.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/lockd/lockd.h')
-rw-r--r--include/linux/lockd/lockd.h27
1 files changed, 15 insertions, 12 deletions
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h
index ef21ed29603..995f89dc8c0 100644
--- a/include/linux/lockd/lockd.h
+++ b/include/linux/lockd/lockd.h
@@ -14,6 +14,7 @@
14#include <linux/config.h> 14#include <linux/config.h>
15#include <linux/in.h> 15#include <linux/in.h>
16#include <linux/fs.h> 16#include <linux/fs.h>
17#include <linux/kref.h>
17#include <linux/utsname.h> 18#include <linux/utsname.h>
18#include <linux/nfsd/nfsfh.h> 19#include <linux/nfsd/nfsfh.h>
19#include <linux/lockd/bind.h> 20#include <linux/lockd/bind.h>
@@ -58,6 +59,8 @@ struct nlm_host {
58 unsigned long h_expires; /* eligible for GC */ 59 unsigned long h_expires; /* eligible for GC */
59 struct list_head h_lockowners; /* Lockowners for the client */ 60 struct list_head h_lockowners; /* Lockowners for the client */
60 spinlock_t h_lock; 61 spinlock_t h_lock;
62 struct list_head h_granted; /* Locks in GRANTED state */
63 struct list_head h_reclaim; /* Locks in RECLAIM state */
61}; 64};
62 65
63/* 66/*
@@ -83,9 +86,9 @@ struct nlm_rqst {
83 struct nlm_host * a_host; /* host handle */ 86 struct nlm_host * a_host; /* host handle */
84 struct nlm_args a_args; /* arguments */ 87 struct nlm_args a_args; /* arguments */
85 struct nlm_res a_res; /* result */ 88 struct nlm_res a_res; /* result */
86 struct nlm_wait * a_block; 89 struct nlm_block * a_block;
87 unsigned int a_retries; /* Retry count */ 90 unsigned int a_retries; /* Retry count */
88 char a_owner[NLMCLNT_OHSIZE]; 91 u8 a_owner[NLMCLNT_OHSIZE];
89}; 92};
90 93
91/* 94/*
@@ -110,16 +113,16 @@ struct nlm_file {
110 */ 113 */
111#define NLM_NEVER (~(unsigned long) 0) 114#define NLM_NEVER (~(unsigned long) 0)
112struct nlm_block { 115struct nlm_block {
116 struct kref b_count; /* Reference count */
113 struct nlm_block * b_next; /* linked list (all blocks) */ 117 struct nlm_block * b_next; /* linked list (all blocks) */
114 struct nlm_block * b_fnext; /* linked list (per file) */ 118 struct nlm_block * b_fnext; /* linked list (per file) */
115 struct nlm_rqst b_call; /* RPC args & callback info */ 119 struct nlm_rqst * b_call; /* RPC args & callback info */
116 struct svc_serv * b_daemon; /* NLM service */ 120 struct svc_serv * b_daemon; /* NLM service */
117 struct nlm_host * b_host; /* host handle for RPC clnt */ 121 struct nlm_host * b_host; /* host handle for RPC clnt */
118 unsigned long b_when; /* next re-xmit */ 122 unsigned long b_when; /* next re-xmit */
119 unsigned int b_id; /* block id */ 123 unsigned int b_id; /* block id */
120 unsigned char b_queued; /* re-queued */ 124 unsigned char b_queued; /* re-queued */
121 unsigned char b_granted; /* VFS granted lock */ 125 unsigned char b_granted; /* VFS granted lock */
122 unsigned char b_incall; /* doing callback */
123 unsigned char b_done; /* callback complete */ 126 unsigned char b_done; /* callback complete */
124 struct nlm_file * b_file; /* file in question */ 127 struct nlm_file * b_file; /* file in question */
125}; 128};
@@ -145,15 +148,16 @@ extern unsigned long nlmsvc_timeout;
145/* 148/*
146 * Lockd client functions 149 * Lockd client functions
147 */ 150 */
148struct nlm_rqst * nlmclnt_alloc_call(void); 151struct nlm_rqst * nlm_alloc_call(struct nlm_host *host);
149int nlmclnt_prepare_block(struct nlm_rqst *req, struct nlm_host *host, struct file_lock *fl); 152void nlm_release_call(struct nlm_rqst *);
150void nlmclnt_finish_block(struct nlm_rqst *req); 153int nlm_async_call(struct nlm_rqst *, u32, const struct rpc_call_ops *);
151long nlmclnt_block(struct nlm_rqst *req, long timeout); 154int nlm_async_reply(struct nlm_rqst *, u32, const struct rpc_call_ops *);
155struct nlm_wait * nlmclnt_prepare_block(struct nlm_host *host, struct file_lock *fl);
156void nlmclnt_finish_block(struct nlm_wait *block);
157int nlmclnt_block(struct nlm_wait *block, struct nlm_rqst *req, long timeout);
152u32 nlmclnt_grant(const struct sockaddr_in *addr, const struct nlm_lock *); 158u32 nlmclnt_grant(const struct sockaddr_in *addr, const struct nlm_lock *);
153void nlmclnt_recovery(struct nlm_host *, u32); 159void nlmclnt_recovery(struct nlm_host *, u32);
154int nlmclnt_reclaim(struct nlm_host *, struct file_lock *); 160int nlmclnt_reclaim(struct nlm_host *, struct file_lock *);
155int nlmclnt_setgrantargs(struct nlm_rqst *, struct nlm_lock *);
156void nlmclnt_freegrantargs(struct nlm_rqst *);
157 161
158/* 162/*
159 * Host cache 163 * Host cache
@@ -172,7 +176,6 @@ extern struct nlm_host *nlm_find_client(void);
172/* 176/*
173 * Server-side lock handling 177 * Server-side lock handling
174 */ 178 */
175int nlmsvc_async_call(struct nlm_rqst *, u32, const struct rpc_call_ops *);
176u32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *, 179u32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *,
177 struct nlm_lock *, int, struct nlm_cookie *); 180 struct nlm_lock *, int, struct nlm_cookie *);
178u32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *); 181u32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *);
@@ -180,7 +183,7 @@ u32 nlmsvc_testlock(struct nlm_file *, struct nlm_lock *,
180 struct nlm_lock *); 183 struct nlm_lock *);
181u32 nlmsvc_cancel_blocked(struct nlm_file *, struct nlm_lock *); 184u32 nlmsvc_cancel_blocked(struct nlm_file *, struct nlm_lock *);
182unsigned long nlmsvc_retry_blocked(void); 185unsigned long nlmsvc_retry_blocked(void);
183int nlmsvc_traverse_blocks(struct nlm_host *, struct nlm_file *, 186void nlmsvc_traverse_blocks(struct nlm_host *, struct nlm_file *,
184 int action); 187 int action);
185void nlmsvc_grant_reply(struct svc_rqst *, struct nlm_cookie *, u32); 188void nlmsvc_grant_reply(struct svc_rqst *, struct nlm_cookie *, u32);
186 189