@@ -2566,12 +2566,16 @@ static __be32 *encode_time_delta(__be32 *p, struct inode *inode)
2566
2566
return p ;
2567
2567
}
2568
2568
2569
- static __be32 * encode_cinfo (__be32 * p , struct nfsd4_change_info * c )
2569
+ static __be32
2570
+ nfsd4_encode_change_info4 (struct xdr_stream * xdr , struct nfsd4_change_info * c )
2570
2571
{
2571
- * p ++ = cpu_to_be32 (c -> atomic );
2572
- p = xdr_encode_hyper (p , c -> before_change );
2573
- p = xdr_encode_hyper (p , c -> after_change );
2574
- return p ;
2572
+ if (xdr_stream_encode_bool (xdr , c -> atomic ) < 0 )
2573
+ return nfserr_resource ;
2574
+ if (xdr_stream_encode_u64 (xdr , c -> before_change ) < 0 )
2575
+ return nfserr_resource ;
2576
+ if (xdr_stream_encode_u64 (xdr , c -> after_change ) < 0 )
2577
+ return nfserr_resource ;
2578
+ return nfs_ok ;
2575
2579
}
2576
2580
2577
2581
/* Encode as an array of strings the string given with components
@@ -3786,12 +3790,10 @@ nfsd4_encode_create(struct nfsd4_compoundres *resp, __be32 nfserr,
3786
3790
{
3787
3791
struct nfsd4_create * create = & u -> create ;
3788
3792
struct xdr_stream * xdr = resp -> xdr ;
3789
- __be32 * p ;
3790
3793
3791
- p = xdr_reserve_space (xdr , 20 );
3792
- if (!p )
3793
- return nfserr_resource ;
3794
- encode_cinfo (p , & create -> cr_cinfo );
3794
+ nfserr = nfsd4_encode_change_info4 (xdr , & create -> cr_cinfo );
3795
+ if (nfserr )
3796
+ return nfserr ;
3795
3797
return nfsd4_encode_bitmap (xdr , create -> cr_bmval [0 ],
3796
3798
create -> cr_bmval [1 ], create -> cr_bmval [2 ]);
3797
3799
}
@@ -3909,13 +3911,8 @@ nfsd4_encode_link(struct nfsd4_compoundres *resp, __be32 nfserr,
3909
3911
{
3910
3912
struct nfsd4_link * link = & u -> link ;
3911
3913
struct xdr_stream * xdr = resp -> xdr ;
3912
- __be32 * p ;
3913
3914
3914
- p = xdr_reserve_space (xdr , 20 );
3915
- if (!p )
3916
- return nfserr_resource ;
3917
- p = encode_cinfo (p , & link -> li_cinfo );
3918
- return 0 ;
3915
+ return nfsd4_encode_change_info4 (xdr , & link -> li_cinfo );
3919
3916
}
3920
3917
3921
3918
@@ -3930,11 +3927,11 @@ nfsd4_encode_open(struct nfsd4_compoundres *resp, __be32 nfserr,
3930
3927
nfserr = nfsd4_encode_stateid (xdr , & open -> op_stateid );
3931
3928
if (nfserr )
3932
3929
return nfserr ;
3933
- p = xdr_reserve_space (xdr , 24 );
3934
- if (!p )
3930
+ nfserr = nfsd4_encode_change_info4 (xdr , & open -> op_cinfo );
3931
+ if (nfserr )
3932
+ return nfserr ;
3933
+ if (xdr_stream_encode_u32 (xdr , open -> op_rflags ) < 0 )
3935
3934
return nfserr_resource ;
3936
- p = encode_cinfo (p , & open -> op_cinfo );
3937
- * p ++ = cpu_to_be32 (open -> op_rflags );
3938
3935
3939
3936
nfserr = nfsd4_encode_bitmap (xdr , open -> op_bmval [0 ], open -> op_bmval [1 ],
3940
3937
open -> op_bmval [2 ]);
@@ -4310,13 +4307,8 @@ nfsd4_encode_remove(struct nfsd4_compoundres *resp, __be32 nfserr,
4310
4307
{
4311
4308
struct nfsd4_remove * remove = & u -> remove ;
4312
4309
struct xdr_stream * xdr = resp -> xdr ;
4313
- __be32 * p ;
4314
4310
4315
- p = xdr_reserve_space (xdr , 20 );
4316
- if (!p )
4317
- return nfserr_resource ;
4318
- p = encode_cinfo (p , & remove -> rm_cinfo );
4319
- return 0 ;
4311
+ return nfsd4_encode_change_info4 (xdr , & remove -> rm_cinfo );
4320
4312
}
4321
4313
4322
4314
static __be32
@@ -4325,14 +4317,11 @@ nfsd4_encode_rename(struct nfsd4_compoundres *resp, __be32 nfserr,
4325
4317
{
4326
4318
struct nfsd4_rename * rename = & u -> rename ;
4327
4319
struct xdr_stream * xdr = resp -> xdr ;
4328
- __be32 * p ;
4329
4320
4330
- p = xdr_reserve_space (xdr , 40 );
4331
- if (!p )
4332
- return nfserr_resource ;
4333
- p = encode_cinfo (p , & rename -> rn_sinfo );
4334
- p = encode_cinfo (p , & rename -> rn_tinfo );
4335
- return 0 ;
4321
+ nfserr = nfsd4_encode_change_info4 (xdr , & rename -> rn_sinfo );
4322
+ if (nfserr )
4323
+ return nfserr ;
4324
+ return nfsd4_encode_change_info4 (xdr , & rename -> rn_tinfo );
4336
4325
}
4337
4326
4338
4327
static __be32
@@ -5102,15 +5091,8 @@ nfsd4_encode_setxattr(struct nfsd4_compoundres *resp, __be32 nfserr,
5102
5091
{
5103
5092
struct nfsd4_setxattr * setxattr = & u -> setxattr ;
5104
5093
struct xdr_stream * xdr = resp -> xdr ;
5105
- __be32 * p ;
5106
-
5107
- p = xdr_reserve_space (xdr , 20 );
5108
- if (!p )
5109
- return nfserr_resource ;
5110
5094
5111
- encode_cinfo (p , & setxattr -> setxa_cinfo );
5112
-
5113
- return 0 ;
5095
+ return nfsd4_encode_change_info4 (xdr , & setxattr -> setxa_cinfo );
5114
5096
}
5115
5097
5116
5098
/*
@@ -5256,14 +5238,8 @@ nfsd4_encode_removexattr(struct nfsd4_compoundres *resp, __be32 nfserr,
5256
5238
{
5257
5239
struct nfsd4_removexattr * removexattr = & u -> removexattr ;
5258
5240
struct xdr_stream * xdr = resp -> xdr ;
5259
- __be32 * p ;
5260
5241
5261
- p = xdr_reserve_space (xdr , 20 );
5262
- if (!p )
5263
- return nfserr_resource ;
5264
-
5265
- p = encode_cinfo (p , & removexattr -> rmxa_cinfo );
5266
- return 0 ;
5242
+ return nfsd4_encode_change_info4 (xdr , & removexattr -> rmxa_cinfo );
5267
5243
}
5268
5244
5269
5245
typedef __be32 (* nfsd4_enc )(struct nfsd4_compoundres * , __be32 , union nfsd4_op_u * u );
0 commit comments