Release 4.15 fs/lockd/svc4proc.c
// SPDX-License-Identifier: GPL-2.0
/*
* linux/fs/lockd/svc4proc.c
*
* Lockd server procedures. We don't implement the NLM_*_RES
* procedures because we don't use the async procedures.
*
* Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
*/
#include <linux/types.h>
#include <linux/time.h>
#include <linux/lockd/lockd.h>
#include <linux/lockd/share.h>
#include <linux/sunrpc/svc_xprt.h>
#define NLMDBG_FACILITY NLMDBG_CLIENT
/*
* Obtain client and file from arguments
*/
static __be32
nlm4svc_retrieve_args(struct svc_rqst *rqstp, struct nlm_args *argp,
struct nlm_host **hostp, struct nlm_file **filp)
{
struct nlm_host *host = NULL;
struct nlm_file *file = NULL;
struct nlm_lock *lock = &argp->lock;
__be32 error = 0;
/* nfsd callbacks must have been installed for this procedure */
if (!nlmsvc_ops)
return nlm_lck_denied_nolocks;
/* Obtain host handle */
if (!(host = nlmsvc_lookup_host(rqstp, lock->caller, lock->len))
|| (argp->monitor && nsm_monitor(host) < 0))
goto no_locks;
*hostp = host;
/* Obtain file pointer. Not used by FREE_ALL call. */
if (filp != NULL) {
if ((error = nlm_lookup_file(rqstp, &file, &lock->fh)) != 0)
goto no_locks;
*filp = file;
/* Set up the missing parts of the file_lock structure */
lock->fl.fl_file = file->f_file;
lock->fl.fl_owner = (fl_owner_t) host;
lock->fl.fl_lmops = &nlmsvc_lock_operations;
}
return 0;
no_locks:
nlmsvc_release_host(host);
if (error)
return error;
return nlm_lck_denied_nolocks;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 177 | 89.85% | 1 | 20.00% |
| Trond Myklebust | 9 | 4.57% | 1 | 20.00% |
| Olaf Kirch | 8 | 4.06% | 1 | 20.00% |
| Al Viro | 2 | 1.02% | 1 | 20.00% |
| Chuck Lever | 1 | 0.51% | 1 | 20.00% |
| Total | 197 | 100.00% | 5 | 100.00% |
/*
* NULL: Test for presence of service
*/
static __be32
nlm4svc_proc_null(struct svc_rqst *rqstp)
{
dprintk("lockd: NULL called\n");
return rpc_success;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 18 | 94.74% | 1 | 50.00% |
| Al Viro | 1 | 5.26% | 1 | 50.00% |
| Total | 19 | 100.00% | 2 | 100.00% |
/*
* TEST: Check for conflicting lock
*/
static __be32
__nlm4svc_proc_test(struct svc_rqst *rqstp, struct nlm_res *resp)
{
struct nlm_args *argp = rqstp->rq_argp;
struct nlm_host *host;
struct nlm_file *file;
__be32 rc = rpc_success;
dprintk("lockd: TEST4 called\n");
resp->cookie = argp->cookie;
/* Obtain client and file */
if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file)))
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
/* Now check for conflicting locks */
resp->status = nlmsvc_testlock(rqstp, file, host, &argp->lock, &resp->lock, &resp->cookie);
if (resp->status == nlm_drop_reply)
rc = rpc_drop_reply;
else
dprintk("lockd: TEST4 status %d\n", ntohl(resp->status));
nlmsvc_release_host(host);
nlm_release_file(file);
return rc;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 104 | 67.97% | 1 | 10.00% |
| Marc Eshel | 16 | 10.46% | 2 | 20.00% |
| Oleg Drokin | 10 | 6.54% | 1 | 10.00% |
| Christoph Hellwig | 10 | 6.54% | 1 | 10.00% |
| Neil Brown | 8 | 5.23% | 1 | 10.00% |
| Jeff Layton | 2 | 1.31% | 1 | 10.00% |
| Chuck Lever | 1 | 0.65% | 1 | 10.00% |
| Harvey Harrison | 1 | 0.65% | 1 | 10.00% |
| Al Viro | 1 | 0.65% | 1 | 10.00% |
| Total | 153 | 100.00% | 10 | 100.00% |
static __be32
nlm4svc_proc_test(struct svc_rqst *rqstp)
{
return __nlm4svc_proc_test(rqstp, rqstp->rq_resp);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Christoph Hellwig | 14 | 66.67% | 1 | 33.33% |
| Linus Torvalds (pre-git) | 6 | 28.57% | 1 | 33.33% |
| Al Viro | 1 | 4.76% | 1 | 33.33% |
| Total | 21 | 100.00% | 3 | 100.00% |
static __be32
__nlm4svc_proc_lock(struct svc_rqst *rqstp, struct nlm_res *resp)
{
struct nlm_args *argp = rqstp->rq_argp;
struct nlm_host *host;
struct nlm_file *file;
__be32 rc = rpc_success;
dprintk("lockd: LOCK called\n");
resp->cookie = argp->cookie;
/* Obtain client and file */
if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file)))
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
#if 0
/* If supplied state doesn't match current state, we assume it's
* an old request that time-warped somehow. Any error return would
* do in this case because it's irrelevant anyway.
*
* NB: We don't retrieve the remote host's state yet.
*/
if (host->h_nsmstate && host->h_nsmstate != argp->state) {
resp->status = nlm_lck_denied_nolocks;
} else
#endif
/* Now try to lock the file */
resp->status = nlmsvc_lock(rqstp, file, host, &argp->lock,
argp->block, &argp->cookie,
argp->reclaim);
if (resp->status == nlm_drop_reply)
rc = rpc_drop_reply;
else
dprintk("lockd: LOCK status %d\n", ntohl(resp->status));
nlmsvc_release_host(host);
nlm_release_file(file);
return rc;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 113 | 69.33% | 1 | 11.11% |
| Christoph Hellwig | 15 | 9.20% | 1 | 11.11% |
| Oleg Drokin | 10 | 6.13% | 1 | 11.11% |
| Marc Eshel | 9 | 5.52% | 1 | 11.11% |
| Neil Brown | 8 | 4.91% | 1 | 11.11% |
| J. Bruce Fields | 4 | 2.45% | 1 | 11.11% |
| Jeff Layton | 2 | 1.23% | 1 | 11.11% |
| Chuck Lever | 1 | 0.61% | 1 | 11.11% |
| Harvey Harrison | 1 | 0.61% | 1 | 11.11% |
| Total | 163 | 100.00% | 9 | 100.00% |
static __be32
nlm4svc_proc_lock(struct svc_rqst *rqstp)
{
return __nlm4svc_proc_lock(rqstp, rqstp->rq_resp);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Christoph Hellwig | 14 | 66.67% | 1 | 33.33% |
| Linus Torvalds (pre-git) | 6 | 28.57% | 1 | 33.33% |
| Al Viro | 1 | 4.76% | 1 | 33.33% |
| Total | 21 | 100.00% | 3 | 100.00% |
static __be32
__nlm4svc_proc_cancel(struct svc_rqst *rqstp, struct nlm_res *resp)
{
struct nlm_args *argp = rqstp->rq_argp;
struct nlm_host *host;
struct nlm_file *file;
dprintk("lockd: CANCEL called\n");
resp->cookie = argp->cookie;
/* Don't accept requests during grace period */
if (locks_in_grace(SVC_NET(rqstp))) {
resp->status = nlm_lck_denied_grace_period;
return rpc_success;
}
/* Obtain client and file */
if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file)))
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
/* Try to cancel request. */
resp->status = nlmsvc_cancel_blocked(SVC_NET(rqstp), file, &argp->lock);
dprintk("lockd: CANCEL status %d\n", ntohl(resp->status));
nlmsvc_release_host(host);
nlm_release_file(file);
return rpc_success;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 112 | 75.68% | 1 | 16.67% |
| Christoph Hellwig | 15 | 10.14% | 1 | 16.67% |
| Stanislav Kinsbursky | 11 | 7.43% | 1 | 16.67% |
| Neil Brown | 8 | 5.41% | 1 | 16.67% |
| Chuck Lever | 1 | 0.68% | 1 | 16.67% |
| J. Bruce Fields | 1 | 0.68% | 1 | 16.67% |
| Total | 148 | 100.00% | 6 | 100.00% |
static __be32
nlm4svc_proc_cancel(struct svc_rqst *rqstp)
{
return __nlm4svc_proc_cancel(rqstp, rqstp->rq_resp);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Christoph Hellwig | 21 | 100.00% | 1 | 100.00% |
| Total | 21 | 100.00% | 1 | 100.00% |
/*
* UNLOCK: release a lock
*/
static __be32
__nlm4svc_proc_unlock(struct svc_rqst *rqstp, struct nlm_res *resp)
{
struct nlm_args *argp = rqstp->rq_argp;
struct nlm_host *host;
struct nlm_file *file;
dprintk("lockd: UNLOCK called\n");
resp->cookie = argp->cookie;
/* Don't accept new lock requests during grace period */
if (locks_in_grace(SVC_NET(rqstp))) {
resp->status = nlm_lck_denied_grace_period;
return rpc_success;
}
/* Obtain client and file */
if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file)))
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
/* Now try to remove the lock */
resp->status = nlmsvc_unlock(SVC_NET(rqstp), file, &argp->lock);
dprintk("lockd: UNLOCK status %d\n", ntohl(resp->status));
nlmsvc_release_host(host);
nlm_release_file(file);
return rpc_success;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 116 | 78.38% | 1 | 14.29% |
| Stanislav Kinsbursky | 11 | 7.43% | 1 | 14.29% |
| Christoph Hellwig | 10 | 6.76% | 1 | 14.29% |
| Neil Brown | 8 | 5.41% | 1 | 14.29% |
| J. Bruce Fields | 1 | 0.68% | 1 | 14.29% |
| Chuck Lever | 1 | 0.68% | 1 | 14.29% |
| Al Viro | 1 | 0.68% | 1 | 14.29% |
| Total | 148 | 100.00% | 7 | 100.00% |
static __be32
nlm4svc_proc_unlock(struct svc_rqst *rqstp)
{
return __nlm4svc_proc_unlock(rqstp, rqstp->rq_resp);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Christoph Hellwig | 21 | 100.00% | 1 | 100.00% |
| Total | 21 | 100.00% | 1 | 100.00% |
/*
* GRANTED: A server calls us to tell that a process' lock request
* was granted
*/
static __be32
__nlm4svc_proc_granted(struct svc_rqst *rqstp, struct nlm_res *resp)
{
struct nlm_args *argp = rqstp->rq_argp;
resp->cookie = argp->cookie;
dprintk("lockd: GRANTED called\n");
resp->status = nlmclnt_grant(svc_addr(rqstp), &argp->lock);
dprintk("lockd: GRANTED status %d\n", ntohl(resp->status));
return rpc_success;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 53 | 75.71% | 1 | 16.67% |
| Christoph Hellwig | 10 | 14.29% | 1 | 16.67% |
| Trond Myklebust | 3 | 4.29% | 1 | 16.67% |
| Chuck Lever | 3 | 4.29% | 2 | 33.33% |
| Al Viro | 1 | 1.43% | 1 | 16.67% |
| Total | 70 | 100.00% | 6 | 100.00% |
static __be32
nlm4svc_proc_granted(struct svc_rqst *rqstp)
{
return __nlm4svc_proc_granted(rqstp, rqstp->rq_resp);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Christoph Hellwig | 21 | 100.00% | 1 | 100.00% |
| Total | 21 | 100.00% | 1 | 100.00% |
/*
* This is the generic lockd callback for async RPC calls
*/
static void nlm4svc_callback_exit(struct rpc_task *task, void *data)
{
dprintk("lockd: %5u callback returned %d\n", task->tk_pid,
-task->tk_status);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Trond Myklebust | 13 | 44.83% | 1 | 25.00% |
| Linus Torvalds (pre-git) | 11 | 37.93% | 1 | 25.00% |
| Neil Brown | 4 | 13.79% | 1 | 25.00% |
| Chuck Lever | 1 | 3.45% | 1 | 25.00% |
| Total | 29 | 100.00% | 4 | 100.00% |
static void nlm4svc_callback_release(void *data)
{
nlmsvc_release_call(data);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Trond Myklebust | 10 | 66.67% | 1 | 33.33% |
| Linus Torvalds (pre-git) | 4 | 26.67% | 1 | 33.33% |
| Chuck Lever | 1 | 6.67% | 1 | 33.33% |
| Total | 15 | 100.00% | 3 | 100.00% |
static const struct rpc_call_ops nlm4svc_callback_ops = {
.rpc_call_done = nlm4svc_callback_exit,
.rpc_release = nlm4svc_callback_release,
};
/*
* `Async' versions of the above service routines. They aren't really,
* because we send the callback before the reply proper. I hope this
* doesn't break any clients.
*/
static __be32 nlm4svc_callback(struct svc_rqst *rqstp, u32 proc,
__be32 (*func)(struct svc_rqst *, struct nlm_res *))
{
struct nlm_args *argp = rqstp->rq_argp;
struct nlm_host *host;
struct nlm_rqst *call;
__be32 stat;
host = nlmsvc_lookup_host(rqstp,
argp->lock.caller,
argp->lock.len);
if (host == NULL)
return rpc_system_err;
call = nlm_alloc_call(host);
nlmsvc_release_host(host);
if (call == NULL)
return rpc_system_err;
stat = func(rqstp, &call->a_res);
if (stat != 0) {
nlmsvc_release_call(call);
return stat;
}
call->a_flags = RPC_TASK_ASYNC;
if (nlm_async_reply(call, proc, &nlm4svc_callback_ops) < 0)
return rpc_system_err;
return rpc_success;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Trond Myklebust | 83 | 53.90% | 1 | 12.50% |
| Linus Torvalds (pre-git) | 38 | 24.68% | 1 | 12.50% |
| Olaf Kirch | 12 | 7.79% | 1 | 12.50% |
| Christoph Hellwig | 9 | 5.84% | 1 | 12.50% |
| Al Viro | 8 | 5.19% | 2 | 25.00% |
| Neil Brown | 3 | 1.95% | 1 | 12.50% |
| Chuck Lever | 1 | 0.65% | 1 | 12.50% |
| Total | 154 | 100.00% | 8 | 100.00% |
static __be32 nlm4svc_proc_test_msg(struct svc_rqst *rqstp)
{
dprintk("lockd: TEST_MSG called\n");
return nlm4svc_callback(rqstp, NLMPROC_TEST_RES, __nlm4svc_proc_test);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 12 | 46.15% | 1 | 20.00% |
| Trond Myklebust | 8 | 30.77% | 1 | 20.00% |
| Neil Brown | 4 | 15.38% | 1 | 20.00% |
| Al Viro | 1 | 3.85% | 1 | 20.00% |
| Christoph Hellwig | 1 | 3.85% | 1 | 20.00% |
| Total | 26 | 100.00% | 5 | 100.00% |
static __be32 nlm4svc_proc_lock_msg(struct svc_rqst *rqstp)
{
dprintk("lockd: LOCK_MSG called\n");
return nlm4svc_callback(rqstp, NLMPROC_LOCK_RES, __nlm4svc_proc_lock);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Trond Myklebust | 18 | 69.23% | 1 | 20.00% |
| Linus Torvalds (pre-git) | 4 | 15.38% | 1 | 20.00% |
| Neil Brown | 2 | 7.69% | 1 | 20.00% |
| Al Viro | 1 | 3.85% | 1 | 20.00% |
| Christoph Hellwig | 1 | 3.85% | 1 | 20.00% |
| Total | 26 | 100.00% | 5 | 100.00% |
static __be32 nlm4svc_proc_cancel_msg(struct svc_rqst *rqstp)
{
dprintk("lockd: CANCEL_MSG called\n");
return nlm4svc_callback(rqstp, NLMPROC_CANCEL_RES, __nlm4svc_proc_cancel);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Trond Myklebust | 15 | 57.69% | 1 | 25.00% |
| Linus Torvalds (pre-git) | 9 | 34.62% | 1 | 25.00% |
| Al Viro | 1 | 3.85% | 1 | 25.00% |
| Christoph Hellwig | 1 | 3.85% | 1 | 25.00% |
| Total | 26 | 100.00% | 4 | 100.00% |
static __be32 nlm4svc_proc_unlock_msg(struct svc_rqst *rqstp)
{
dprintk("lockd: UNLOCK_MSG called\n");
return nlm4svc_callback(rqstp, NLMPROC_UNLOCK_RES, __nlm4svc_proc_unlock);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 23 | 88.46% | 1 | 25.00% |
| Al Viro | 1 | 3.85% | 1 | 25.00% |
| Trond Myklebust | 1 | 3.85% | 1 | 25.00% |
| Christoph Hellwig | 1 | 3.85% | 1 | 25.00% |
| Total | 26 | 100.00% | 4 | 100.00% |
static __be32 nlm4svc_proc_granted_msg(struct svc_rqst *rqstp)
{
dprintk("lockd: GRANTED_MSG called\n");
return nlm4svc_callback(rqstp, NLMPROC_GRANTED_RES, __nlm4svc_proc_granted);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 23 | 88.46% | 1 | 25.00% |
| Al Viro | 1 | 3.85% | 1 | 25.00% |
| Trond Myklebust | 1 | 3.85% | 1 | 25.00% |
| Christoph Hellwig | 1 | 3.85% | 1 | 25.00% |
| Total | 26 | 100.00% | 4 | 100.00% |
/*
* SHARE: create a DOS share or alter existing share.
*/
static __be32
nlm4svc_proc_share(struct svc_rqst *rqstp)
{
struct nlm_args *argp = rqstp->rq_argp;
struct nlm_res *resp = rqstp->rq_resp;
struct nlm_host *host;
struct nlm_file *file;
dprintk("lockd: SHARE called\n");
resp->cookie = argp->cookie;
/* Don't accept new lock requests during grace period */
if (locks_in_grace(SVC_NET(rqstp)) && !argp->reclaim) {
resp->status = nlm_lck_denied_grace_period;
return rpc_success;
}
/* Obtain client and file */
if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file)))
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
/* Now try to create the share */
resp->status = nlmsvc_share_file(host, file, argp);
dprintk("lockd: SHARE status %d\n", ntohl(resp->status));
nlmsvc_release_host(host);
nlm_release_file(file);
return rpc_success;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 122 | 80.79% | 1 | 14.29% |
| Christoph Hellwig | 12 | 7.95% | 1 | 14.29% |
| Neil Brown | 8 | 5.30% | 1 | 14.29% |
| Stanislav Kinsbursky | 6 | 3.97% | 1 | 14.29% |
| Al Viro | 1 | 0.66% | 1 | 14.29% |
| Chuck Lever | 1 | 0.66% | 1 | 14.29% |
| J. Bruce Fields | 1 | 0.66% | 1 | 14.29% |
| Total | 151 | 100.00% | 7 | 100.00% |
/*
* UNSHARE: Release a DOS share.
*/
static __be32
nlm4svc_proc_unshare(struct svc_rqst *rqstp)
{
struct nlm_args *argp = rqstp->rq_argp;
struct nlm_res *resp = rqstp->rq_resp;
struct nlm_host *host;
struct nlm_file *file;
dprintk("lockd: UNSHARE called\n");
resp->cookie = argp->cookie;
/* Don't accept requests during grace period */
if (locks_in_grace(SVC_NET(rqstp))) {
resp->status = nlm_lck_denied_grace_period;
return rpc_success;
}
/* Obtain client and file */
if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file)))
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
/* Now try to lock the file */
resp->status = nlmsvc_unshare_file(host, file, argp);
dprintk("lockd: UNSHARE status %d\n", ntohl(resp->status));
nlmsvc_release_host(host);
nlm_release_file(file);
return rpc_success;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 117 | 80.14% | 1 | 14.29% |
| Christoph Hellwig | 12 | 8.22% | 1 | 14.29% |
| Neil Brown | 8 | 5.48% | 1 | 14.29% |
| Stanislav Kinsbursky | 6 | 4.11% | 1 | 14.29% |
| J. Bruce Fields | 1 | 0.68% | 1 | 14.29% |
| Chuck Lever | 1 | 0.68% | 1 | 14.29% |
| Al Viro | 1 | 0.68% | 1 | 14.29% |
| Total | 146 | 100.00% | 7 | 100.00% |
/*
* NM_LOCK: Create an unmonitored lock
*/
static __be32
nlm4svc_proc_nm_lock(struct svc_rqst *rqstp)
{
struct nlm_args *argp = rqstp->rq_argp;
dprintk("lockd: NM_LOCK called\n");
argp->monitor = 0; /* just clean the monitor flag */
return nlm4svc_proc_lock(rqstp);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 30 | 78.95% | 1 | 33.33% |
| Christoph Hellwig | 7 | 18.42% | 1 | 33.33% |
| Al Viro | 1 | 2.63% | 1 | 33.33% |
| Total | 38 | 100.00% | 3 | 100.00% |
/*
* FREE_ALL: Release all locks and shares held by client
*/
static __be32
nlm4svc_proc_free_all(struct svc_rqst *rqstp)
{
struct nlm_args *argp = rqstp->rq_argp;
struct nlm_host *host;
/* Obtain client */
if (nlm4svc_retrieve_args(rqstp, argp, &host, NULL))
return rpc_success;
nlmsvc_free_host_resources(host);
nlmsvc_release_host(host);
return rpc_success;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 47 | 83.93% | 1 | 25.00% |
| Christoph Hellwig | 7 | 12.50% | 1 | 25.00% |
| Chuck Lever | 1 | 1.79% | 1 | 25.00% |
| Al Viro | 1 | 1.79% | 1 | 25.00% |
| Total | 56 | 100.00% | 4 | 100.00% |
/*
* SM_NOTIFY: private callback from statd (not part of official NLM proto)
*/
static __be32
nlm4svc_proc_sm_notify(struct svc_rqst *rqstp)
{
struct nlm_reboot *argp = rqstp->rq_argp;
dprintk("lockd: SM_NOTIFY called\n");
if (!nlm_privileged_requester(rqstp)) {
char buf[RPC_MAX_ADDRBUFLEN];
printk(KERN_WARNING "lockd: rejected NSM callback from %s\n",
svc_print_addr(rqstp, buf, sizeof(buf)));
return rpc_system_err;
}
nlm_host_rebooted(SVC_NET(rqstp), argp);
return rpc_success;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 45 | 60.00% | 1 | 14.29% |
| Chuck Lever | 16 | 21.33% | 2 | 28.57% |
| Christoph Hellwig | 7 | 9.33% | 1 | 14.29% |
| Andrey Ryabinin | 5 | 6.67% | 1 | 14.29% |
| Olaf Kirch | 1 | 1.33% | 1 | 14.29% |
| Al Viro | 1 | 1.33% | 1 | 14.29% |
| Total | 75 | 100.00% | 7 | 100.00% |
/*
* client sent a GRANTED_RES, let's remove the associated block
*/
static __be32
nlm4svc_proc_granted_res(struct svc_rqst *rqstp)
{
struct nlm_res *argp = rqstp->rq_argp;
if (!nlmsvc_ops)
return rpc_success;
dprintk("lockd: GRANTED_RES called\n");
nlmsvc_grant_reply(&argp->cookie, argp->status);
return rpc_success;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Trond Myklebust | 40 | 83.33% | 1 | 33.33% |
| Christoph Hellwig | 7 | 14.58% | 1 | 33.33% |
| Al Viro | 1 | 2.08% | 1 | 33.33% |
| Total | 48 | 100.00% | 3 | 100.00% |
/*
* NLM Server procedures.
*/
#define nlm4svc_encode_norep nlm4svc_encode_void
#define nlm4svc_decode_norep nlm4svc_decode_void
#define nlm4svc_decode_testres nlm4svc_decode_void
#define nlm4svc_decode_lockres nlm4svc_decode_void
#define nlm4svc_decode_unlockres nlm4svc_decode_void
#define nlm4svc_decode_cancelres nlm4svc_decode_void
#define nlm4svc_decode_grantedres nlm4svc_decode_void
#define nlm4svc_proc_none nlm4svc_proc_null
#define nlm4svc_proc_test_res nlm4svc_proc_null
#define nlm4svc_proc_lock_res nlm4svc_proc_null
#define nlm4svc_proc_cancel_res nlm4svc_proc_null
#define nlm4svc_proc_unlock_res nlm4svc_proc_null
struct nlm_void { int dummy; };
#define PROC(name, xargt, xrest, argt, rest, respsize) \
{ .pc_func = nlm4svc_proc_##name, \
.pc_decode = nlm4svc_decode_##xargt, \
.pc_encode = nlm4svc_encode_##xrest, \
.pc_release = NULL, \
.pc_argsize = sizeof(struct nlm_##argt), \
.pc_ressize = sizeof(struct nlm_##rest), \
.pc_xdrressize = respsize, \
}
#define Ck (1+XDR_QUADLEN(NLM_MAXCOOKIELEN))
/* cookie */
#define No (1+1024/4)
/* netobj */
#define St 1
/* status */
#define Rg 4
/* range (offset + length) */
const struct svc_procedure nlmsvc_procedures4[] = {
PROC(null, void, void, void, void, 1),
PROC(test, testargs, testres, args, res, Ck+St+2+No+Rg),
PROC(lock, lockargs, res, args, res, Ck+St),
PROC(cancel, cancargs, res, args, res, Ck+St),
PROC(unlock, unlockargs, res, args, res, Ck+St),
PROC(granted, testargs, res, args, res, Ck+St),
PROC(test_msg, testargs, norep, args, void, 1),
PROC(lock_msg, lockargs, norep, args, void, 1),
PROC(cancel_msg, cancargs, norep, args, void, 1),
PROC(unlock_msg, unlockargs, norep, args, void, 1),
PROC(granted_msg, testargs, norep, args, void, 1),
PROC(test_res, testres, norep, res, void, 1),
PROC(lock_res, lockres, norep, res, void, 1),
PROC(cancel_res, cancelres, norep, res, void, 1),
PROC(unlock_res, unlockres, norep, res, void, 1),
PROC(granted_res, res, norep, res, void, 1),
/* statd callback */
PROC(sm_notify, reboot, void, reboot, void, 1),
PROC(none, void, void, void, void, 0),
PROC(none, void, void, void, void, 0),
PROC(none, void, void, void, void, 0),
PROC(share, shareargs, shareres, args, res, Ck+St+1),
PROC(unshare, shareargs, shareres, args, res, Ck+St+1),
PROC(nm_lock, lockargs, res, args, res, Ck+St),
PROC(free_all, notify, void, args, void, 1),
};
Overall Contributors
| Person | Tokens | Prop | Commits | CommitProp |
| Linus Torvalds (pre-git) | 1602 | 67.11% | 1 | 2.56% |
| Trond Myklebust | 223 | 9.34% | 4 | 10.26% |
| Christoph Hellwig | 219 | 9.17% | 3 | 7.69% |
| Neil Brown | 156 | 6.54% | 4 | 10.26% |
| Stanislav Kinsbursky | 37 | 1.55% | 1 | 2.56% |
| Chuck Lever | 30 | 1.26% | 7 | 17.95% |
| Al Viro | 27 | 1.13% | 3 | 7.69% |
| Marc Eshel | 25 | 1.05% | 3 | 7.69% |
| Olaf Kirch | 21 | 0.88% | 2 | 5.13% |
| Oleg Drokin | 20 | 0.84% | 1 | 2.56% |
| J. Bruce Fields | 8 | 0.34% | 2 | 5.13% |
| Linus Torvalds | 5 | 0.21% | 1 | 2.56% |
| Andrey Ryabinin | 5 | 0.21% | 1 | 2.56% |
| Jeff Layton | 4 | 0.17% | 2 | 5.13% |
| Harvey Harrison | 2 | 0.08% | 1 | 2.56% |
| Ed Schouten | 1 | 0.04% | 1 | 2.56% |
| Greg Kroah-Hartman | 1 | 0.04% | 1 | 2.56% |
| Dave Jones | 1 | 0.04% | 1 | 2.56% |
| Total | 2387 | 100.00% | 39 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.