aboutsummaryrefslogtreecommitdiffstats
path: root/fs/lockd/mon.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/lockd/mon.c')
-rw-r--r--fs/lockd/mon.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c
index e02a1a4dfced..e27981403fbe 100644
--- a/fs/lockd/mon.c
+++ b/fs/lockd/mon.c
@@ -70,11 +70,14 @@ nsm_mon_unmon(struct nlm_host *host, u32 proc, struct nsm_res *res)
70int 70int
71nsm_monitor(struct nlm_host *host) 71nsm_monitor(struct nlm_host *host)
72{ 72{
73 struct nsm_handle *nsm = host->h_nsmhandle;
73 struct nsm_res res; 74 struct nsm_res res;
74 int status; 75 int status;
75 76
76 dprintk("lockd: nsm_monitor(%s)\n", host->h_name); 77 dprintk("lockd: nsm_monitor(%s)\n", host->h_name);
77 if (host->h_monitored) 78 BUG_ON(nsm == NULL);
79
80 if (nsm->sm_monitored)
78 return 0; 81 return 0;
79 82
80 status = nsm_mon_unmon(host, SM_MON, &res); 83 status = nsm_mon_unmon(host, SM_MON, &res);
@@ -82,7 +85,7 @@ nsm_monitor(struct nlm_host *host)
82 if (status < 0 || res.status != 0) 85 if (status < 0 || res.status != 0)
83 printk(KERN_NOTICE "lockd: cannot monitor %s\n", host->h_name); 86 printk(KERN_NOTICE "lockd: cannot monitor %s\n", host->h_name);
84 else 87 else
85 host->h_monitored = 1; 88 nsm->sm_monitored = 1;
86 return status; 89 return status;
87} 90}
88 91
@@ -92,19 +95,22 @@ nsm_monitor(struct nlm_host *host)
92int 95int
93nsm_unmonitor(struct nlm_host *host) 96nsm_unmonitor(struct nlm_host *host)
94{ 97{
98 struct nsm_handle *nsm = host->h_nsmhandle;
95 struct nsm_res res; 99 struct nsm_res res;
96 int status = 0; 100 int status = 0;
97 101
98 dprintk("lockd: nsm_unmonitor(%s)\n", host->h_name); 102 dprintk("lockd: nsm_unmonitor(%s)\n", host->h_name);
99 if (!host->h_monitored) 103 if (nsm == NULL)
100 return 0; 104 return 0;
101 host->h_monitored = 0; 105 host->h_nsmhandle = NULL;
102 106
103 if (!host->h_killed) { 107 if (!host->h_killed) {
104 status = nsm_mon_unmon(host, SM_UNMON, &res); 108 status = nsm_mon_unmon(host, SM_UNMON, &res);
105 if (status < 0) 109 if (status < 0)
106 printk(KERN_NOTICE "lockd: cannot unmonitor %s\n", host->h_name); 110 printk(KERN_NOTICE "lockd: cannot unmonitor %s\n", host->h_name);
111 nsm->sm_monitored = 0;
107 } 112 }
113 nsm_release(nsm);
108 return status; 114 return status;
109} 115}
110 116