@@ -233,7 +233,7 @@ static int xdr_decode_AFSFetchStatus(struct afs_call *call,
233
233
234
234
bad :
235
235
xdr_dump_bad (* _bp );
236
- return afs_protocol_error (call , - EBADMSG );
236
+ return afs_protocol_error (call , - EBADMSG , afs_eproto_bad_status );
237
237
}
238
238
239
239
/*
@@ -399,9 +399,10 @@ static int afs_deliver_fs_fetch_status_vnode(struct afs_call *call)
399
399
400
400
/* unmarshall the reply once we've received all of it */
401
401
bp = call -> buffer ;
402
- if (afs_decode_status (call , & bp , & vnode -> status , vnode ,
403
- & call -> expected_version , NULL ) < 0 )
404
- return afs_protocol_error (call , - EBADMSG );
402
+ ret = afs_decode_status (call , & bp , & vnode -> status , vnode ,
403
+ & call -> expected_version , NULL );
404
+ if (ret < 0 )
405
+ return ret ;
405
406
xdr_decode_AFSCallBack (call , vnode , & bp );
406
407
if (call -> reply [1 ])
407
408
xdr_decode_AFSVolSync (& bp , call -> reply [1 ]);
@@ -580,9 +581,10 @@ static int afs_deliver_fs_fetch_data(struct afs_call *call)
580
581
return ret ;
581
582
582
583
bp = call -> buffer ;
583
- if (afs_decode_status (call , & bp , & vnode -> status , vnode ,
584
- & vnode -> status .data_version , req ) < 0 )
585
- return afs_protocol_error (call , - EBADMSG );
584
+ ret = afs_decode_status (call , & bp , & vnode -> status , vnode ,
585
+ & vnode -> status .data_version , req );
586
+ if (ret < 0 )
587
+ return ret ;
586
588
xdr_decode_AFSCallBack (call , vnode , & bp );
587
589
if (call -> reply [1 ])
588
590
xdr_decode_AFSVolSync (& bp , call -> reply [1 ]);
@@ -733,10 +735,13 @@ static int afs_deliver_fs_create_vnode(struct afs_call *call)
733
735
/* unmarshall the reply once we've received all of it */
734
736
bp = call -> buffer ;
735
737
xdr_decode_AFSFid (& bp , call -> reply [1 ]);
736
- if (afs_decode_status (call , & bp , call -> reply [2 ], NULL , NULL , NULL ) < 0 ||
737
- afs_decode_status (call , & bp , & vnode -> status , vnode ,
738
- & call -> expected_version , NULL ) < 0 )
739
- return afs_protocol_error (call , - EBADMSG );
738
+ ret = afs_decode_status (call , & bp , call -> reply [2 ], NULL , NULL , NULL );
739
+ if (ret < 0 )
740
+ return ret ;
741
+ ret = afs_decode_status (call , & bp , & vnode -> status , vnode ,
742
+ & call -> expected_version , NULL );
743
+ if (ret < 0 )
744
+ return ret ;
740
745
xdr_decode_AFSCallBack_raw (& bp , call -> reply [3 ]);
741
746
/* xdr_decode_AFSVolSync(&bp, call->reply[X]); */
742
747
@@ -839,9 +844,10 @@ static int afs_deliver_fs_remove(struct afs_call *call)
839
844
840
845
/* unmarshall the reply once we've received all of it */
841
846
bp = call -> buffer ;
842
- if (afs_decode_status (call , & bp , & vnode -> status , vnode ,
843
- & call -> expected_version , NULL ) < 0 )
844
- return afs_protocol_error (call , - EBADMSG );
847
+ ret = afs_decode_status (call , & bp , & vnode -> status , vnode ,
848
+ & call -> expected_version , NULL );
849
+ if (ret < 0 )
850
+ return ret ;
845
851
/* xdr_decode_AFSVolSync(&bp, call->reply[X]); */
846
852
847
853
_leave (" = 0 [done]" );
@@ -929,10 +935,13 @@ static int afs_deliver_fs_link(struct afs_call *call)
929
935
930
936
/* unmarshall the reply once we've received all of it */
931
937
bp = call -> buffer ;
932
- if (afs_decode_status (call , & bp , & vnode -> status , vnode , NULL , NULL ) < 0 ||
933
- afs_decode_status (call , & bp , & dvnode -> status , dvnode ,
934
- & call -> expected_version , NULL ) < 0 )
935
- return afs_protocol_error (call , - EBADMSG );
938
+ ret = afs_decode_status (call , & bp , & vnode -> status , vnode , NULL , NULL );
939
+ if (ret < 0 )
940
+ return ret ;
941
+ ret = afs_decode_status (call , & bp , & dvnode -> status , dvnode ,
942
+ & call -> expected_version , NULL );
943
+ if (ret < 0 )
944
+ return ret ;
936
945
/* xdr_decode_AFSVolSync(&bp, call->reply[X]); */
937
946
938
947
_leave (" = 0 [done]" );
@@ -1016,10 +1025,13 @@ static int afs_deliver_fs_symlink(struct afs_call *call)
1016
1025
/* unmarshall the reply once we've received all of it */
1017
1026
bp = call -> buffer ;
1018
1027
xdr_decode_AFSFid (& bp , call -> reply [1 ]);
1019
- if (afs_decode_status (call , & bp , call -> reply [2 ], NULL , NULL , NULL ) ||
1020
- afs_decode_status (call , & bp , & vnode -> status , vnode ,
1021
- & call -> expected_version , NULL ) < 0 )
1022
- return afs_protocol_error (call , - EBADMSG );
1028
+ ret = afs_decode_status (call , & bp , call -> reply [2 ], NULL , NULL , NULL );
1029
+ if (ret < 0 )
1030
+ return ret ;
1031
+ ret = afs_decode_status (call , & bp , & vnode -> status , vnode ,
1032
+ & call -> expected_version , NULL );
1033
+ if (ret < 0 )
1034
+ return ret ;
1023
1035
/* xdr_decode_AFSVolSync(&bp, call->reply[X]); */
1024
1036
1025
1037
_leave (" = 0 [done]" );
@@ -1122,13 +1134,16 @@ static int afs_deliver_fs_rename(struct afs_call *call)
1122
1134
1123
1135
/* unmarshall the reply once we've received all of it */
1124
1136
bp = call -> buffer ;
1125
- if (afs_decode_status (call , & bp , & orig_dvnode -> status , orig_dvnode ,
1126
- & call -> expected_version , NULL ) < 0 )
1127
- return afs_protocol_error (call , - EBADMSG );
1128
- if (new_dvnode != orig_dvnode &&
1129
- afs_decode_status (call , & bp , & new_dvnode -> status , new_dvnode ,
1130
- & call -> expected_version_2 , NULL ) < 0 )
1131
- return afs_protocol_error (call , - EBADMSG );
1137
+ ret = afs_decode_status (call , & bp , & orig_dvnode -> status , orig_dvnode ,
1138
+ & call -> expected_version , NULL );
1139
+ if (ret < 0 )
1140
+ return ret ;
1141
+ if (new_dvnode != orig_dvnode ) {
1142
+ ret = afs_decode_status (call , & bp , & new_dvnode -> status , new_dvnode ,
1143
+ & call -> expected_version_2 , NULL );
1144
+ if (ret < 0 )
1145
+ return ret ;
1146
+ }
1132
1147
/* xdr_decode_AFSVolSync(&bp, call->reply[X]); */
1133
1148
1134
1149
_leave (" = 0 [done]" );
@@ -1231,9 +1246,10 @@ static int afs_deliver_fs_store_data(struct afs_call *call)
1231
1246
1232
1247
/* unmarshall the reply once we've received all of it */
1233
1248
bp = call -> buffer ;
1234
- if (afs_decode_status (call , & bp , & vnode -> status , vnode ,
1235
- & call -> expected_version , NULL ) < 0 )
1236
- return afs_protocol_error (call , - EBADMSG );
1249
+ ret = afs_decode_status (call , & bp , & vnode -> status , vnode ,
1250
+ & call -> expected_version , NULL );
1251
+ if (ret < 0 )
1252
+ return ret ;
1237
1253
/* xdr_decode_AFSVolSync(&bp, call->reply[X]); */
1238
1254
1239
1255
afs_pages_written_back (vnode , call );
@@ -1407,9 +1423,10 @@ static int afs_deliver_fs_store_status(struct afs_call *call)
1407
1423
1408
1424
/* unmarshall the reply once we've received all of it */
1409
1425
bp = call -> buffer ;
1410
- if (afs_decode_status (call , & bp , & vnode -> status , vnode ,
1411
- & call -> expected_version , NULL ) < 0 )
1412
- return afs_protocol_error (call , - EBADMSG );
1426
+ ret = afs_decode_status (call , & bp , & vnode -> status , vnode ,
1427
+ & call -> expected_version , NULL );
1428
+ if (ret < 0 )
1429
+ return ret ;
1413
1430
/* xdr_decode_AFSVolSync(&bp, call->reply[X]); */
1414
1431
1415
1432
_leave (" = 0 [done]" );
@@ -1612,7 +1629,8 @@ static int afs_deliver_fs_get_volume_status(struct afs_call *call)
1612
1629
call -> count = ntohl (call -> tmp );
1613
1630
_debug ("volname length: %u" , call -> count );
1614
1631
if (call -> count >= AFSNAMEMAX )
1615
- return afs_protocol_error (call , - EBADMSG );
1632
+ return afs_protocol_error (call , - EBADMSG ,
1633
+ afs_eproto_volname_len );
1616
1634
call -> offset = 0 ;
1617
1635
call -> unmarshall ++ ;
1618
1636
@@ -1659,7 +1677,8 @@ static int afs_deliver_fs_get_volume_status(struct afs_call *call)
1659
1677
call -> count = ntohl (call -> tmp );
1660
1678
_debug ("offline msg length: %u" , call -> count );
1661
1679
if (call -> count >= AFSNAMEMAX )
1662
- return afs_protocol_error (call , - EBADMSG );
1680
+ return afs_protocol_error (call , - EBADMSG ,
1681
+ afs_eproto_offline_msg_len );
1663
1682
call -> offset = 0 ;
1664
1683
call -> unmarshall ++ ;
1665
1684
@@ -1706,7 +1725,8 @@ static int afs_deliver_fs_get_volume_status(struct afs_call *call)
1706
1725
call -> count = ntohl (call -> tmp );
1707
1726
_debug ("motd length: %u" , call -> count );
1708
1727
if (call -> count >= AFSNAMEMAX )
1709
- return afs_protocol_error (call , - EBADMSG );
1728
+ return afs_protocol_error (call , - EBADMSG ,
1729
+ afs_eproto_motd_len );
1710
1730
call -> offset = 0 ;
1711
1731
call -> unmarshall ++ ;
1712
1732
@@ -2109,8 +2129,10 @@ static int afs_deliver_fs_fetch_status(struct afs_call *call)
2109
2129
2110
2130
/* unmarshall the reply once we've received all of it */
2111
2131
bp = call -> buffer ;
2112
- afs_decode_status (call , & bp , status , vnode ,
2113
- & call -> expected_version , NULL );
2132
+ ret = afs_decode_status (call , & bp , status , vnode ,
2133
+ & call -> expected_version , NULL );
2134
+ if (ret < 0 )
2135
+ return ret ;
2114
2136
callback [call -> count ].version = ntohl (bp [0 ]);
2115
2137
callback [call -> count ].expiry = ntohl (bp [1 ]);
2116
2138
callback [call -> count ].type = ntohl (bp [2 ]);
@@ -2206,7 +2228,8 @@ static int afs_deliver_fs_inline_bulk_status(struct afs_call *call)
2206
2228
tmp = ntohl (call -> tmp );
2207
2229
_debug ("status count: %u/%u" , tmp , call -> count2 );
2208
2230
if (tmp != call -> count2 )
2209
- return afs_protocol_error (call , - EBADMSG );
2231
+ return afs_protocol_error (call , - EBADMSG ,
2232
+ afs_eproto_ibulkst_count );
2210
2233
2211
2234
call -> count = 0 ;
2212
2235
call -> unmarshall ++ ;
@@ -2221,10 +2244,11 @@ static int afs_deliver_fs_inline_bulk_status(struct afs_call *call)
2221
2244
2222
2245
bp = call -> buffer ;
2223
2246
statuses = call -> reply [1 ];
2224
- if (afs_decode_status (call , & bp , & statuses [call -> count ],
2225
- call -> count == 0 ? vnode : NULL ,
2226
- NULL , NULL ) < 0 )
2227
- return afs_protocol_error (call , - EBADMSG );
2247
+ ret = afs_decode_status (call , & bp , & statuses [call -> count ],
2248
+ call -> count == 0 ? vnode : NULL ,
2249
+ NULL , NULL );
2250
+ if (ret < 0 )
2251
+ return ret ;
2228
2252
2229
2253
call -> count ++ ;
2230
2254
if (call -> count < call -> count2 )
@@ -2244,7 +2268,8 @@ static int afs_deliver_fs_inline_bulk_status(struct afs_call *call)
2244
2268
tmp = ntohl (call -> tmp );
2245
2269
_debug ("CB count: %u" , tmp );
2246
2270
if (tmp != call -> count2 )
2247
- return afs_protocol_error (call , - EBADMSG );
2271
+ return afs_protocol_error (call , - EBADMSG ,
2272
+ afs_eproto_ibulkst_cb_count );
2248
2273
call -> count = 0 ;
2249
2274
call -> unmarshall ++ ;
2250
2275
more_cbs :
0 commit comments