forked from mirrors/linux
		
	SUNRPC: New xdr_streams XDR encoder API
Now that all client-side XDR encoder routines use xdr_streams, there should be no need to support the legacy calling sequence [rpc_rqst *, __be32 *, RPC arg *] anywhere. We can construct an xdr_stream in the generic RPC code, instead of in each encoder function. Also, all the client-side encoder functions return 0 now, making a return value superfluous. Take this opportunity to convert them to return void instead. This is a refactoring change. It should not cause different behavior. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Tested-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
		
							parent
							
								
									1ac7c23e4a
								
							
						
					
					
						commit
						9f06c719f4
					
				
					 15 changed files with 606 additions and 807 deletions
				
			
		|  | @ -385,17 +385,15 @@ static void encode_nlm4_lock(struct xdr_stream *xdr, | ||||||
|  *		struct nlm4_lock alock; |  *		struct nlm4_lock alock; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nlm4_xdr_enc_testargs(struct rpc_rqst *req, __be32 *p, | static void nlm4_xdr_enc_testargs(struct rpc_rqst *req, | ||||||
| 				 const struct nlm_args *args) | 				  struct xdr_stream *xdr, | ||||||
|  | 				  const struct nlm_args *args) | ||||||
| { | { | ||||||
| 	const struct nlm_lock *lock = &args->lock; | 	const struct nlm_lock *lock = &args->lock; | ||||||
| 	struct xdr_stream xdr; |  | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_cookie(xdr, &args->cookie); | ||||||
| 	encode_cookie(&xdr, &args->cookie); | 	encode_bool(xdr, lock->fl.fl_type == F_WRLCK); | ||||||
| 	encode_bool(&xdr, lock->fl.fl_type == F_WRLCK); | 	encode_nlm4_lock(xdr, lock); | ||||||
| 	encode_nlm4_lock(&xdr, lock); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -408,20 +406,18 @@ static int nlm4_xdr_enc_testargs(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		int state; |  *		int state; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nlm4_xdr_enc_lockargs(struct rpc_rqst *req, __be32 *p, | static void nlm4_xdr_enc_lockargs(struct rpc_rqst *req, | ||||||
| 				 const struct nlm_args *args) | 				  struct xdr_stream *xdr, | ||||||
|  | 				  const struct nlm_args *args) | ||||||
| { | { | ||||||
| 	const struct nlm_lock *lock = &args->lock; | 	const struct nlm_lock *lock = &args->lock; | ||||||
| 	struct xdr_stream xdr; |  | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_cookie(xdr, &args->cookie); | ||||||
| 	encode_cookie(&xdr, &args->cookie); | 	encode_bool(xdr, args->block); | ||||||
| 	encode_bool(&xdr, args->block); | 	encode_bool(xdr, lock->fl.fl_type == F_WRLCK); | ||||||
| 	encode_bool(&xdr, lock->fl.fl_type == F_WRLCK); | 	encode_nlm4_lock(xdr, lock); | ||||||
| 	encode_nlm4_lock(&xdr, lock); | 	encode_bool(xdr, args->reclaim); | ||||||
| 	encode_bool(&xdr, args->reclaim); | 	encode_int32(xdr, args->state); | ||||||
| 	encode_int32(&xdr, args->state); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -432,18 +428,16 @@ static int nlm4_xdr_enc_lockargs(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		struct nlm4_lock alock; |  *		struct nlm4_lock alock; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nlm4_xdr_enc_cancargs(struct rpc_rqst *req, __be32 *p, | static void nlm4_xdr_enc_cancargs(struct rpc_rqst *req, | ||||||
| 				 const struct nlm_args *args) | 				  struct xdr_stream *xdr, | ||||||
|  | 				  const struct nlm_args *args) | ||||||
| { | { | ||||||
| 	const struct nlm_lock *lock = &args->lock; | 	const struct nlm_lock *lock = &args->lock; | ||||||
| 	struct xdr_stream xdr; |  | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_cookie(xdr, &args->cookie); | ||||||
| 	encode_cookie(&xdr, &args->cookie); | 	encode_bool(xdr, args->block); | ||||||
| 	encode_bool(&xdr, args->block); | 	encode_bool(xdr, lock->fl.fl_type == F_WRLCK); | ||||||
| 	encode_bool(&xdr, lock->fl.fl_type == F_WRLCK); | 	encode_nlm4_lock(xdr, lock); | ||||||
| 	encode_nlm4_lock(&xdr, lock); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -452,16 +446,14 @@ static int nlm4_xdr_enc_cancargs(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		struct nlm4_lock alock; |  *		struct nlm4_lock alock; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nlm4_xdr_enc_unlockargs(struct rpc_rqst *req, __be32 *p, | static void nlm4_xdr_enc_unlockargs(struct rpc_rqst *req, | ||||||
| 				   const struct nlm_args *args) | 				    struct xdr_stream *xdr, | ||||||
|  | 				    const struct nlm_args *args) | ||||||
| { | { | ||||||
| 	const struct nlm_lock *lock = &args->lock; | 	const struct nlm_lock *lock = &args->lock; | ||||||
| 	struct xdr_stream xdr; |  | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_cookie(xdr, &args->cookie); | ||||||
| 	encode_cookie(&xdr, &args->cookie); | 	encode_nlm4_lock(xdr, lock); | ||||||
| 	encode_nlm4_lock(&xdr, lock); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -470,15 +462,12 @@ static int nlm4_xdr_enc_unlockargs(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		nlm4_stat stat; |  *		nlm4_stat stat; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nlm4_xdr_enc_res(struct rpc_rqst *req, __be32 *p, | static void nlm4_xdr_enc_res(struct rpc_rqst *req, | ||||||
| 			    const struct nlm_res *result) | 			     struct xdr_stream *xdr, | ||||||
|  | 			     const struct nlm_res *result) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_cookie(xdr, &result->cookie); | ||||||
| 
 | 	encode_nlm4_stat(xdr, result->status); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_cookie(&xdr, &result->cookie); |  | ||||||
| 	encode_nlm4_stat(&xdr, result->status); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -494,17 +483,14 @@ static int nlm4_xdr_enc_res(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		nlm4_testrply test_stat; |  *		nlm4_testrply test_stat; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nlm4_xdr_enc_testres(struct rpc_rqst *req, __be32 *p, | static void nlm4_xdr_enc_testres(struct rpc_rqst *req, | ||||||
| 				const struct nlm_res *result) | 				 struct xdr_stream *xdr, | ||||||
|  | 				 const struct nlm_res *result) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_cookie(xdr, &result->cookie); | ||||||
| 
 | 	encode_nlm4_stat(xdr, result->status); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_cookie(&xdr, &result->cookie); |  | ||||||
| 	encode_nlm4_stat(&xdr, result->status); |  | ||||||
| 	if (result->status == nlm_lck_denied) | 	if (result->status == nlm_lck_denied) | ||||||
| 		encode_nlm4_holder(&xdr, result); | 		encode_nlm4_holder(xdr, result); | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -588,7 +574,7 @@ static int nlm4_xdr_dec_res(struct rpc_rqst *req, __be32 *p, | ||||||
| #define PROC(proc, argtype, restype)					\ | #define PROC(proc, argtype, restype)					\ | ||||||
| [NLMPROC_##proc] = {							\ | [NLMPROC_##proc] = {							\ | ||||||
| 	.p_proc      = NLMPROC_##proc,					\ | 	.p_proc      = NLMPROC_##proc,					\ | ||||||
| 	.p_encode    = (kxdrproc_t)nlm4_xdr_enc_##argtype,		\ | 	.p_encode    = (kxdreproc_t)nlm4_xdr_enc_##argtype,		\ | ||||||
| 	.p_decode    = (kxdrproc_t)nlm4_xdr_dec_##restype,		\ | 	.p_decode    = (kxdrproc_t)nlm4_xdr_dec_##restype,		\ | ||||||
| 	.p_arglen    = NLM4_##argtype##_sz,				\ | 	.p_arglen    = NLM4_##argtype##_sz,				\ | ||||||
| 	.p_replen    = NLM4_##restype##_sz,				\ | 	.p_replen    = NLM4_##restype##_sz,				\ | ||||||
|  |  | ||||||
|  | @ -378,17 +378,15 @@ static void encode_nlm_lock(struct xdr_stream *xdr, | ||||||
|  *		struct nlm_lock alock; |  *		struct nlm_lock alock; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nlm_xdr_enc_testargs(struct rpc_rqst *req, __be32 *p, | static void nlm_xdr_enc_testargs(struct rpc_rqst *req, | ||||||
| 				const struct nlm_args *args) | 				 struct xdr_stream *xdr, | ||||||
|  | 				 const struct nlm_args *args) | ||||||
| { | { | ||||||
| 	const struct nlm_lock *lock = &args->lock; | 	const struct nlm_lock *lock = &args->lock; | ||||||
| 	struct xdr_stream xdr; |  | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_cookie(xdr, &args->cookie); | ||||||
| 	encode_cookie(&xdr, &args->cookie); | 	encode_bool(xdr, lock->fl.fl_type == F_WRLCK); | ||||||
| 	encode_bool(&xdr, lock->fl.fl_type == F_WRLCK); | 	encode_nlm_lock(xdr, lock); | ||||||
| 	encode_nlm_lock(&xdr, lock); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -401,20 +399,18 @@ static int nlm_xdr_enc_testargs(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		int state; |  *		int state; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nlm_xdr_enc_lockargs(struct rpc_rqst *req, __be32 *p, | static void nlm_xdr_enc_lockargs(struct rpc_rqst *req, | ||||||
| 				const struct nlm_args *args) | 				 struct xdr_stream *xdr, | ||||||
|  | 				 const struct nlm_args *args) | ||||||
| { | { | ||||||
| 	const struct nlm_lock *lock = &args->lock; | 	const struct nlm_lock *lock = &args->lock; | ||||||
| 	struct xdr_stream xdr; |  | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_cookie(xdr, &args->cookie); | ||||||
| 	encode_cookie(&xdr, &args->cookie); | 	encode_bool(xdr, args->block); | ||||||
| 	encode_bool(&xdr, args->block); | 	encode_bool(xdr, lock->fl.fl_type == F_WRLCK); | ||||||
| 	encode_bool(&xdr, lock->fl.fl_type == F_WRLCK); | 	encode_nlm_lock(xdr, lock); | ||||||
| 	encode_nlm_lock(&xdr, lock); | 	encode_bool(xdr, args->reclaim); | ||||||
| 	encode_bool(&xdr, args->reclaim); | 	encode_int32(xdr, args->state); | ||||||
| 	encode_int32(&xdr, args->state); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -425,18 +421,16 @@ static int nlm_xdr_enc_lockargs(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		struct nlm_lock alock; |  *		struct nlm_lock alock; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nlm_xdr_enc_cancargs(struct rpc_rqst *req, __be32 *p, | static void nlm_xdr_enc_cancargs(struct rpc_rqst *req, | ||||||
| 				const struct nlm_args *args) | 				 struct xdr_stream *xdr, | ||||||
|  | 				 const struct nlm_args *args) | ||||||
| { | { | ||||||
| 	const struct nlm_lock *lock = &args->lock; | 	const struct nlm_lock *lock = &args->lock; | ||||||
| 	struct xdr_stream xdr; |  | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_cookie(xdr, &args->cookie); | ||||||
| 	encode_cookie(&xdr, &args->cookie); | 	encode_bool(xdr, args->block); | ||||||
| 	encode_bool(&xdr, args->block); | 	encode_bool(xdr, lock->fl.fl_type == F_WRLCK); | ||||||
| 	encode_bool(&xdr, lock->fl.fl_type == F_WRLCK); | 	encode_nlm_lock(xdr, lock); | ||||||
| 	encode_nlm_lock(&xdr, lock); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -445,16 +439,14 @@ static int nlm_xdr_enc_cancargs(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		struct nlm_lock alock; |  *		struct nlm_lock alock; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nlm_xdr_enc_unlockargs(struct rpc_rqst *req, __be32 *p, | static void nlm_xdr_enc_unlockargs(struct rpc_rqst *req, | ||||||
| 				  const struct nlm_args *args) | 				   struct xdr_stream *xdr, | ||||||
|  | 				   const struct nlm_args *args) | ||||||
| { | { | ||||||
| 	const struct nlm_lock *lock = &args->lock; | 	const struct nlm_lock *lock = &args->lock; | ||||||
| 	struct xdr_stream xdr; |  | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_cookie(xdr, &args->cookie); | ||||||
| 	encode_cookie(&xdr, &args->cookie); | 	encode_nlm_lock(xdr, lock); | ||||||
| 	encode_nlm_lock(&xdr, lock); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -463,15 +455,12 @@ static int nlm_xdr_enc_unlockargs(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		nlm_stat stat; |  *		nlm_stat stat; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nlm_xdr_enc_res(struct rpc_rqst *req, __be32 *p, | static void nlm_xdr_enc_res(struct rpc_rqst *req, | ||||||
| 			   const struct nlm_res *result) | 			    struct xdr_stream *xdr, | ||||||
|  | 			    const struct nlm_res *result) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_cookie(xdr, &result->cookie); | ||||||
| 
 | 	encode_nlm_stat(xdr, result->status); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_cookie(&xdr, &result->cookie); |  | ||||||
| 	encode_nlm_stat(&xdr, result->status); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -494,16 +483,13 @@ static void encode_nlm_testrply(struct xdr_stream *xdr, | ||||||
| 		encode_nlm_holder(xdr, result); | 		encode_nlm_holder(xdr, result); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nlm_xdr_enc_testres(struct rpc_rqst *req, __be32 *p, | static void nlm_xdr_enc_testres(struct rpc_rqst *req, | ||||||
| 			       const struct nlm_res *result) | 				struct xdr_stream *xdr, | ||||||
|  | 				const struct nlm_res *result) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_cookie(xdr, &result->cookie); | ||||||
| 
 | 	encode_nlm_stat(xdr, result->status); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_nlm_testrply(xdr, result); | ||||||
| 	encode_cookie(&xdr, &result->cookie); |  | ||||||
| 	encode_nlm_stat(&xdr, result->status); |  | ||||||
| 	encode_nlm_testrply(&xdr, result); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -586,7 +572,7 @@ static int nlm_xdr_dec_res(struct rpc_rqst *req, __be32 *p, | ||||||
| #define PROC(proc, argtype, restype)	\ | #define PROC(proc, argtype, restype)	\ | ||||||
| [NLMPROC_##proc] = {							\ | [NLMPROC_##proc] = {							\ | ||||||
| 	.p_proc      = NLMPROC_##proc,					\ | 	.p_proc      = NLMPROC_##proc,					\ | ||||||
| 	.p_encode    = (kxdrproc_t)nlm_xdr_enc_##argtype,		\ | 	.p_encode    = (kxdreproc_t)nlm_xdr_enc_##argtype,		\ | ||||||
| 	.p_decode    = (kxdrproc_t)nlm_xdr_dec_##restype,		\ | 	.p_decode    = (kxdrproc_t)nlm_xdr_dec_##restype,		\ | ||||||
| 	.p_arglen    = NLM_##argtype##_sz,				\ | 	.p_arglen    = NLM_##argtype##_sz,				\ | ||||||
| 	.p_replen    = NLM_##restype##_sz,				\ | 	.p_replen    = NLM_##restype##_sz,				\ | ||||||
|  |  | ||||||
|  | @ -459,25 +459,17 @@ static void encode_priv(struct xdr_stream *xdr, const struct nsm_args *argp) | ||||||
| 	xdr_encode_opaque_fixed(p, argp->priv->data, SM_PRIV_SIZE); | 	xdr_encode_opaque_fixed(p, argp->priv->data, SM_PRIV_SIZE); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int xdr_enc_mon(struct rpc_rqst *req, __be32 *p, | static void nsm_xdr_enc_mon(struct rpc_rqst *req, struct xdr_stream *xdr, | ||||||
| 		       const struct nsm_args *argp) | 			    const struct nsm_args *argp) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_mon_id(xdr, argp); | ||||||
| 
 | 	encode_priv(xdr, argp); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_mon_id(&xdr, argp); |  | ||||||
| 	encode_priv(&xdr, argp); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int xdr_enc_unmon(struct rpc_rqst *req, __be32 *p, | static void nsm_xdr_enc_unmon(struct rpc_rqst *req, struct xdr_stream *xdr, | ||||||
| 			 const struct nsm_args *argp) | 			      const struct nsm_args *argp) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_mon_id(xdr, argp); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_mon_id(&xdr, argp); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int xdr_dec_stat_res(struct rpc_rqst *rqstp, __be32 *p, | static int xdr_dec_stat_res(struct rpc_rqst *rqstp, __be32 *p, | ||||||
|  | @ -524,7 +516,7 @@ static int xdr_dec_stat(struct rpc_rqst *rqstp, __be32 *p, | ||||||
| static struct rpc_procinfo	nsm_procedures[] = { | static struct rpc_procinfo	nsm_procedures[] = { | ||||||
| [NSMPROC_MON] = { | [NSMPROC_MON] = { | ||||||
| 		.p_proc		= NSMPROC_MON, | 		.p_proc		= NSMPROC_MON, | ||||||
| 		.p_encode	= (kxdrproc_t)xdr_enc_mon, | 		.p_encode	= (kxdreproc_t)nsm_xdr_enc_mon, | ||||||
| 		.p_decode	= (kxdrproc_t)xdr_dec_stat_res, | 		.p_decode	= (kxdrproc_t)xdr_dec_stat_res, | ||||||
| 		.p_arglen	= SM_mon_sz, | 		.p_arglen	= SM_mon_sz, | ||||||
| 		.p_replen	= SM_monres_sz, | 		.p_replen	= SM_monres_sz, | ||||||
|  | @ -533,7 +525,7 @@ static struct rpc_procinfo	nsm_procedures[] = { | ||||||
| 	}, | 	}, | ||||||
| [NSMPROC_UNMON] = { | [NSMPROC_UNMON] = { | ||||||
| 		.p_proc		= NSMPROC_UNMON, | 		.p_proc		= NSMPROC_UNMON, | ||||||
| 		.p_encode	= (kxdrproc_t)xdr_enc_unmon, | 		.p_encode	= (kxdreproc_t)nsm_xdr_enc_unmon, | ||||||
| 		.p_decode	= (kxdrproc_t)xdr_dec_stat, | 		.p_decode	= (kxdrproc_t)xdr_dec_stat, | ||||||
| 		.p_arglen	= SM_mon_id_sz, | 		.p_arglen	= SM_mon_id_sz, | ||||||
| 		.p_replen	= SM_unmonres_sz, | 		.p_replen	= SM_unmonres_sz, | ||||||
|  |  | ||||||
|  | @ -288,14 +288,10 @@ static void encode_mntdirpath(struct xdr_stream *xdr, const char *pathname) | ||||||
| 	xdr_encode_opaque(p, pathname, pathname_len); | 	xdr_encode_opaque(p, pathname, pathname_len); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int mnt_enc_dirpath(struct rpc_rqst *req, __be32 *p, | static void mnt_xdr_enc_dirpath(struct rpc_rqst *req, struct xdr_stream *xdr, | ||||||
| 			   const char *dirpath) | 				const char *dirpath) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_mntdirpath(xdr, dirpath); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_mntdirpath(&xdr, dirpath); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -460,7 +456,7 @@ static int mnt_dec_mountres3(struct rpc_rqst *req, __be32 *p, | ||||||
| static struct rpc_procinfo mnt_procedures[] = { | static struct rpc_procinfo mnt_procedures[] = { | ||||||
| 	[MOUNTPROC_MNT] = { | 	[MOUNTPROC_MNT] = { | ||||||
| 		.p_proc		= MOUNTPROC_MNT, | 		.p_proc		= MOUNTPROC_MNT, | ||||||
| 		.p_encode	= (kxdrproc_t)mnt_enc_dirpath, | 		.p_encode	= (kxdreproc_t)mnt_xdr_enc_dirpath, | ||||||
| 		.p_decode	= (kxdrproc_t)mnt_dec_mountres, | 		.p_decode	= (kxdrproc_t)mnt_dec_mountres, | ||||||
| 		.p_arglen	= MNT_enc_dirpath_sz, | 		.p_arglen	= MNT_enc_dirpath_sz, | ||||||
| 		.p_replen	= MNT_dec_mountres_sz, | 		.p_replen	= MNT_dec_mountres_sz, | ||||||
|  | @ -469,7 +465,7 @@ static struct rpc_procinfo mnt_procedures[] = { | ||||||
| 	}, | 	}, | ||||||
| 	[MOUNTPROC_UMNT] = { | 	[MOUNTPROC_UMNT] = { | ||||||
| 		.p_proc		= MOUNTPROC_UMNT, | 		.p_proc		= MOUNTPROC_UMNT, | ||||||
| 		.p_encode	= (kxdrproc_t)mnt_enc_dirpath, | 		.p_encode	= (kxdreproc_t)mnt_xdr_enc_dirpath, | ||||||
| 		.p_arglen	= MNT_enc_dirpath_sz, | 		.p_arglen	= MNT_enc_dirpath_sz, | ||||||
| 		.p_statidx	= MOUNTPROC_UMNT, | 		.p_statidx	= MOUNTPROC_UMNT, | ||||||
| 		.p_name		= "UMOUNT", | 		.p_name		= "UMOUNT", | ||||||
|  | @ -479,7 +475,7 @@ static struct rpc_procinfo mnt_procedures[] = { | ||||||
| static struct rpc_procinfo mnt3_procedures[] = { | static struct rpc_procinfo mnt3_procedures[] = { | ||||||
| 	[MOUNTPROC3_MNT] = { | 	[MOUNTPROC3_MNT] = { | ||||||
| 		.p_proc		= MOUNTPROC3_MNT, | 		.p_proc		= MOUNTPROC3_MNT, | ||||||
| 		.p_encode	= (kxdrproc_t)mnt_enc_dirpath, | 		.p_encode	= (kxdreproc_t)mnt_xdr_enc_dirpath, | ||||||
| 		.p_decode	= (kxdrproc_t)mnt_dec_mountres3, | 		.p_decode	= (kxdrproc_t)mnt_dec_mountres3, | ||||||
| 		.p_arglen	= MNT_enc_dirpath_sz, | 		.p_arglen	= MNT_enc_dirpath_sz, | ||||||
| 		.p_replen	= MNT_dec_mountres3_sz, | 		.p_replen	= MNT_dec_mountres3_sz, | ||||||
|  | @ -488,7 +484,7 @@ static struct rpc_procinfo mnt3_procedures[] = { | ||||||
| 	}, | 	}, | ||||||
| 	[MOUNTPROC3_UMNT] = { | 	[MOUNTPROC3_UMNT] = { | ||||||
| 		.p_proc		= MOUNTPROC3_UMNT, | 		.p_proc		= MOUNTPROC3_UMNT, | ||||||
| 		.p_encode	= (kxdrproc_t)mnt_enc_dirpath, | 		.p_encode	= (kxdreproc_t)mnt_xdr_enc_dirpath, | ||||||
| 		.p_arglen	= MNT_enc_dirpath_sz, | 		.p_arglen	= MNT_enc_dirpath_sz, | ||||||
| 		.p_statidx	= MOUNTPROC3_UMNT, | 		.p_statidx	= MOUNTPROC3_UMNT, | ||||||
| 		.p_name		= "UMOUNT", | 		.p_name		= "UMOUNT", | ||||||
|  |  | ||||||
							
								
								
									
										147
									
								
								fs/nfs/nfs2xdr.c
									
									
									
									
									
								
							
							
						
						
									
										147
									
								
								fs/nfs/nfs2xdr.c
									
									
									
									
									
								
							|  | @ -558,14 +558,11 @@ static int decode_diropres(struct xdr_stream *xdr, struct nfs_diropok *result) | ||||||
|  * "NFS: Network File System Protocol Specification". |  * "NFS: Network File System Protocol Specification". | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| static int nfs2_xdr_enc_fhandle(struct rpc_rqst *req, __be32 *p, | static void nfs2_xdr_enc_fhandle(struct rpc_rqst *req, | ||||||
| 				const struct nfs_fh *fh) | 				 struct xdr_stream *xdr, | ||||||
|  | 				 const struct nfs_fh *fh) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_fhandle(xdr, fh); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_fhandle(&xdr, fh); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -576,37 +573,28 @@ static int nfs2_xdr_enc_fhandle(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		sattr attributes; |  *		sattr attributes; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nfs2_xdr_enc_sattrargs(struct rpc_rqst *req, __be32 *p, | static void nfs2_xdr_enc_sattrargs(struct rpc_rqst *req, | ||||||
| 				  const struct nfs_sattrargs *args) | 				   struct xdr_stream *xdr, | ||||||
|  | 				   const struct nfs_sattrargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_fhandle(xdr, args->fh); | ||||||
| 
 | 	encode_sattr(xdr, args->sattr); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_fhandle(&xdr, args->fh); |  | ||||||
| 	encode_sattr(&xdr, args->sattr); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs2_xdr_enc_diropargs(struct rpc_rqst *req, __be32 *p, | static void nfs2_xdr_enc_diropargs(struct rpc_rqst *req, | ||||||
| 				  const struct nfs_diropargs *args) | 				   struct xdr_stream *xdr, | ||||||
|  | 				   const struct nfs_diropargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_diropargs(xdr, args->fh, args->name, args->len); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_diropargs(&xdr, args->fh, args->name, args->len); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs2_xdr_enc_readlinkargs(struct rpc_rqst *req, __be32 *p, | static void nfs2_xdr_enc_readlinkargs(struct rpc_rqst *req, | ||||||
| 				     const struct nfs_readlinkargs *args) | 				      struct xdr_stream *xdr, | ||||||
|  | 				      const struct nfs_readlinkargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_fhandle(xdr, args->fh); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_fhandle(&xdr, args->fh); |  | ||||||
| 	prepare_reply_buffer(req, args->pages, args->pgbase, | 	prepare_reply_buffer(req, args->pages, args->pgbase, | ||||||
| 					args->pglen, NFS_readlinkres_sz); | 					args->pglen, NFS_readlinkres_sz); | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -634,17 +622,14 @@ static void encode_readargs(struct xdr_stream *xdr, | ||||||
| 	*p = cpu_to_be32(count); | 	*p = cpu_to_be32(count); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs2_xdr_enc_readargs(struct rpc_rqst *req, __be32 *p, | static void nfs2_xdr_enc_readargs(struct rpc_rqst *req, | ||||||
| 				 const struct nfs_readargs *args) | 				  struct xdr_stream *xdr, | ||||||
|  | 				  const struct nfs_readargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_readargs(xdr, args); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_readargs(&xdr, args); |  | ||||||
| 	prepare_reply_buffer(req, args->pages, args->pgbase, | 	prepare_reply_buffer(req, args->pages, args->pgbase, | ||||||
| 					args->count, NFS_readres_sz); | 					args->count, NFS_readres_sz); | ||||||
| 	req->rq_rcv_buf.flags |= XDRBUF_READ; | 	req->rq_rcv_buf.flags |= XDRBUF_READ; | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -677,15 +662,12 @@ static void encode_writeargs(struct xdr_stream *xdr, | ||||||
| 	xdr_write_pages(xdr, args->pages, args->pgbase, count); | 	xdr_write_pages(xdr, args->pages, args->pgbase, count); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs2_xdr_enc_writeargs(struct rpc_rqst *req, __be32 *p, | static void nfs2_xdr_enc_writeargs(struct rpc_rqst *req, | ||||||
| 				  const struct nfs_writeargs *args) | 				   struct xdr_stream *xdr, | ||||||
|  | 				   const struct nfs_writeargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_writeargs(xdr, args); | ||||||
| 
 | 	xdr->buf->flags |= XDRBUF_WRITE; | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_writeargs(&xdr, args); |  | ||||||
| 	xdr.buf->flags |= XDRBUF_WRITE; |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -696,25 +678,19 @@ static int nfs2_xdr_enc_writeargs(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		sattr attributes; |  *		sattr attributes; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nfs2_xdr_enc_createargs(struct rpc_rqst *req, __be32 *p, | static void nfs2_xdr_enc_createargs(struct rpc_rqst *req, | ||||||
| 				   const struct nfs_createargs *args) | 				    struct xdr_stream *xdr, | ||||||
|  | 				    const struct nfs_createargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_diropargs(xdr, args->fh, args->name, args->len); | ||||||
| 
 | 	encode_sattr(xdr, args->sattr); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_diropargs(&xdr, args->fh, args->name, args->len); |  | ||||||
| 	encode_sattr(&xdr, args->sattr); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs2_xdr_enc_removeargs(struct rpc_rqst *req, __be32 *p, | static void nfs2_xdr_enc_removeargs(struct rpc_rqst *req, | ||||||
| 				   const struct nfs_removeargs *args) | 				    struct xdr_stream *xdr, | ||||||
|  | 				    const struct nfs_removeargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_diropargs(xdr, args->fh, args->name.name, args->name.len); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_diropargs(&xdr, args->fh, args->name.name, args->name.len); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -725,17 +701,15 @@ static int nfs2_xdr_enc_removeargs(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		diropargs to; |  *		diropargs to; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nfs2_xdr_enc_renameargs(struct rpc_rqst *req, __be32 *p, | static void nfs2_xdr_enc_renameargs(struct rpc_rqst *req, | ||||||
| 				   const struct nfs_renameargs *args) | 				    struct xdr_stream *xdr, | ||||||
|  | 				    const struct nfs_renameargs *args) | ||||||
| { | { | ||||||
| 	const struct qstr *old = args->old_name; | 	const struct qstr *old = args->old_name; | ||||||
| 	const struct qstr *new = args->new_name; | 	const struct qstr *new = args->new_name; | ||||||
| 	struct xdr_stream xdr; |  | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_diropargs(xdr, args->old_dir, old->name, old->len); | ||||||
| 	encode_diropargs(&xdr, args->old_dir, old->name, old->len); | 	encode_diropargs(xdr, args->new_dir, new->name, new->len); | ||||||
| 	encode_diropargs(&xdr, args->new_dir, new->name, new->len); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -746,15 +720,12 @@ static int nfs2_xdr_enc_renameargs(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		diropargs to; |  *		diropargs to; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nfs2_xdr_enc_linkargs(struct rpc_rqst *req, __be32 *p, | static void nfs2_xdr_enc_linkargs(struct rpc_rqst *req, | ||||||
| 				 const struct nfs_linkargs *args) | 				  struct xdr_stream *xdr, | ||||||
|  | 				  const struct nfs_linkargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_fhandle(xdr, args->fromfh); | ||||||
| 
 | 	encode_diropargs(xdr, args->tofh, args->toname, args->tolen); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_fhandle(&xdr, args->fromfh); |  | ||||||
| 	encode_diropargs(&xdr, args->tofh, args->toname, args->tolen); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -766,16 +737,13 @@ static int nfs2_xdr_enc_linkargs(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		sattr attributes; |  *		sattr attributes; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nfs2_xdr_enc_symlinkargs(struct rpc_rqst *req, __be32 *p, | static void nfs2_xdr_enc_symlinkargs(struct rpc_rqst *req, | ||||||
| 				    const struct nfs_symlinkargs *args) | 				     struct xdr_stream *xdr, | ||||||
|  | 				     const struct nfs_symlinkargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_diropargs(xdr, args->fromfh, args->fromname, args->fromlen); | ||||||
| 
 | 	encode_path(xdr, args->pages, args->pathlen); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_sattr(xdr, args->sattr); | ||||||
| 	encode_diropargs(&xdr, args->fromfh, args->fromname, args->fromlen); |  | ||||||
| 	encode_path(&xdr, args->pages, args->pathlen); |  | ||||||
| 	encode_sattr(&xdr, args->sattr); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -799,16 +767,13 @@ static void encode_readdirargs(struct xdr_stream *xdr, | ||||||
| 	*p = cpu_to_be32(args->count); | 	*p = cpu_to_be32(args->count); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs2_xdr_enc_readdirargs(struct rpc_rqst *req, __be32 *p, | static void nfs2_xdr_enc_readdirargs(struct rpc_rqst *req, | ||||||
| 				    const struct nfs_readdirargs *args) | 				     struct xdr_stream *xdr, | ||||||
|  | 				     const struct nfs_readdirargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_readdirargs(xdr, args); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_readdirargs(&xdr, args); |  | ||||||
| 	prepare_reply_buffer(req, args->pages, 0, | 	prepare_reply_buffer(req, args->pages, 0, | ||||||
| 					args->count, NFS_readdirres_sz); | 					args->count, NFS_readdirres_sz); | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1184,7 +1149,7 @@ int nfs_stat_to_errno(enum nfs_stat status) | ||||||
| #define PROC(proc, argtype, restype, timer)				\ | #define PROC(proc, argtype, restype, timer)				\ | ||||||
| [NFSPROC_##proc] = {							\ | [NFSPROC_##proc] = {							\ | ||||||
| 	.p_proc	    =  NFSPROC_##proc,					\ | 	.p_proc	    =  NFSPROC_##proc,					\ | ||||||
| 	.p_encode   =  (kxdrproc_t)nfs2_xdr_enc_##argtype,		\ | 	.p_encode   =  (kxdreproc_t)nfs2_xdr_enc_##argtype,		\ | ||||||
| 	.p_decode   =  (kxdrproc_t)nfs2_xdr_dec_##restype,		\ | 	.p_decode   =  (kxdrproc_t)nfs2_xdr_dec_##restype,		\ | ||||||
| 	.p_arglen   =  NFS_##argtype##_sz,				\ | 	.p_arglen   =  NFS_##argtype##_sz,				\ | ||||||
| 	.p_replen   =  NFS_##restype##_sz,				\ | 	.p_replen   =  NFS_##restype##_sz,				\ | ||||||
|  |  | ||||||
							
								
								
									
										241
									
								
								fs/nfs/nfs3xdr.c
									
									
									
									
									
								
							
							
						
						
									
										241
									
								
								fs/nfs/nfs3xdr.c
									
									
									
									
									
								
							|  | @ -835,14 +835,11 @@ static void encode_diropargs3(struct xdr_stream *xdr, const struct nfs_fh *fh, | ||||||
|  *		nfs_fh3  object; |  *		nfs_fh3  object; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nfs3_xdr_enc_getattr3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_getattr3args(struct rpc_rqst *req, | ||||||
| 				     const struct nfs_fh *fh) | 				      struct xdr_stream *xdr, | ||||||
|  | 				      const struct nfs_fh *fh) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_nfs_fh3(xdr, fh); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_nfs_fh3(&xdr, fh); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -876,16 +873,13 @@ static void encode_sattrguard3(struct xdr_stream *xdr, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs3_xdr_enc_setattr3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_setattr3args(struct rpc_rqst *req, | ||||||
| 				     const struct nfs3_sattrargs *args) | 				      struct xdr_stream *xdr, | ||||||
|  | 				      const struct nfs3_sattrargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_nfs_fh3(xdr, args->fh); | ||||||
| 
 | 	encode_sattr3(xdr, args->sattr); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_sattrguard3(xdr, args); | ||||||
| 	encode_nfs_fh3(&xdr, args->fh); |  | ||||||
| 	encode_sattr3(&xdr, args->sattr); |  | ||||||
| 	encode_sattrguard3(&xdr, args); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -895,14 +889,11 @@ static int nfs3_xdr_enc_setattr3args(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		diropargs3  what; |  *		diropargs3  what; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nfs3_xdr_enc_lookup3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_lookup3args(struct rpc_rqst *req, | ||||||
| 				    const struct nfs3_diropargs *args) | 				     struct xdr_stream *xdr, | ||||||
|  | 				     const struct nfs3_diropargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_diropargs3(xdr, args->fh, args->name, args->len); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_diropargs3(&xdr, args->fh, args->name, args->len); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -920,14 +911,11 @@ static void encode_access3args(struct xdr_stream *xdr, | ||||||
| 	encode_uint32(xdr, args->access); | 	encode_uint32(xdr, args->access); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs3_xdr_enc_access3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_access3args(struct rpc_rqst *req, | ||||||
| 				    const struct nfs3_accessargs *args) | 				     struct xdr_stream *xdr, | ||||||
|  | 				     const struct nfs3_accessargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_access3args(xdr, args); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_access3args(&xdr, args); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -937,16 +925,13 @@ static int nfs3_xdr_enc_access3args(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		nfs_fh3	symlink; |  *		nfs_fh3	symlink; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nfs3_xdr_enc_readlink3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_readlink3args(struct rpc_rqst *req, | ||||||
| 				      const struct nfs3_readlinkargs *args) | 				       struct xdr_stream *xdr, | ||||||
|  | 				       const struct nfs3_readlinkargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_nfs_fh3(xdr, args->fh); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_nfs_fh3(&xdr, args->fh); |  | ||||||
| 	prepare_reply_buffer(req, args->pages, args->pgbase, | 	prepare_reply_buffer(req, args->pages, args->pgbase, | ||||||
| 					args->pglen, NFS3_readlinkres_sz); | 					args->pglen, NFS3_readlinkres_sz); | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -970,17 +955,14 @@ static void encode_read3args(struct xdr_stream *xdr, | ||||||
| 	*p = cpu_to_be32(args->count); | 	*p = cpu_to_be32(args->count); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs3_xdr_enc_read3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_read3args(struct rpc_rqst *req, | ||||||
| 				  const struct nfs_readargs *args) | 				   struct xdr_stream *xdr, | ||||||
|  | 				   const struct nfs_readargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_read3args(xdr, args); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_read3args(&xdr, args); |  | ||||||
| 	prepare_reply_buffer(req, args->pages, args->pgbase, | 	prepare_reply_buffer(req, args->pages, args->pgbase, | ||||||
| 					args->count, NFS3_readres_sz); | 					args->count, NFS3_readres_sz); | ||||||
| 	req->rq_rcv_buf.flags |= XDRBUF_READ; | 	req->rq_rcv_buf.flags |= XDRBUF_READ; | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1015,15 +997,12 @@ static void encode_write3args(struct xdr_stream *xdr, | ||||||
| 	xdr_write_pages(xdr, args->pages, args->pgbase, args->count); | 	xdr_write_pages(xdr, args->pages, args->pgbase, args->count); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs3_xdr_enc_write3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_write3args(struct rpc_rqst *req, | ||||||
| 				   const struct nfs_writeargs *args) | 				    struct xdr_stream *xdr, | ||||||
|  | 				    const struct nfs_writeargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_write3args(xdr, args); | ||||||
| 
 | 	xdr->buf->flags |= XDRBUF_WRITE; | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_write3args(&xdr, args); |  | ||||||
| 	xdr.buf->flags |= XDRBUF_WRITE; |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1065,15 +1044,12 @@ static void encode_createhow3(struct xdr_stream *xdr, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs3_xdr_enc_create3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_create3args(struct rpc_rqst *req, | ||||||
| 				    const struct nfs3_createargs *args) | 				     struct xdr_stream *xdr, | ||||||
|  | 				     const struct nfs3_createargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_diropargs3(xdr, args->fh, args->name, args->len); | ||||||
| 
 | 	encode_createhow3(xdr, args); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_diropargs3(&xdr, args->fh, args->name, args->len); |  | ||||||
| 	encode_createhow3(&xdr, args); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1084,15 +1060,12 @@ static int nfs3_xdr_enc_create3args(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		sattr3		attributes; |  *		sattr3		attributes; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nfs3_xdr_enc_mkdir3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_mkdir3args(struct rpc_rqst *req, | ||||||
| 				   const struct nfs3_mkdirargs *args) | 				    struct xdr_stream *xdr, | ||||||
|  | 				    const struct nfs3_mkdirargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_diropargs3(xdr, args->fh, args->name, args->len); | ||||||
| 
 | 	encode_sattr3(xdr, args->sattr); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_diropargs3(&xdr, args->fh, args->name, args->len); |  | ||||||
| 	encode_sattr3(&xdr, args->sattr); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1115,15 +1088,12 @@ static void encode_symlinkdata3(struct xdr_stream *xdr, | ||||||
| 	encode_nfspath3(xdr, args->pages, args->pathlen); | 	encode_nfspath3(xdr, args->pages, args->pathlen); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs3_xdr_enc_symlink3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_symlink3args(struct rpc_rqst *req, | ||||||
| 				     const struct nfs3_symlinkargs *args) | 				      struct xdr_stream *xdr, | ||||||
|  | 				      const struct nfs3_symlinkargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_diropargs3(xdr, args->fromfh, args->fromname, args->fromlen); | ||||||
| 
 | 	encode_symlinkdata3(xdr, args); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_diropargs3(&xdr, args->fromfh, args->fromname, args->fromlen); |  | ||||||
| 	encode_symlinkdata3(&xdr, args); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1178,15 +1148,12 @@ static void encode_mknoddata3(struct xdr_stream *xdr, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs3_xdr_enc_mknod3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_mknod3args(struct rpc_rqst *req, | ||||||
| 				   const struct nfs3_mknodargs *args) | 				    struct xdr_stream *xdr, | ||||||
|  | 				    const struct nfs3_mknodargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_diropargs3(xdr, args->fh, args->name, args->len); | ||||||
| 
 | 	encode_mknoddata3(xdr, args); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_diropargs3(&xdr, args->fh, args->name, args->len); |  | ||||||
| 	encode_mknoddata3(&xdr, args); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1196,14 +1163,11 @@ static int nfs3_xdr_enc_mknod3args(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		diropargs3  object; |  *		diropargs3  object; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nfs3_xdr_enc_remove3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_remove3args(struct rpc_rqst *req, | ||||||
| 				    const struct nfs_removeargs *args) | 				     struct xdr_stream *xdr, | ||||||
|  | 				     const struct nfs_removeargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_diropargs3(xdr, args->fh, args->name.name, args->name.len); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_diropargs3(&xdr, args->fh, args->name.name, args->name.len); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1214,17 +1178,15 @@ static int nfs3_xdr_enc_remove3args(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		diropargs3	to; |  *		diropargs3	to; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nfs3_xdr_enc_rename3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_rename3args(struct rpc_rqst *req, | ||||||
| 				    const struct nfs_renameargs *args) | 				     struct xdr_stream *xdr, | ||||||
|  | 				     const struct nfs_renameargs *args) | ||||||
| { | { | ||||||
| 	const struct qstr *old = args->old_name; | 	const struct qstr *old = args->old_name; | ||||||
| 	const struct qstr *new = args->new_name; | 	const struct qstr *new = args->new_name; | ||||||
| 	struct xdr_stream xdr; |  | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_diropargs3(xdr, args->old_dir, old->name, old->len); | ||||||
| 	encode_diropargs3(&xdr, args->old_dir, old->name, old->len); | 	encode_diropargs3(xdr, args->new_dir, new->name, new->len); | ||||||
| 	encode_diropargs3(&xdr, args->new_dir, new->name, new->len); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1235,15 +1197,12 @@ static int nfs3_xdr_enc_rename3args(struct rpc_rqst *req, __be32 *p, | ||||||
|  *		diropargs3	link; |  *		diropargs3	link; | ||||||
|  *	}; |  *	}; | ||||||
|  */ |  */ | ||||||
| static int nfs3_xdr_enc_link3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_link3args(struct rpc_rqst *req, | ||||||
| 				  const struct nfs3_linkargs *args) | 				   struct xdr_stream *xdr, | ||||||
|  | 				   const struct nfs3_linkargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_nfs_fh3(xdr, args->fromfh); | ||||||
| 
 | 	encode_diropargs3(xdr, args->tofh, args->toname, args->tolen); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_nfs_fh3(&xdr, args->fromfh); |  | ||||||
| 	encode_diropargs3(&xdr, args->tofh, args->toname, args->tolen); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1269,16 +1228,13 @@ static void encode_readdir3args(struct xdr_stream *xdr, | ||||||
| 	*p = cpu_to_be32(args->count); | 	*p = cpu_to_be32(args->count); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs3_xdr_enc_readdir3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_readdir3args(struct rpc_rqst *req, | ||||||
| 				     const struct nfs3_readdirargs *args) | 				      struct xdr_stream *xdr, | ||||||
|  | 				      const struct nfs3_readdirargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_readdir3args(xdr, args); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_readdir3args(&xdr, args); |  | ||||||
| 	prepare_reply_buffer(req, args->pages, 0, | 	prepare_reply_buffer(req, args->pages, 0, | ||||||
| 				args->count, NFS3_readdirres_sz); | 				args->count, NFS3_readdirres_sz); | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1312,16 +1268,13 @@ static void encode_readdirplus3args(struct xdr_stream *xdr, | ||||||
| 	*p = cpu_to_be32(args->count); | 	*p = cpu_to_be32(args->count); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs3_xdr_enc_readdirplus3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_readdirplus3args(struct rpc_rqst *req, | ||||||
| 					 const struct nfs3_readdirargs *args) | 					  struct xdr_stream *xdr, | ||||||
|  | 					  const struct nfs3_readdirargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_readdirplus3args(xdr, args); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_readdirplus3args(&xdr, args); |  | ||||||
| 	prepare_reply_buffer(req, args->pages, 0, | 	prepare_reply_buffer(req, args->pages, 0, | ||||||
| 				args->count, NFS3_readdirres_sz); | 				args->count, NFS3_readdirres_sz); | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -1345,57 +1298,49 @@ static void encode_commit3args(struct xdr_stream *xdr, | ||||||
| 	*p = cpu_to_be32(args->count); | 	*p = cpu_to_be32(args->count); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs3_xdr_enc_commit3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_commit3args(struct rpc_rqst *req, | ||||||
| 				    const struct nfs_writeargs *args) | 				     struct xdr_stream *xdr, | ||||||
|  | 				     const struct nfs_writeargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_commit3args(xdr, args); | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_commit3args(&xdr, args); |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_NFS_V3_ACL | #ifdef CONFIG_NFS_V3_ACL | ||||||
| 
 | 
 | ||||||
| static int nfs3_xdr_enc_getacl3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_getacl3args(struct rpc_rqst *req, | ||||||
| 				    const struct nfs3_getaclargs *args) | 				     struct xdr_stream *xdr, | ||||||
|  | 				     const struct nfs3_getaclargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; | 	encode_nfs_fh3(xdr, args->fh); | ||||||
| 
 | 	encode_uint32(xdr, args->mask); | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); |  | ||||||
| 	encode_nfs_fh3(&xdr, args->fh); |  | ||||||
| 	encode_uint32(&xdr, args->mask); |  | ||||||
| 	if (args->mask & (NFS_ACL | NFS_DFACL)) | 	if (args->mask & (NFS_ACL | NFS_DFACL)) | ||||||
| 		prepare_reply_buffer(req, args->pages, 0, | 		prepare_reply_buffer(req, args->pages, 0, | ||||||
| 					NFSACL_MAXPAGES << PAGE_SHIFT, | 					NFSACL_MAXPAGES << PAGE_SHIFT, | ||||||
| 					ACL3_getaclres_sz); | 					ACL3_getaclres_sz); | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int nfs3_xdr_enc_setacl3args(struct rpc_rqst *req, __be32 *p, | static void nfs3_xdr_enc_setacl3args(struct rpc_rqst *req, | ||||||
| 				    const struct nfs3_setaclargs *args) | 				     struct xdr_stream *xdr, | ||||||
|  | 				     const struct nfs3_setaclargs *args) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; |  | ||||||
| 	unsigned int base; | 	unsigned int base; | ||||||
| 	int error; | 	int error; | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_nfs_fh3(xdr, NFS_FH(args->inode)); | ||||||
| 	encode_nfs_fh3(&xdr, NFS_FH(args->inode)); | 	encode_uint32(xdr, args->mask); | ||||||
| 	encode_uint32(&xdr, args->mask); |  | ||||||
| 	if (args->npages != 0) | 	if (args->npages != 0) | ||||||
| 		xdr_write_pages(&xdr, args->pages, 0, args->len); | 		xdr_write_pages(xdr, args->pages, 0, args->len); | ||||||
| 
 | 
 | ||||||
| 	base = req->rq_slen; | 	base = req->rq_slen; | ||||||
| 	error = nfsacl_encode(xdr.buf, base, args->inode, | 	error = nfsacl_encode(xdr->buf, base, args->inode, | ||||||
| 			    (args->mask & NFS_ACL) ? | 			    (args->mask & NFS_ACL) ? | ||||||
| 			    args->acl_access : NULL, 1, 0); | 			    args->acl_access : NULL, 1, 0); | ||||||
| 	BUG_ON(error < 0); | 	BUG_ON(error < 0); | ||||||
| 	error = nfsacl_encode(xdr.buf, base + error, args->inode, | 	error = nfsacl_encode(xdr->buf, base + error, args->inode, | ||||||
| 			    (args->mask & NFS_DFACL) ? | 			    (args->mask & NFS_DFACL) ? | ||||||
| 			    args->acl_default : NULL, 1, | 			    args->acl_default : NULL, 1, | ||||||
| 			    NFS_ACL_DEFAULT); | 			    NFS_ACL_DEFAULT); | ||||||
| 	BUG_ON(error < 0); | 	BUG_ON(error < 0); | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #endif  /* CONFIG_NFS_V3_ACL */ | #endif  /* CONFIG_NFS_V3_ACL */ | ||||||
|  | @ -2506,7 +2451,7 @@ static int nfs3_xdr_dec_setacl3res(struct rpc_rqst *req, __be32 *p, | ||||||
| #define PROC(proc, argtype, restype, timer)				\ | #define PROC(proc, argtype, restype, timer)				\ | ||||||
| [NFS3PROC_##proc] = {							\ | [NFS3PROC_##proc] = {							\ | ||||||
| 	.p_proc      = NFS3PROC_##proc,					\ | 	.p_proc      = NFS3PROC_##proc,					\ | ||||||
| 	.p_encode    = (kxdrproc_t)nfs3_xdr_enc_##argtype##3args,	\ | 	.p_encode    = (kxdreproc_t)nfs3_xdr_enc_##argtype##3args,	\ | ||||||
| 	.p_decode    = (kxdrproc_t)nfs3_xdr_dec_##restype##3res,	\ | 	.p_decode    = (kxdrproc_t)nfs3_xdr_dec_##restype##3res,	\ | ||||||
| 	.p_arglen    = NFS3_##argtype##args_sz,				\ | 	.p_arglen    = NFS3_##argtype##args_sz,				\ | ||||||
| 	.p_replen    = NFS3_##restype##res_sz,				\ | 	.p_replen    = NFS3_##restype##res_sz,				\ | ||||||
|  | @ -2549,7 +2494,7 @@ struct rpc_version		nfs_version3 = { | ||||||
| static struct rpc_procinfo	nfs3_acl_procedures[] = { | static struct rpc_procinfo	nfs3_acl_procedures[] = { | ||||||
| 	[ACLPROC3_GETACL] = { | 	[ACLPROC3_GETACL] = { | ||||||
| 		.p_proc = ACLPROC3_GETACL, | 		.p_proc = ACLPROC3_GETACL, | ||||||
| 		.p_encode = (kxdrproc_t)nfs3_xdr_enc_getacl3args, | 		.p_encode = (kxdreproc_t)nfs3_xdr_enc_getacl3args, | ||||||
| 		.p_decode = (kxdrproc_t)nfs3_xdr_dec_getacl3res, | 		.p_decode = (kxdrproc_t)nfs3_xdr_dec_getacl3res, | ||||||
| 		.p_arglen = ACL3_getaclargs_sz, | 		.p_arglen = ACL3_getaclargs_sz, | ||||||
| 		.p_replen = ACL3_getaclres_sz, | 		.p_replen = ACL3_getaclres_sz, | ||||||
|  | @ -2558,7 +2503,7 @@ static struct rpc_procinfo	nfs3_acl_procedures[] = { | ||||||
| 	}, | 	}, | ||||||
| 	[ACLPROC3_SETACL] = { | 	[ACLPROC3_SETACL] = { | ||||||
| 		.p_proc = ACLPROC3_SETACL, | 		.p_proc = ACLPROC3_SETACL, | ||||||
| 		.p_encode = (kxdrproc_t)nfs3_xdr_enc_setacl3args, | 		.p_encode = (kxdreproc_t)nfs3_xdr_enc_setacl3args, | ||||||
| 		.p_decode = (kxdrproc_t)nfs3_xdr_dec_setacl3res, | 		.p_decode = (kxdrproc_t)nfs3_xdr_dec_setacl3res, | ||||||
| 		.p_arglen = ACL3_setaclargs_sz, | 		.p_arglen = ACL3_setaclargs_sz, | ||||||
| 		.p_replen = ACL3_setaclres_sz, | 		.p_replen = ACL3_setaclres_sz, | ||||||
|  |  | ||||||
							
								
								
									
										663
									
								
								fs/nfs/nfs4xdr.c
									
									
									
									
									
								
							
							
						
						
									
										663
									
								
								fs/nfs/nfs4xdr.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -499,34 +499,28 @@ static int decode_cb_sequence4res(struct xdr_stream *xdr, | ||||||
| /*
 | /*
 | ||||||
|  * NB: Without this zero space reservation, callbacks over krb5p fail |  * NB: Without this zero space reservation, callbacks over krb5p fail | ||||||
|  */ |  */ | ||||||
| static int nfs4_xdr_enc_cb_null(struct rpc_rqst *req, __be32 *p, void *__unused) | static void nfs4_xdr_enc_cb_null(struct rpc_rqst *req, struct xdr_stream *xdr, | ||||||
|  | 				 void *__unused) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdrs, *xdr = &xdrs; |  | ||||||
| 
 |  | ||||||
| 	xdr_init_encode(&xdrs, &req->rq_snd_buf, p); |  | ||||||
| 	xdr_reserve_space(xdr, 0); | 	xdr_reserve_space(xdr, 0); | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * 20.2. Operation 4: CB_RECALL - Recall a Delegation |  * 20.2. Operation 4: CB_RECALL - Recall a Delegation | ||||||
|  */ |  */ | ||||||
| static int nfs4_xdr_enc_cb_recall(struct rpc_rqst *req, __be32 *p, | static void nfs4_xdr_enc_cb_recall(struct rpc_rqst *req, struct xdr_stream *xdr, | ||||||
| 				  const struct nfsd4_callback *cb) | 				   const struct nfsd4_callback *cb) | ||||||
| { | { | ||||||
| 	struct xdr_stream xdr; |  | ||||||
| 	const struct nfs4_delegation *args = cb->cb_op; | 	const struct nfs4_delegation *args = cb->cb_op; | ||||||
| 	struct nfs4_cb_compound_hdr hdr = { | 	struct nfs4_cb_compound_hdr hdr = { | ||||||
| 		.ident = cb->cb_clp->cl_cb_ident, | 		.ident = cb->cb_clp->cl_cb_ident, | ||||||
| 		.minorversion = cb->cb_minorversion, | 		.minorversion = cb->cb_minorversion, | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	encode_cb_compound4args(xdr, &hdr); | ||||||
| 	encode_cb_compound4args(&xdr, &hdr); | 	encode_cb_sequence4args(xdr, cb, &hdr); | ||||||
| 	encode_cb_sequence4args(&xdr, cb, &hdr); | 	encode_cb_recall4args(xdr, args, &hdr); | ||||||
| 	encode_cb_recall4args(&xdr, args, &hdr); |  | ||||||
| 	encode_cb_nops(&hdr); | 	encode_cb_nops(&hdr); | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -583,7 +577,7 @@ static int nfs4_xdr_dec_cb_recall(struct rpc_rqst *rqstp, __be32 *p, | ||||||
| #define PROC(proc, call, argtype, restype)				\ | #define PROC(proc, call, argtype, restype)				\ | ||||||
| [NFSPROC4_CLNT_##proc] = {						\ | [NFSPROC4_CLNT_##proc] = {						\ | ||||||
| 	.p_proc    = NFSPROC4_CB_##call,				\ | 	.p_proc    = NFSPROC4_CB_##call,				\ | ||||||
| 	.p_encode  = (kxdrproc_t)nfs4_xdr_enc_##argtype,		\ | 	.p_encode  = (kxdreproc_t)nfs4_xdr_enc_##argtype,		\ | ||||||
| 	.p_decode  = (kxdrproc_t)nfs4_xdr_dec_##restype,		\ | 	.p_decode  = (kxdrproc_t)nfs4_xdr_dec_##restype,		\ | ||||||
| 	.p_arglen  = NFS4_enc_##argtype##_sz,				\ | 	.p_arglen  = NFS4_enc_##argtype##_sz,				\ | ||||||
| 	.p_replen  = NFS4_dec_##restype##_sz,				\ | 	.p_replen  = NFS4_dec_##restype##_sz,				\ | ||||||
|  |  | ||||||
|  | @ -110,7 +110,7 @@ struct rpc_credops { | ||||||
| 	__be32 *		(*crmarshal)(struct rpc_task *, __be32 *); | 	__be32 *		(*crmarshal)(struct rpc_task *, __be32 *); | ||||||
| 	int			(*crrefresh)(struct rpc_task *); | 	int			(*crrefresh)(struct rpc_task *); | ||||||
| 	__be32 *		(*crvalidate)(struct rpc_task *, __be32 *); | 	__be32 *		(*crvalidate)(struct rpc_task *, __be32 *); | ||||||
| 	int			(*crwrap_req)(struct rpc_task *, kxdrproc_t, | 	int			(*crwrap_req)(struct rpc_task *, kxdreproc_t, | ||||||
| 						void *, __be32 *, void *); | 						void *, __be32 *, void *); | ||||||
| 	int			(*crunwrap_resp)(struct rpc_task *, kxdrproc_t, | 	int			(*crunwrap_resp)(struct rpc_task *, kxdrproc_t, | ||||||
| 						void *, __be32 *, void *); | 						void *, __be32 *, void *); | ||||||
|  | @ -139,7 +139,7 @@ struct rpc_cred *	rpcauth_generic_bind_cred(struct rpc_task *, struct rpc_cred * | ||||||
| void			put_rpccred(struct rpc_cred *); | void			put_rpccred(struct rpc_cred *); | ||||||
| __be32 *		rpcauth_marshcred(struct rpc_task *, __be32 *); | __be32 *		rpcauth_marshcred(struct rpc_task *, __be32 *); | ||||||
| __be32 *		rpcauth_checkverf(struct rpc_task *, __be32 *); | __be32 *		rpcauth_checkverf(struct rpc_task *, __be32 *); | ||||||
| int			rpcauth_wrap_req(struct rpc_task *task, kxdrproc_t encode, void *rqstp, __be32 *data, void *obj); | int			rpcauth_wrap_req(struct rpc_task *task, kxdreproc_t encode, void *rqstp, __be32 *data, void *obj); | ||||||
| int			rpcauth_unwrap_resp(struct rpc_task *task, kxdrproc_t decode, void *rqstp, __be32 *data, void *obj); | int			rpcauth_unwrap_resp(struct rpc_task *task, kxdrproc_t decode, void *rqstp, __be32 *data, void *obj); | ||||||
| int			rpcauth_refreshcred(struct rpc_task *); | int			rpcauth_refreshcred(struct rpc_task *); | ||||||
| void			rpcauth_invalcred(struct rpc_task *); | void			rpcauth_invalcred(struct rpc_task *); | ||||||
|  |  | ||||||
|  | @ -89,7 +89,7 @@ struct rpc_version { | ||||||
|  */ |  */ | ||||||
| struct rpc_procinfo { | struct rpc_procinfo { | ||||||
| 	u32			p_proc;		/* RPC procedure number */ | 	u32			p_proc;		/* RPC procedure number */ | ||||||
| 	kxdrproc_t		p_encode;	/* XDR encode function */ | 	kxdreproc_t		p_encode;	/* XDR encode function */ | ||||||
| 	kxdrproc_t		p_decode;	/* XDR decode function */ | 	kxdrproc_t		p_decode;	/* XDR decode function */ | ||||||
| 	unsigned int		p_arglen;	/* argument hdr length (u32) */ | 	unsigned int		p_arglen;	/* argument hdr length (u32) */ | ||||||
| 	unsigned int		p_replen;	/* reply hdr length (u32) */ | 	unsigned int		p_replen;	/* reply hdr length (u32) */ | ||||||
|  |  | ||||||
|  | @ -33,8 +33,8 @@ struct xdr_netobj { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * This is the generic XDR function. rqstp is either a rpc_rqst (client |  * This is the legacy generic XDR function. rqstp is either a rpc_rqst | ||||||
|  * side) or svc_rqst pointer (server side). |  * (client side) or svc_rqst pointer (server side). | ||||||
|  * Encode functions always assume there's enough room in the buffer. |  * Encode functions always assume there's enough room in the buffer. | ||||||
|  */ |  */ | ||||||
| typedef int	(*kxdrproc_t)(void *rqstp, __be32 *data, void *obj); | typedef int	(*kxdrproc_t)(void *rqstp, __be32 *data, void *obj); | ||||||
|  | @ -203,6 +203,11 @@ struct xdr_stream { | ||||||
| 	struct kvec *iov;	/* pointer to the current kvec */ | 	struct kvec *iov;	/* pointer to the current kvec */ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * This is the xdr_stream style generic XDR function. | ||||||
|  |  */ | ||||||
|  | typedef void	(*kxdreproc_t)(void *rqstp, struct xdr_stream *xdr, void *obj); | ||||||
|  | 
 | ||||||
| extern void xdr_init_encode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p); | extern void xdr_init_encode(struct xdr_stream *xdr, struct xdr_buf *buf, __be32 *p); | ||||||
| extern __be32 *xdr_reserve_space(struct xdr_stream *xdr, size_t nbytes); | extern __be32 *xdr_reserve_space(struct xdr_stream *xdr, size_t nbytes); | ||||||
| extern void xdr_write_pages(struct xdr_stream *xdr, struct page **pages, | extern void xdr_write_pages(struct xdr_stream *xdr, struct page **pages, | ||||||
|  |  | ||||||
|  | @ -563,8 +563,17 @@ rpcauth_checkverf(struct rpc_task *task, __be32 *p) | ||||||
| 	return cred->cr_ops->crvalidate(task, p); | 	return cred->cr_ops->crvalidate(task, p); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void rpcauth_wrap_req_encode(kxdreproc_t encode, struct rpc_rqst *rqstp, | ||||||
|  | 				   __be32 *data, void *obj) | ||||||
|  | { | ||||||
|  | 	struct xdr_stream xdr; | ||||||
|  | 
 | ||||||
|  | 	xdr_init_encode(&xdr, &rqstp->rq_snd_buf, data); | ||||||
|  | 	encode(rqstp, &xdr, obj); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| int | int | ||||||
| rpcauth_wrap_req(struct rpc_task *task, kxdrproc_t encode, void *rqstp, | rpcauth_wrap_req(struct rpc_task *task, kxdreproc_t encode, void *rqstp, | ||||||
| 		__be32 *data, void *obj) | 		__be32 *data, void *obj) | ||||||
| { | { | ||||||
| 	struct rpc_cred *cred = task->tk_rqstp->rq_cred; | 	struct rpc_cred *cred = task->tk_rqstp->rq_cred; | ||||||
|  | @ -574,7 +583,8 @@ rpcauth_wrap_req(struct rpc_task *task, kxdrproc_t encode, void *rqstp, | ||||||
| 	if (cred->cr_ops->crwrap_req) | 	if (cred->cr_ops->crwrap_req) | ||||||
| 		return cred->cr_ops->crwrap_req(task, encode, rqstp, data, obj); | 		return cred->cr_ops->crwrap_req(task, encode, rqstp, data, obj); | ||||||
| 	/* By default, we encode the arguments normally. */ | 	/* By default, we encode the arguments normally. */ | ||||||
| 	return encode(rqstp, data, obj); | 	rpcauth_wrap_req_encode(encode, rqstp, data, obj); | ||||||
|  | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int | int | ||||||
|  |  | ||||||
|  | @ -1231,9 +1231,19 @@ gss_validate(struct rpc_task *task, __be32 *p) | ||||||
| 	return NULL; | 	return NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void gss_wrap_req_encode(kxdreproc_t encode, struct rpc_rqst *rqstp, | ||||||
|  | 				__be32 *p, void *obj) | ||||||
|  | { | ||||||
|  | 	struct xdr_stream xdr; | ||||||
|  | 
 | ||||||
|  | 	xdr_init_encode(&xdr, &rqstp->rq_snd_buf, p); | ||||||
|  | 	encode(rqstp, &xdr, obj); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static inline int | static inline int | ||||||
| gss_wrap_req_integ(struct rpc_cred *cred, struct gss_cl_ctx *ctx, | gss_wrap_req_integ(struct rpc_cred *cred, struct gss_cl_ctx *ctx, | ||||||
| 		kxdrproc_t encode, struct rpc_rqst *rqstp, __be32 *p, void *obj) | 		   kxdreproc_t encode, struct rpc_rqst *rqstp, | ||||||
|  | 		   __be32 *p, void *obj) | ||||||
| { | { | ||||||
| 	struct xdr_buf	*snd_buf = &rqstp->rq_snd_buf; | 	struct xdr_buf	*snd_buf = &rqstp->rq_snd_buf; | ||||||
| 	struct xdr_buf	integ_buf; | 	struct xdr_buf	integ_buf; | ||||||
|  | @ -1249,9 +1259,7 @@ gss_wrap_req_integ(struct rpc_cred *cred, struct gss_cl_ctx *ctx, | ||||||
| 	offset = (u8 *)p - (u8 *)snd_buf->head[0].iov_base; | 	offset = (u8 *)p - (u8 *)snd_buf->head[0].iov_base; | ||||||
| 	*p++ = htonl(rqstp->rq_seqno); | 	*p++ = htonl(rqstp->rq_seqno); | ||||||
| 
 | 
 | ||||||
| 	status = encode(rqstp, p, obj); | 	gss_wrap_req_encode(encode, rqstp, p, obj); | ||||||
| 	if (status) |  | ||||||
| 		return status; |  | ||||||
| 
 | 
 | ||||||
| 	if (xdr_buf_subsegment(snd_buf, &integ_buf, | 	if (xdr_buf_subsegment(snd_buf, &integ_buf, | ||||||
| 				offset, snd_buf->len - offset)) | 				offset, snd_buf->len - offset)) | ||||||
|  | @ -1325,7 +1333,8 @@ alloc_enc_pages(struct rpc_rqst *rqstp) | ||||||
| 
 | 
 | ||||||
| static inline int | static inline int | ||||||
| gss_wrap_req_priv(struct rpc_cred *cred, struct gss_cl_ctx *ctx, | gss_wrap_req_priv(struct rpc_cred *cred, struct gss_cl_ctx *ctx, | ||||||
| 		kxdrproc_t encode, struct rpc_rqst *rqstp, __be32 *p, void *obj) | 		  kxdreproc_t encode, struct rpc_rqst *rqstp, | ||||||
|  | 		  __be32 *p, void *obj) | ||||||
| { | { | ||||||
| 	struct xdr_buf	*snd_buf = &rqstp->rq_snd_buf; | 	struct xdr_buf	*snd_buf = &rqstp->rq_snd_buf; | ||||||
| 	u32		offset; | 	u32		offset; | ||||||
|  | @ -1342,9 +1351,7 @@ gss_wrap_req_priv(struct rpc_cred *cred, struct gss_cl_ctx *ctx, | ||||||
| 	offset = (u8 *)p - (u8 *)snd_buf->head[0].iov_base; | 	offset = (u8 *)p - (u8 *)snd_buf->head[0].iov_base; | ||||||
| 	*p++ = htonl(rqstp->rq_seqno); | 	*p++ = htonl(rqstp->rq_seqno); | ||||||
| 
 | 
 | ||||||
| 	status = encode(rqstp, p, obj); | 	gss_wrap_req_encode(encode, rqstp, p, obj); | ||||||
| 	if (status) |  | ||||||
| 		return status; |  | ||||||
| 
 | 
 | ||||||
| 	status = alloc_enc_pages(rqstp); | 	status = alloc_enc_pages(rqstp); | ||||||
| 	if (status) | 	if (status) | ||||||
|  | @ -1394,7 +1401,7 @@ gss_wrap_req_priv(struct rpc_cred *cred, struct gss_cl_ctx *ctx, | ||||||
| 
 | 
 | ||||||
| static int | static int | ||||||
| gss_wrap_req(struct rpc_task *task, | gss_wrap_req(struct rpc_task *task, | ||||||
| 	     kxdrproc_t encode, void *rqstp, __be32 *p, void *obj) | 	     kxdreproc_t encode, void *rqstp, __be32 *p, void *obj) | ||||||
| { | { | ||||||
| 	struct rpc_cred *cred = task->tk_rqstp->rq_cred; | 	struct rpc_cred *cred = task->tk_rqstp->rq_cred; | ||||||
| 	struct gss_cred	*gss_cred = container_of(cred, struct gss_cred, | 	struct gss_cred	*gss_cred = container_of(cred, struct gss_cred, | ||||||
|  | @ -1407,12 +1414,14 @@ gss_wrap_req(struct rpc_task *task, | ||||||
| 		/* The spec seems a little ambiguous here, but I think that not
 | 		/* The spec seems a little ambiguous here, but I think that not
 | ||||||
| 		 * wrapping context destruction requests makes the most sense. | 		 * wrapping context destruction requests makes the most sense. | ||||||
| 		 */ | 		 */ | ||||||
| 		status = encode(rqstp, p, obj); | 		gss_wrap_req_encode(encode, rqstp, p, obj); | ||||||
|  | 		status = 0; | ||||||
| 		goto out; | 		goto out; | ||||||
| 	} | 	} | ||||||
| 	switch (gss_cred->gc_service) { | 	switch (gss_cred->gc_service) { | ||||||
| 		case RPC_GSS_SVC_NONE: | 		case RPC_GSS_SVC_NONE: | ||||||
| 			status = encode(rqstp, p, obj); | 			gss_wrap_req_encode(encode, rqstp, p, obj); | ||||||
|  | 			status = 0; | ||||||
| 			break; | 			break; | ||||||
| 		case RPC_GSS_SVC_INTEGRITY: | 		case RPC_GSS_SVC_INTEGRITY: | ||||||
| 			status = gss_wrap_req_integ(cred, ctx, encode, | 			status = gss_wrap_req_integ(cred, ctx, encode, | ||||||
|  |  | ||||||
|  | @ -1095,7 +1095,7 @@ static void | ||||||
| rpc_xdr_encode(struct rpc_task *task) | rpc_xdr_encode(struct rpc_task *task) | ||||||
| { | { | ||||||
| 	struct rpc_rqst	*req = task->tk_rqstp; | 	struct rpc_rqst	*req = task->tk_rqstp; | ||||||
| 	kxdrproc_t	encode; | 	kxdreproc_t	encode; | ||||||
| 	__be32		*p; | 	__be32		*p; | ||||||
| 
 | 
 | ||||||
| 	dprint_status(task); | 	dprint_status(task); | ||||||
|  | @ -1776,9 +1776,8 @@ rpc_verify_header(struct rpc_task *task) | ||||||
| 	goto out_garbage; | 	goto out_garbage; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int rpcproc_encode_null(void *rqstp, __be32 *data, void *obj) | static void rpcproc_encode_null(void *rqstp, struct xdr_stream *xdr, void *obj) | ||||||
| { | { | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int rpcproc_decode_null(void *rqstp, __be32 *data, void *obj) | static int rpcproc_decode_null(void *rqstp, __be32 *data, void *obj) | ||||||
|  |  | ||||||
|  | @ -689,25 +689,21 @@ static void rpcb_getport_done(struct rpc_task *child, void *data) | ||||||
|  * XDR functions for rpcbind |  * XDR functions for rpcbind | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| static int rpcb_enc_mapping(struct rpc_rqst *req, __be32 *p, | static void rpcb_enc_mapping(struct rpc_rqst *req, struct xdr_stream *xdr, | ||||||
| 			    const struct rpcbind_args *rpcb) | 			     const struct rpcbind_args *rpcb) | ||||||
| { | { | ||||||
| 	struct rpc_task *task = req->rq_task; | 	struct rpc_task *task = req->rq_task; | ||||||
| 	struct xdr_stream xdr; | 	__be32 *p; | ||||||
| 
 | 
 | ||||||
| 	dprintk("RPC: %5u encoding PMAP_%s call (%u, %u, %d, %u)\n", | 	dprintk("RPC: %5u encoding PMAP_%s call (%u, %u, %d, %u)\n", | ||||||
| 			task->tk_pid, task->tk_msg.rpc_proc->p_name, | 			task->tk_pid, task->tk_msg.rpc_proc->p_name, | ||||||
| 			rpcb->r_prog, rpcb->r_vers, rpcb->r_prot, rpcb->r_port); | 			rpcb->r_prog, rpcb->r_vers, rpcb->r_prot, rpcb->r_port); | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	p = xdr_reserve_space(xdr, RPCB_mappingargs_sz << 2); | ||||||
| 
 |  | ||||||
| 	p = xdr_reserve_space(&xdr, RPCB_mappingargs_sz << 2); |  | ||||||
| 	*p++ = cpu_to_be32(rpcb->r_prog); | 	*p++ = cpu_to_be32(rpcb->r_prog); | ||||||
| 	*p++ = cpu_to_be32(rpcb->r_vers); | 	*p++ = cpu_to_be32(rpcb->r_vers); | ||||||
| 	*p++ = cpu_to_be32(rpcb->r_prot); | 	*p++ = cpu_to_be32(rpcb->r_prot); | ||||||
| 	*p   = cpu_to_be32(rpcb->r_port); | 	*p   = cpu_to_be32(rpcb->r_port); | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int rpcb_dec_getport(struct rpc_rqst *req, __be32 *p, | static int rpcb_dec_getport(struct rpc_rqst *req, __be32 *p, | ||||||
|  | @ -769,27 +765,24 @@ static void encode_rpcb_string(struct xdr_stream *xdr, const char *string, | ||||||
| 	xdr_encode_opaque(p, string, len); | 	xdr_encode_opaque(p, string, len); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int rpcb_enc_getaddr(struct rpc_rqst *req, __be32 *p, | static void rpcb_enc_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr, | ||||||
| 			    const struct rpcbind_args *rpcb) | 			     const struct rpcbind_args *rpcb) | ||||||
| { | { | ||||||
| 	struct rpc_task *task = req->rq_task; | 	struct rpc_task *task = req->rq_task; | ||||||
| 	struct xdr_stream xdr; | 	__be32 *p; | ||||||
| 
 | 
 | ||||||
| 	dprintk("RPC: %5u encoding RPCB_%s call (%u, %u, '%s', '%s')\n", | 	dprintk("RPC: %5u encoding RPCB_%s call (%u, %u, '%s', '%s')\n", | ||||||
| 			task->tk_pid, task->tk_msg.rpc_proc->p_name, | 			task->tk_pid, task->tk_msg.rpc_proc->p_name, | ||||||
| 			rpcb->r_prog, rpcb->r_vers, | 			rpcb->r_prog, rpcb->r_vers, | ||||||
| 			rpcb->r_netid, rpcb->r_addr); | 			rpcb->r_netid, rpcb->r_addr); | ||||||
| 
 | 
 | ||||||
| 	xdr_init_encode(&xdr, &req->rq_snd_buf, p); | 	p = xdr_reserve_space(xdr, (RPCB_program_sz + RPCB_version_sz) << 2); | ||||||
| 
 |  | ||||||
| 	p = xdr_reserve_space(&xdr, (RPCB_program_sz + RPCB_version_sz) << 2); |  | ||||||
| 	*p++ = cpu_to_be32(rpcb->r_prog); | 	*p++ = cpu_to_be32(rpcb->r_prog); | ||||||
| 	*p = cpu_to_be32(rpcb->r_vers); | 	*p = cpu_to_be32(rpcb->r_vers); | ||||||
| 
 | 
 | ||||||
| 	encode_rpcb_string(&xdr, rpcb->r_netid, RPCBIND_MAXNETIDLEN); | 	encode_rpcb_string(xdr, rpcb->r_netid, RPCBIND_MAXNETIDLEN); | ||||||
| 	encode_rpcb_string(&xdr, rpcb->r_addr, RPCBIND_MAXUADDRLEN); | 	encode_rpcb_string(xdr, rpcb->r_addr, RPCBIND_MAXUADDRLEN); | ||||||
| 	encode_rpcb_string(&xdr, rpcb->r_owner, RPCB_MAXOWNERLEN); | 	encode_rpcb_string(xdr, rpcb->r_owner, RPCB_MAXOWNERLEN); | ||||||
| 	return 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int rpcb_dec_getaddr(struct rpc_rqst *req, __be32 *p, | static int rpcb_dec_getaddr(struct rpc_rqst *req, __be32 *p, | ||||||
|  | @ -849,7 +842,7 @@ static int rpcb_dec_getaddr(struct rpc_rqst *req, __be32 *p, | ||||||
| static struct rpc_procinfo rpcb_procedures2[] = { | static struct rpc_procinfo rpcb_procedures2[] = { | ||||||
| 	[RPCBPROC_SET] = { | 	[RPCBPROC_SET] = { | ||||||
| 		.p_proc		= RPCBPROC_SET, | 		.p_proc		= RPCBPROC_SET, | ||||||
| 		.p_encode	= (kxdrproc_t)rpcb_enc_mapping, | 		.p_encode	= (kxdreproc_t)rpcb_enc_mapping, | ||||||
| 		.p_decode	= (kxdrproc_t)rpcb_dec_set, | 		.p_decode	= (kxdrproc_t)rpcb_dec_set, | ||||||
| 		.p_arglen	= RPCB_mappingargs_sz, | 		.p_arglen	= RPCB_mappingargs_sz, | ||||||
| 		.p_replen	= RPCB_setres_sz, | 		.p_replen	= RPCB_setres_sz, | ||||||
|  | @ -859,7 +852,7 @@ static struct rpc_procinfo rpcb_procedures2[] = { | ||||||
| 	}, | 	}, | ||||||
| 	[RPCBPROC_UNSET] = { | 	[RPCBPROC_UNSET] = { | ||||||
| 		.p_proc		= RPCBPROC_UNSET, | 		.p_proc		= RPCBPROC_UNSET, | ||||||
| 		.p_encode	= (kxdrproc_t)rpcb_enc_mapping, | 		.p_encode	= (kxdreproc_t)rpcb_enc_mapping, | ||||||
| 		.p_decode	= (kxdrproc_t)rpcb_dec_set, | 		.p_decode	= (kxdrproc_t)rpcb_dec_set, | ||||||
| 		.p_arglen	= RPCB_mappingargs_sz, | 		.p_arglen	= RPCB_mappingargs_sz, | ||||||
| 		.p_replen	= RPCB_setres_sz, | 		.p_replen	= RPCB_setres_sz, | ||||||
|  | @ -869,7 +862,7 @@ static struct rpc_procinfo rpcb_procedures2[] = { | ||||||
| 	}, | 	}, | ||||||
| 	[RPCBPROC_GETPORT] = { | 	[RPCBPROC_GETPORT] = { | ||||||
| 		.p_proc		= RPCBPROC_GETPORT, | 		.p_proc		= RPCBPROC_GETPORT, | ||||||
| 		.p_encode	= (kxdrproc_t)rpcb_enc_mapping, | 		.p_encode	= (kxdreproc_t)rpcb_enc_mapping, | ||||||
| 		.p_decode	= (kxdrproc_t)rpcb_dec_getport, | 		.p_decode	= (kxdrproc_t)rpcb_dec_getport, | ||||||
| 		.p_arglen	= RPCB_mappingargs_sz, | 		.p_arglen	= RPCB_mappingargs_sz, | ||||||
| 		.p_replen	= RPCB_getportres_sz, | 		.p_replen	= RPCB_getportres_sz, | ||||||
|  | @ -882,7 +875,7 @@ static struct rpc_procinfo rpcb_procedures2[] = { | ||||||
| static struct rpc_procinfo rpcb_procedures3[] = { | static struct rpc_procinfo rpcb_procedures3[] = { | ||||||
| 	[RPCBPROC_SET] = { | 	[RPCBPROC_SET] = { | ||||||
| 		.p_proc		= RPCBPROC_SET, | 		.p_proc		= RPCBPROC_SET, | ||||||
| 		.p_encode	= (kxdrproc_t)rpcb_enc_getaddr, | 		.p_encode	= (kxdreproc_t)rpcb_enc_getaddr, | ||||||
| 		.p_decode	= (kxdrproc_t)rpcb_dec_set, | 		.p_decode	= (kxdrproc_t)rpcb_dec_set, | ||||||
| 		.p_arglen	= RPCB_getaddrargs_sz, | 		.p_arglen	= RPCB_getaddrargs_sz, | ||||||
| 		.p_replen	= RPCB_setres_sz, | 		.p_replen	= RPCB_setres_sz, | ||||||
|  | @ -892,7 +885,7 @@ static struct rpc_procinfo rpcb_procedures3[] = { | ||||||
| 	}, | 	}, | ||||||
| 	[RPCBPROC_UNSET] = { | 	[RPCBPROC_UNSET] = { | ||||||
| 		.p_proc		= RPCBPROC_UNSET, | 		.p_proc		= RPCBPROC_UNSET, | ||||||
| 		.p_encode	= (kxdrproc_t)rpcb_enc_getaddr, | 		.p_encode	= (kxdreproc_t)rpcb_enc_getaddr, | ||||||
| 		.p_decode	= (kxdrproc_t)rpcb_dec_set, | 		.p_decode	= (kxdrproc_t)rpcb_dec_set, | ||||||
| 		.p_arglen	= RPCB_getaddrargs_sz, | 		.p_arglen	= RPCB_getaddrargs_sz, | ||||||
| 		.p_replen	= RPCB_setres_sz, | 		.p_replen	= RPCB_setres_sz, | ||||||
|  | @ -902,7 +895,7 @@ static struct rpc_procinfo rpcb_procedures3[] = { | ||||||
| 	}, | 	}, | ||||||
| 	[RPCBPROC_GETADDR] = { | 	[RPCBPROC_GETADDR] = { | ||||||
| 		.p_proc		= RPCBPROC_GETADDR, | 		.p_proc		= RPCBPROC_GETADDR, | ||||||
| 		.p_encode	= (kxdrproc_t)rpcb_enc_getaddr, | 		.p_encode	= (kxdreproc_t)rpcb_enc_getaddr, | ||||||
| 		.p_decode	= (kxdrproc_t)rpcb_dec_getaddr, | 		.p_decode	= (kxdrproc_t)rpcb_dec_getaddr, | ||||||
| 		.p_arglen	= RPCB_getaddrargs_sz, | 		.p_arglen	= RPCB_getaddrargs_sz, | ||||||
| 		.p_replen	= RPCB_getaddrres_sz, | 		.p_replen	= RPCB_getaddrres_sz, | ||||||
|  | @ -915,7 +908,7 @@ static struct rpc_procinfo rpcb_procedures3[] = { | ||||||
| static struct rpc_procinfo rpcb_procedures4[] = { | static struct rpc_procinfo rpcb_procedures4[] = { | ||||||
| 	[RPCBPROC_SET] = { | 	[RPCBPROC_SET] = { | ||||||
| 		.p_proc		= RPCBPROC_SET, | 		.p_proc		= RPCBPROC_SET, | ||||||
| 		.p_encode	= (kxdrproc_t)rpcb_enc_getaddr, | 		.p_encode	= (kxdreproc_t)rpcb_enc_getaddr, | ||||||
| 		.p_decode	= (kxdrproc_t)rpcb_dec_set, | 		.p_decode	= (kxdrproc_t)rpcb_dec_set, | ||||||
| 		.p_arglen	= RPCB_getaddrargs_sz, | 		.p_arglen	= RPCB_getaddrargs_sz, | ||||||
| 		.p_replen	= RPCB_setres_sz, | 		.p_replen	= RPCB_setres_sz, | ||||||
|  | @ -925,7 +918,7 @@ static struct rpc_procinfo rpcb_procedures4[] = { | ||||||
| 	}, | 	}, | ||||||
| 	[RPCBPROC_UNSET] = { | 	[RPCBPROC_UNSET] = { | ||||||
| 		.p_proc		= RPCBPROC_UNSET, | 		.p_proc		= RPCBPROC_UNSET, | ||||||
| 		.p_encode	= (kxdrproc_t)rpcb_enc_getaddr, | 		.p_encode	= (kxdreproc_t)rpcb_enc_getaddr, | ||||||
| 		.p_decode	= (kxdrproc_t)rpcb_dec_set, | 		.p_decode	= (kxdrproc_t)rpcb_dec_set, | ||||||
| 		.p_arglen	= RPCB_getaddrargs_sz, | 		.p_arglen	= RPCB_getaddrargs_sz, | ||||||
| 		.p_replen	= RPCB_setres_sz, | 		.p_replen	= RPCB_setres_sz, | ||||||
|  | @ -935,7 +928,7 @@ static struct rpc_procinfo rpcb_procedures4[] = { | ||||||
| 	}, | 	}, | ||||||
| 	[RPCBPROC_GETADDR] = { | 	[RPCBPROC_GETADDR] = { | ||||||
| 		.p_proc		= RPCBPROC_GETADDR, | 		.p_proc		= RPCBPROC_GETADDR, | ||||||
| 		.p_encode	= (kxdrproc_t)rpcb_enc_getaddr, | 		.p_encode	= (kxdreproc_t)rpcb_enc_getaddr, | ||||||
| 		.p_decode	= (kxdrproc_t)rpcb_dec_getaddr, | 		.p_decode	= (kxdrproc_t)rpcb_dec_getaddr, | ||||||
| 		.p_arglen	= RPCB_getaddrargs_sz, | 		.p_arglen	= RPCB_getaddrargs_sz, | ||||||
| 		.p_replen	= RPCB_getaddrres_sz, | 		.p_replen	= RPCB_getaddrres_sz, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Chuck Lever
						Chuck Lever