aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ. Bruce Fields <bfields@redhat.com>2017-05-06 11:12:04 -0400
committerJ. Bruce Fields <bfields@redhat.com>2017-08-24 22:12:49 -0400
commitbac966d6065207b6900a4c2a3e6e5f78cfee7b4d (patch)
tree21055a52f639cd01c94d699795b6dc4620df877f
parentb7571e4cd39ae860379138b883bc5f57a8553184 (diff)
nfsd4: individual encoders no longer see error cases
With a few exceptions, most individual encoders don't handle error cases. Signed-off-by: J. Bruce Fields <bfields@redhat.com>
-rw-r--r--fs/nfsd/nfs4xdr.c309
1 files changed, 103 insertions, 206 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 08badcf64554..18b9c2fad29a 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -3105,14 +3105,12 @@ nfsd4_encode_access(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_
3105 struct xdr_stream *xdr = &resp->xdr; 3105 struct xdr_stream *xdr = &resp->xdr;
3106 __be32 *p; 3106 __be32 *p;
3107 3107
3108 if (!nfserr) { 3108 p = xdr_reserve_space(xdr, 8);
3109 p = xdr_reserve_space(xdr, 8); 3109 if (!p)
3110 if (!p) 3110 return nfserr_resource;
3111 return nfserr_resource; 3111 *p++ = cpu_to_be32(access->ac_supported);
3112 *p++ = cpu_to_be32(access->ac_supported); 3112 *p++ = cpu_to_be32(access->ac_resp_access);
3113 *p++ = cpu_to_be32(access->ac_resp_access); 3113 return 0;
3114 }
3115 return nfserr;
3116} 3114}
3117 3115
3118static __be32 nfsd4_encode_bind_conn_to_session(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_bind_conn_to_session *bcts) 3116static __be32 nfsd4_encode_bind_conn_to_session(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_bind_conn_to_session *bcts)
@@ -3120,17 +3118,15 @@ static __be32 nfsd4_encode_bind_conn_to_session(struct nfsd4_compoundres *resp,
3120 struct xdr_stream *xdr = &resp->xdr; 3118 struct xdr_stream *xdr = &resp->xdr;
3121 __be32 *p; 3119 __be32 *p;
3122 3120
3123 if (!nfserr) { 3121 p = xdr_reserve_space(xdr, NFS4_MAX_SESSIONID_LEN + 8);
3124 p = xdr_reserve_space(xdr, NFS4_MAX_SESSIONID_LEN + 8); 3122 if (!p)
3125 if (!p) 3123 return nfserr_resource;
3126 return nfserr_resource; 3124 p = xdr_encode_opaque_fixed(p, bcts->sessionid.data,
3127 p = xdr_encode_opaque_fixed(p, bcts->sessionid.data, 3125 NFS4_MAX_SESSIONID_LEN);
3128 NFS4_MAX_SESSIONID_LEN); 3126 *p++ = cpu_to_be32(bcts->dir);
3129 *p++ = cpu_to_be32(bcts->dir); 3127 /* Upshifting from TCP to RDMA is not supported */
3130 /* Upshifting from TCP to RDMA is not supported */ 3128 *p++ = cpu_to_be32(0);
3131 *p++ = cpu_to_be32(0); 3129 return 0;
3132 }
3133 return nfserr;
3134} 3130}
3135 3131
3136static __be32 3132static __be32
@@ -3138,10 +3134,7 @@ nfsd4_encode_close(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_c
3138{ 3134{
3139 struct xdr_stream *xdr = &resp->xdr; 3135 struct xdr_stream *xdr = &resp->xdr;
3140 3136
3141 if (!nfserr) 3137 return nfsd4_encode_stateid(xdr, &close->cl_stateid);
3142 nfserr = nfsd4_encode_stateid(xdr, &close->cl_stateid);
3143
3144 return nfserr;
3145} 3138}
3146 3139
3147 3140
@@ -3151,14 +3144,12 @@ nfsd4_encode_commit(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_
3151 struct xdr_stream *xdr = &resp->xdr; 3144 struct xdr_stream *xdr = &resp->xdr;
3152 __be32 *p; 3145 __be32 *p;
3153 3146
3154 if (!nfserr) { 3147 p = xdr_reserve_space(xdr, NFS4_VERIFIER_SIZE);
3155 p = xdr_reserve_space(xdr, NFS4_VERIFIER_SIZE); 3148 if (!p)
3156 if (!p) 3149 return nfserr_resource;
3157 return nfserr_resource; 3150 p = xdr_encode_opaque_fixed(p, commit->co_verf.data,
3158 p = xdr_encode_opaque_fixed(p, commit->co_verf.data,
3159 NFS4_VERIFIER_SIZE); 3151 NFS4_VERIFIER_SIZE);
3160 } 3152 return 0;
3161 return nfserr;
3162} 3153}
3163 3154
3164static __be32 3155static __be32
@@ -3167,15 +3158,13 @@ nfsd4_encode_create(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_
3167 struct xdr_stream *xdr = &resp->xdr; 3158 struct xdr_stream *xdr = &resp->xdr;
3168 __be32 *p; 3159 __be32 *p;
3169 3160
3170 if (!nfserr) { 3161 p = xdr_reserve_space(xdr, 20);
3171 p = xdr_reserve_space(xdr, 20); 3162 if (!p)
3172 if (!p) 3163 return nfserr_resource;
3173 return nfserr_resource; 3164 encode_cinfo(p, &create->cr_cinfo);
3174 encode_cinfo(p, &create->cr_cinfo); 3165 nfserr = nfsd4_encode_bitmap(xdr, create->cr_bmval[0],
3175 nfserr = nfsd4_encode_bitmap(xdr, create->cr_bmval[0], 3166 create->cr_bmval[1], create->cr_bmval[2]);
3176 create->cr_bmval[1], create->cr_bmval[2]); 3167 return 0;
3177 }
3178 return nfserr;
3179} 3168}
3180 3169
3181static __be32 3170static __be32
@@ -3184,13 +3173,8 @@ nfsd4_encode_getattr(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4
3184 struct svc_fh *fhp = getattr->ga_fhp; 3173 struct svc_fh *fhp = getattr->ga_fhp;
3185 struct xdr_stream *xdr = &resp->xdr; 3174 struct xdr_stream *xdr = &resp->xdr;
3186 3175
3187 if (nfserr) 3176 return nfsd4_encode_fattr(xdr, fhp, fhp->fh_export, fhp->fh_dentry,
3188 return nfserr; 3177 getattr->ga_bmval, resp->rqstp, 0);
3189
3190 nfserr = nfsd4_encode_fattr(xdr, fhp, fhp->fh_export, fhp->fh_dentry,
3191 getattr->ga_bmval,
3192 resp->rqstp, 0);
3193 return nfserr;
3194} 3178}
3195 3179
3196static __be32 3180static __be32
@@ -3201,14 +3185,12 @@ nfsd4_encode_getfh(struct nfsd4_compoundres *resp, __be32 nfserr, struct svc_fh
3201 unsigned int len; 3185 unsigned int len;
3202 __be32 *p; 3186 __be32 *p;
3203 3187
3204 if (!nfserr) { 3188 len = fhp->fh_handle.fh_size;
3205 len = fhp->fh_handle.fh_size; 3189 p = xdr_reserve_space(xdr, len + 4);
3206 p = xdr_reserve_space(xdr, len + 4); 3190 if (!p)
3207 if (!p) 3191 return nfserr_resource;
3208 return nfserr_resource; 3192 p = xdr_encode_opaque(p, &fhp->fh_handle.fh_base, len);
3209 p = xdr_encode_opaque(p, &fhp->fh_handle.fh_base, len); 3193 return 0;
3210 }
3211 return nfserr;
3212} 3194}
3213 3195
3214/* 3196/*
@@ -3278,10 +3260,7 @@ nfsd4_encode_locku(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_l
3278{ 3260{
3279 struct xdr_stream *xdr = &resp->xdr; 3261 struct xdr_stream *xdr = &resp->xdr;
3280 3262
3281 if (!nfserr) 3263 return nfsd4_encode_stateid(xdr, &locku->lu_stateid);
3282 nfserr = nfsd4_encode_stateid(xdr, &locku->lu_stateid);
3283
3284 return nfserr;
3285} 3264}
3286 3265
3287 3266
@@ -3291,13 +3270,11 @@ nfsd4_encode_link(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_li
3291 struct xdr_stream *xdr = &resp->xdr; 3270 struct xdr_stream *xdr = &resp->xdr;
3292 __be32 *p; 3271 __be32 *p;
3293 3272
3294 if (!nfserr) { 3273 p = xdr_reserve_space(xdr, 20);
3295 p = xdr_reserve_space(xdr, 20); 3274 if (!p)
3296 if (!p) 3275 return nfserr_resource;
3297 return nfserr_resource; 3276 p = encode_cinfo(p, &link->li_cinfo);
3298 p = encode_cinfo(p, &link->li_cinfo); 3277 return 0;
3299 }
3300 return nfserr;
3301} 3278}
3302 3279
3303 3280
@@ -3307,12 +3284,9 @@ nfsd4_encode_open(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_op
3307 struct xdr_stream *xdr = &resp->xdr; 3284 struct xdr_stream *xdr = &resp->xdr;
3308 __be32 *p; 3285 __be32 *p;
3309 3286
3310 if (nfserr)
3311 goto out;
3312
3313 nfserr = nfsd4_encode_stateid(xdr, &open->op_stateid); 3287 nfserr = nfsd4_encode_stateid(xdr, &open->op_stateid);
3314 if (nfserr) 3288 if (nfserr)
3315 goto out; 3289 return nfserr;
3316 p = xdr_reserve_space(xdr, 24); 3290 p = xdr_reserve_space(xdr, 24);
3317 if (!p) 3291 if (!p)
3318 return nfserr_resource; 3292 return nfserr_resource;
@@ -3322,7 +3296,7 @@ nfsd4_encode_open(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_op
3322 nfserr = nfsd4_encode_bitmap(xdr, open->op_bmval[0], open->op_bmval[1], 3296 nfserr = nfsd4_encode_bitmap(xdr, open->op_bmval[0], open->op_bmval[1],
3323 open->op_bmval[2]); 3297 open->op_bmval[2]);
3324 if (nfserr) 3298 if (nfserr)
3325 goto out; 3299 return nfserr;
3326 3300
3327 p = xdr_reserve_space(xdr, 4); 3301 p = xdr_reserve_space(xdr, 4);
3328 if (!p) 3302 if (!p)
@@ -3395,8 +3369,7 @@ nfsd4_encode_open(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_op
3395 BUG(); 3369 BUG();
3396 } 3370 }
3397 /* XXX save filehandle here */ 3371 /* XXX save filehandle here */
3398out: 3372 return 0;
3399 return nfserr;
3400} 33