diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/lockd/svc4proc.c | 12 | ||||
-rw-r--r-- | fs/lockd/svcproc.c | 16 | ||||
-rw-r--r-- | fs/lockd/svcsubs.c | 6 | ||||
-rw-r--r-- | fs/nfsd/lockd.c | 14 |
4 files changed, 23 insertions, 25 deletions
diff --git a/fs/lockd/svc4proc.c b/fs/lockd/svc4proc.c index fa370f6eb07b..399ad11b97be 100644 --- a/fs/lockd/svc4proc.c +++ b/fs/lockd/svc4proc.c | |||
@@ -96,7 +96,7 @@ nlm4svc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
96 | 96 | ||
97 | /* Obtain client and file */ | 97 | /* Obtain client and file */ |
98 | if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file))) | 98 | if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file))) |
99 | return rpc_success; | 99 | return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success; |
100 | 100 | ||
101 | /* Now check for conflicting locks */ | 101 | /* Now check for conflicting locks */ |
102 | resp->status = nlmsvc_testlock(file, &argp->lock, &resp->lock); | 102 | resp->status = nlmsvc_testlock(file, &argp->lock, &resp->lock); |
@@ -126,7 +126,7 @@ nlm4svc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
126 | 126 | ||
127 | /* Obtain client and file */ | 127 | /* Obtain client and file */ |
128 | if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file))) | 128 | if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file))) |
129 | return rpc_success; | 129 | return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success; |
130 | 130 | ||
131 | #if 0 | 131 | #if 0 |
132 | /* If supplied state doesn't match current state, we assume it's | 132 | /* If supplied state doesn't match current state, we assume it's |
@@ -169,7 +169,7 @@ nlm4svc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
169 | 169 | ||
170 | /* Obtain client and file */ | 170 | /* Obtain client and file */ |
171 | if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file))) | 171 | if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file))) |
172 | return rpc_success; | 172 | return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success; |
173 | 173 | ||
174 | /* Try to cancel request. */ | 174 | /* Try to cancel request. */ |
175 | resp->status = nlmsvc_cancel_blocked(file, &argp->lock); | 175 | resp->status = nlmsvc_cancel_blocked(file, &argp->lock); |
@@ -202,7 +202,7 @@ nlm4svc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
202 | 202 | ||
203 | /* Obtain client and file */ | 203 | /* Obtain client and file */ |
204 | if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file))) | 204 | if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file))) |
205 | return rpc_success; | 205 | return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success; |
206 | 206 | ||
207 | /* Now try to remove the lock */ | 207 | /* Now try to remove the lock */ |
208 | resp->status = nlmsvc_unlock(file, &argp->lock); | 208 | resp->status = nlmsvc_unlock(file, &argp->lock); |
@@ -339,7 +339,7 @@ nlm4svc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
339 | 339 | ||
340 | /* Obtain client and file */ | 340 | /* Obtain client and file */ |
341 | if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file))) | 341 | if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file))) |
342 | return rpc_success; | 342 | return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success; |
343 | 343 | ||
344 | /* Now try to create the share */ | 344 | /* Now try to create the share */ |
345 | resp->status = nlmsvc_share_file(host, file, argp); | 345 | resp->status = nlmsvc_share_file(host, file, argp); |
@@ -372,7 +372,7 @@ nlm4svc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
372 | 372 | ||
373 | /* Obtain client and file */ | 373 | /* Obtain client and file */ |
374 | if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file))) | 374 | if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file))) |
375 | return rpc_success; | 375 | return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success; |
376 | 376 | ||
377 | /* Now try to lock the file */ | 377 | /* Now try to lock the file */ |
378 | resp->status = nlmsvc_unshare_file(host, file, argp); | 378 | resp->status = nlmsvc_unshare_file(host, file, argp); |
diff --git a/fs/lockd/svcproc.c b/fs/lockd/svcproc.c index 75b2c81bcb93..6a931f4ab75c 100644 --- a/fs/lockd/svcproc.c +++ b/fs/lockd/svcproc.c | |||
@@ -59,7 +59,7 @@ nlmsvc_retrieve_args(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
59 | struct nlm_host *host = NULL; | 59 | struct nlm_host *host = NULL; |
60 | struct nlm_file *file = NULL; | 60 | struct nlm_file *file = NULL; |
61 | struct nlm_lock *lock = &argp->lock; | 61 | struct nlm_lock *lock = &argp->lock; |
62 | u32 error; | 62 | u32 error = 0; |
63 | 63 | ||
64 | /* nfsd callbacks must have been installed for this procedure */ | 64 | /* nfsd callbacks must have been installed for this procedure */ |
65 | if (!nlmsvc_ops) | 65 | if (!nlmsvc_ops) |
@@ -88,6 +88,8 @@ nlmsvc_retrieve_args(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
88 | no_locks: | 88 | no_locks: |
89 | if (host) | 89 | if (host) |
90 | nlm_release_host(host); | 90 | nlm_release_host(host); |
91 | if (error) | ||
92 | return error; | ||
91 | return nlm_lck_denied_nolocks; | 93 | return nlm_lck_denied_nolocks; |
92 | } | 94 | } |
93 | 95 | ||
@@ -122,7 +124,7 @@ nlmsvc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
122 | 124 | ||
123 | /* Obtain client and file */ | 125 | /* Obtain client and file */ |
124 | if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file))) | 126 | if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file))) |
125 | return rpc_success; | 127 | return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success; |
126 | 128 | ||
127 | /* Now check for conflicting locks */ | 129 | /* Now check for conflicting locks */ |
128 | resp->status = cast_status(nlmsvc_testlock(file, &argp->lock, &resp->lock)); | 130 | resp->status = cast_status(nlmsvc_testlock(file, &argp->lock, &resp->lock)); |
@@ -153,7 +155,7 @@ nlmsvc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
153 | 155 | ||
154 | /* Obtain client and file */ | 156 | /* Obtain client and file */ |
155 | if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file))) | 157 | if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file))) |
156 | return rpc_success; | 158 | return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success; |
157 | 159 | ||
158 | #if 0 | 160 | #if 0 |
159 | /* If supplied state doesn't match current state, we assume it's | 161 | /* If supplied state doesn't match current state, we assume it's |
@@ -196,7 +198,7 @@ nlmsvc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
196 | 198 | ||
197 | /* Obtain client and file */ | 199 | /* Obtain client and file */ |
198 | if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file))) | 200 | if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file))) |
199 | return rpc_success; | 201 | return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success; |
200 | 202 | ||
201 | /* Try to cancel request. */ | 203 | /* Try to cancel request. */ |
202 | resp->status = cast_status(nlmsvc_cancel_blocked(file, &argp->lock)); | 204 | resp->status = cast_status(nlmsvc_cancel_blocked(file, &argp->lock)); |
@@ -229,7 +231,7 @@ nlmsvc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
229 | 231 | ||
230 | /* Obtain client and file */ | 232 | /* Obtain client and file */ |
231 | if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file))) | 233 | if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file))) |
232 | return rpc_success; | 234 | return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success; |
233 | 235 | ||
234 | /* Now try to remove the lock */ | 236 | /* Now try to remove the lock */ |
235 | resp->status = cast_status(nlmsvc_unlock(file, &argp->lock)); | 237 | resp->status = cast_status(nlmsvc_unlock(file, &argp->lock)); |
@@ -368,7 +370,7 @@ nlmsvc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
368 | 370 | ||
369 | /* Obtain client and file */ | 371 | /* Obtain client and file */ |
370 | if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file))) | 372 | if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file))) |
371 | return rpc_success; | 373 | return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success; |
372 | 374 | ||
373 | /* Now try to create the share */ | 375 | /* Now try to create the share */ |
374 | resp->status = cast_status(nlmsvc_share_file(host, file, argp)); | 376 | resp->status = cast_status(nlmsvc_share_file(host, file, argp)); |
@@ -401,7 +403,7 @@ nlmsvc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp, | |||
401 | 403 | ||
402 | /* Obtain client and file */ | 404 | /* Obtain client and file */ |
403 | if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file))) | 405 | if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file))) |
404 | return rpc_success; | 406 | return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success; |
405 | 407 | ||
406 | /* Now try to unshare the file */ | 408 | /* Now try to unshare the file */ |
407 | resp->status = cast_status(nlmsvc_unshare_file(host, file, argp)); | 409 | resp->status = cast_status(nlmsvc_unshare_file(host, file, argp)); |
diff --git a/fs/lockd/svcsubs.c b/fs/lockd/svcsubs.c index c5f9113cdc70..7dac96e6c82c 100644 --- a/fs/lockd/svcsubs.c +++ b/fs/lockd/svcsubs.c | |||
@@ -135,12 +135,6 @@ out_unlock: | |||
135 | 135 | ||
136 | out_free: | 136 | out_free: |
137 | kfree(file); | 137 | kfree(file); |
138 | #ifdef CONFIG_LOCKD_V4 | ||
139 | if (nfserr == 1) | ||
140 | nfserr = nlm4_stale_fh; | ||
141 | else | ||
142 | #endif | ||
143 | nfserr = nlm_lck_denied; | ||
144 | goto out_unlock; | 138 | goto out_unlock; |
145 | } | 139 | } |
146 | 140 | ||
diff --git a/fs/nfsd/lockd.c b/fs/nfsd/lockd.c index 7b889ff15ae6..9b9e7e127c03 100644 --- a/fs/nfsd/lockd.c +++ b/fs/nfsd/lockd.c | |||
@@ -39,18 +39,20 @@ nlm_fopen(struct svc_rqst *rqstp, struct nfs_fh *f, struct file **filp) | |||
39 | fh_put(&fh); | 39 | fh_put(&fh); |
40 | rqstp->rq_client = NULL; | 40 | rqstp->rq_client = NULL; |
41 | exp_readunlock(); | 41 | exp_readunlock(); |
42 | /* nlm and nfsd don't share error codes. | 42 | /* We return nlm error codes as nlm doesn't know |
43 | * we invent: 0 = no error | 43 | * about nfsd, but nfsd does know about nlm.. |
44 | * 1 = stale file handle | ||
45 | * 2 = other error | ||
46 | */ | 44 | */ |
47 | switch (nfserr) { | 45 | switch (nfserr) { |
48 | case nfs_ok: | 46 | case nfs_ok: |
49 | return 0; | 47 | return 0; |
48 | case nfserr_dropit: | ||
49 | return nlm_drop_reply; | ||
50 | #ifdef CONFIG_LOCKD_V4 | ||
50 | case nfserr_stale: | 51 | case nfserr_stale: |
51 | return 1; | 52 | return nlm4_stale_fh; |
53 | #endif | ||
52 | default: | 54 | default: |
53 | return 2; | 55 | return nlm_lck_denied; |
54 | } | 56 | } |
55 | } | 57 | } |
56 | 58 | ||