diff options
Diffstat (limited to 'fs/lockd')
-rw-r--r-- | fs/lockd/mon.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c index f2507fec7c6f..e4d563543b11 100644 --- a/fs/lockd/mon.c +++ b/fs/lockd/mon.c | |||
@@ -218,6 +218,24 @@ static __be32 *xdr_encode_mon_id(__be32 *p, struct nsm_args *argp) | |||
218 | return xdr_encode_my_id(p, argp); | 218 | return xdr_encode_my_id(p, argp); |
219 | } | 219 | } |
220 | 220 | ||
221 | /* | ||
222 | * The "priv" argument may contain private information required | ||
223 | * by the SM_MON call. This information will be supplied in the | ||
224 | * SM_NOTIFY call. | ||
225 | * | ||
226 | * Linux provides the raw IP address of the monitored host, | ||
227 | * left in network byte order. | ||
228 | */ | ||
229 | static __be32 *xdr_encode_priv(__be32 *p, struct nsm_args *argp) | ||
230 | { | ||
231 | *p++ = argp->addr; | ||
232 | *p++ = 0; | ||
233 | *p++ = 0; | ||
234 | *p++ = 0; | ||
235 | |||
236 | return p; | ||
237 | } | ||
238 | |||
221 | static int | 239 | static int |
222 | xdr_encode_mon(struct rpc_rqst *rqstp, __be32 *p, struct nsm_args *argp) | 240 | xdr_encode_mon(struct rpc_rqst *rqstp, __be32 *p, struct nsm_args *argp) |
223 | { | 241 | { |
@@ -225,11 +243,10 @@ xdr_encode_mon(struct rpc_rqst *rqstp, __be32 *p, struct nsm_args *argp) | |||
225 | if (IS_ERR(p)) | 243 | if (IS_ERR(p)) |
226 | return PTR_ERR(p); | 244 | return PTR_ERR(p); |
227 | 245 | ||
228 | /* Surprise - there may even be room for an IPv6 address now */ | 246 | p = xdr_encode_priv(p, argp); |
229 | *p++ = argp->addr; | 247 | if (IS_ERR(p)) |
230 | *p++ = 0; | 248 | return PTR_ERR(p); |
231 | *p++ = 0; | 249 | |
232 | *p++ = 0; | ||
233 | rqstp->rq_slen = xdr_adjust_iovec(rqstp->rq_svec, p); | 250 | rqstp->rq_slen = xdr_adjust_iovec(rqstp->rq_svec, p); |
234 | return 0; | 251 | return 0; |
235 | } | 252 | } |
@@ -265,7 +282,8 @@ xdr_decode_stat(struct rpc_rqst *rqstp, __be32 *p, struct nsm_res *resp) | |||
265 | #define SM_my_id_sz (SM_my_name_sz+3) | 282 | #define SM_my_id_sz (SM_my_name_sz+3) |
266 | #define SM_mon_name_sz (1+XDR_QUADLEN(SM_MAXSTRLEN)) | 283 | #define SM_mon_name_sz (1+XDR_QUADLEN(SM_MAXSTRLEN)) |
267 | #define SM_mon_id_sz (SM_mon_name_sz+SM_my_id_sz) | 284 | #define SM_mon_id_sz (SM_mon_name_sz+SM_my_id_sz) |
268 | #define SM_mon_sz (SM_mon_id_sz+4) | 285 | #define SM_priv_sz (XDR_QUADLEN(SM_PRIV_SIZE)) |
286 | #define SM_mon_sz (SM_mon_id_sz+SM_priv_sz) | ||
269 | #define SM_monres_sz 2 | 287 | #define SM_monres_sz 2 |
270 | #define SM_unmonres_sz 1 | 288 | #define SM_unmonres_sz 1 |
271 | 289 | ||