patch-2.2.18 linux/fs/lockd/mon.c
Next file: linux/fs/lockd/svc.c
Previous file: linux/fs/lockd/lockd_syms.c
Back to the patch index
Back to the overall index
- Lines: 121
- Date:
Fri Sep 15 22:10:43 2000
- Orig file:
v2.2.17/fs/lockd/mon.c
- Orig date:
Fri Apr 21 12:46:43 2000
diff -u --new-file --recursive --exclude-from /usr/src/exclude v2.2.17/fs/lockd/mon.c linux/fs/lockd/mon.c
@@ -4,6 +4,10 @@
* The kernel statd client.
*
* Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
+ *
+ * Note: In a future release, we should fold all NSM activity into
+ * rpc.mountd and the mount program, respectively. Stuff like this
+ * really doesn't belong in the kernel. --okir
*/
#include <linux/types.h>
@@ -30,14 +34,12 @@
* Common procedure for SM_MON/SM_UNMON calls
*/
static int
-nsm_mon_unmon(struct nlm_host *host, char *what, u32 proc)
+nsm_mon_unmon(struct nlm_host *host, u32 proc, struct nsm_res *res)
{
struct rpc_clnt *clnt;
int status;
struct nsm_args args;
- struct nsm_res res;
- dprintk("lockd: nsm_%s(%s)\n", what, host->h_name);
status = -EACCES;
clnt = nsm_create();
if (!clnt)
@@ -47,23 +49,15 @@
args.prog = NLM_PROGRAM;
args.vers = 1;
args.proc = NLMPROC_NSM_NOTIFY;
+ memset(res, 0, sizeof(*res));
- status = rpc_call(clnt, proc, &args, &res, 0);
- if (status < 0) {
+ status = rpc_call(clnt, proc, &args, res, 0);
+ if (status < 0)
printk(KERN_DEBUG "nsm_mon_unmon: rpc failed, status=%d\n",
status);
- goto out;
- }
-
- status = -EACCES;
- if (res.status != 0) {
- printk(KERN_NOTICE "lockd: cannot %s %s\n", what, host->h_name);
- goto out;
- }
-
- nsm_local_state = res.state;
- status = 0;
-out:
+ else
+ status = 0;
+ out:
return status;
}
@@ -73,10 +67,16 @@
int
nsm_monitor(struct nlm_host *host)
{
+ struct nsm_res res;
int status;
- status = nsm_mon_unmon(host, "monitor", SM_MON);
- if (status >= 0)
+ dprintk("lockd: nsm_monitor(%s)\n", host->h_name);
+
+ status = nsm_mon_unmon(host, SM_MON, &res);
+
+ if (status < 0 || res.status != 0)
+ printk(KERN_NOTICE "lockd: cannot monitor %s\n", host->h_name);
+ else
host->h_monitored = 1;
return status;
}
@@ -87,9 +87,15 @@
int
nsm_unmonitor(struct nlm_host *host)
{
+ struct nsm_res res;
int status;
- if ((status = nsm_mon_unmon(host, "unmonitor", SM_UNMON)) >= 0)
+ dprintk("lockd: nsm_unmonitor(%s)\n", host->h_name);
+
+ status = nsm_mon_unmon(host, SM_UNMON, &res);
+ if (status < 0)
+ printk(KERN_NOTICE "lockd: cannot unmonitor %s\n", host->h_name);
+ else
host->h_monitored = 0;
return status;
}
@@ -155,15 +161,15 @@
*/
sprintf(buffer, "%d.%d.%d.%d", (addr>>24) & 0xff, (addr>>16) & 0xff,
(addr>>8) & 0xff, (addr) & 0xff);
- if (!(p = xdr_encode_string(p, buffer))
- || !(p = xdr_encode_string(p, system_utsname.nodename)))
+ if (!(p = xdr_encode_string(p, buffer, -1))
+ || !(p = xdr_encode_string(p, system_utsname.nodename, -1)))
return -EIO;
*p++ = htonl(argp->prog);
*p++ = htonl(argp->vers);
*p++ = htonl(argp->proc);
/* This is the private part. Needed only for SM_MON call */
- if (rqstp->rq_task->tk_proc == SM_MON) {
+ if (rqstp->rq_task->tk_msg.rpc_proc == SM_MON) {
*p++ = argp->addr;
*p++ = 0;
*p++ = 0;
@@ -187,7 +193,7 @@
static int
xdr_decode_stat(struct rpc_rqst *rqstp, u32 *p, struct nsm_res *resp)
{
- resp->status = ntohl(*p++);
+ resp->state = ntohl(*p++);
return 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)