]> Git Repo - linux.git/blame - fs/nfsd/lockd.c
vfs: nfsctl.c un-used nfsd #includes
[linux.git] / fs / nfsd / lockd.c
CommitLineData
1da177e4
LT
1/*
2 * linux/fs/nfsd/lockd.c
3 *
4 * This file contains all the stubs needed when communicating with lockd.
5 * This level of indirection is necessary so we can run nfsd+lockd without
6 * requiring the nfs client to be compiled in/loaded, and vice versa.
7 *
8 * Copyright (C) 1996, Olaf Kirch <[email protected]>
9 */
10
1da177e4 11#include <linux/file.h>
1da177e4
LT
12#include <linux/nfsd/nfsd.h>
13#include <linux/lockd/bind.h>
0a3adade 14#include "vfs.h"
1da177e4
LT
15
16#define NFSDDBG_FACILITY NFSDDBG_LOCKD
17
cc77b152
MS
18#ifdef CONFIG_LOCKD_V4
19#define nlm_stale_fh nlm4_stale_fh
20#define nlm_failed nlm4_failed
21#else
22#define nlm_stale_fh nlm_lck_denied_nolocks
23#define nlm_failed nlm_lck_denied_nolocks
24#endif
1da177e4
LT
25/*
26 * Note: we hold the dentry use count while the file is open.
27 */
e8c5c045 28static __be32
1da177e4
LT
29nlm_fopen(struct svc_rqst *rqstp, struct nfs_fh *f, struct file **filp)
30{
c7afef1f 31 __be32 nfserr;
1da177e4
LT
32 struct svc_fh fh;
33
34 /* must initialize before using! but maxsize doesn't matter */
35 fh_init(&fh,0);
36 fh.fh_handle.fh_size = f->size;
37 memcpy((char*)&fh.fh_handle.fh_base, f->data, f->size);
38 fh.fh_export = NULL;
39
40 exp_readlock();
8837abca 41 nfserr = nfsd_open(rqstp, &fh, S_IFREG, NFSD_MAY_LOCK, filp);
1da177e4
LT
42 fh_put(&fh);
43 rqstp->rq_client = NULL;
44 exp_readunlock();
d343fce1
N
45 /* We return nlm error codes as nlm doesn't know
46 * about nfsd, but nfsd does know about nlm..
1da177e4
LT
47 */
48 switch (nfserr) {
49 case nfs_ok:
50 return 0;
d343fce1
N
51 case nfserr_dropit:
52 return nlm_drop_reply;
1da177e4 53 case nfserr_stale:
cc77b152 54 return nlm_stale_fh;
1da177e4 55 default:
cc77b152 56 return nlm_failed;
1da177e4
LT
57 }
58}
59
60static void
61nlm_fclose(struct file *filp)
62{
63 fput(filp);
64}
65
66static struct nlmsvc_binding nfsd_nlm_ops = {
67 .fopen = nlm_fopen, /* open file for locking */
68 .fclose = nlm_fclose, /* close file */
69};
70
71void
72nfsd_lockd_init(void)
73{
74 dprintk("nfsd: initializing lockd\n");
75 nlmsvc_ops = &nfsd_nlm_ops;
76}
77
78void
79nfsd_lockd_shutdown(void)
80{
81 nlmsvc_ops = NULL;
82}
This page took 0.565796 seconds and 4 git commands to generate.