@@ -176,13 +176,13 @@ static int afs_deliver_cb_callback(struct afs_call *call)
176
176
177
177
switch (call -> unmarshall ) {
178
178
case 0 :
179
- call -> offset = 0 ;
179
+ afs_extract_to_tmp ( call ) ;
180
180
call -> unmarshall ++ ;
181
181
182
182
/* extract the FID array and its count in two steps */
183
183
case 1 :
184
184
_debug ("extract FID count" );
185
- ret = afs_extract_data (call , & call -> tmp , 4 , true);
185
+ ret = afs_extract_data (call , true);
186
186
if (ret < 0 )
187
187
return ret ;
188
188
@@ -196,13 +196,12 @@ static int afs_deliver_cb_callback(struct afs_call *call)
196
196
GFP_KERNEL );
197
197
if (!call -> buffer )
198
198
return - ENOMEM ;
199
- call -> offset = 0 ;
199
+ afs_extract_to_buf ( call , call -> count * 3 * 4 ) ;
200
200
call -> unmarshall ++ ;
201
201
202
202
case 2 :
203
203
_debug ("extract FID array" );
204
- ret = afs_extract_data (call , call -> buffer ,
205
- call -> count * 3 * 4 , true);
204
+ ret = afs_extract_data (call , true);
206
205
if (ret < 0 )
207
206
return ret ;
208
207
@@ -222,13 +221,13 @@ static int afs_deliver_cb_callback(struct afs_call *call)
222
221
cb -> cb .type = AFSCM_CB_UNTYPED ;
223
222
}
224
223
225
- call -> offset = 0 ;
224
+ afs_extract_to_tmp ( call ) ;
226
225
call -> unmarshall ++ ;
227
226
228
227
/* extract the callback array and its count in two steps */
229
228
case 3 :
230
229
_debug ("extract CB count" );
231
- ret = afs_extract_data (call , & call -> tmp , 4 , true);
230
+ ret = afs_extract_data (call , true);
232
231
if (ret < 0 )
233
232
return ret ;
234
233
@@ -237,13 +236,12 @@ static int afs_deliver_cb_callback(struct afs_call *call)
237
236
if (call -> count2 != call -> count && call -> count2 != 0 )
238
237
return afs_protocol_error (call , - EBADMSG ,
239
238
afs_eproto_cb_count );
240
- call -> offset = 0 ;
239
+ afs_extract_to_buf ( call , call -> count2 * 3 * 4 ) ;
241
240
call -> unmarshall ++ ;
242
241
243
242
case 4 :
244
243
_debug ("extract CB array" );
245
- ret = afs_extract_data (call , call -> buffer ,
246
- call -> count2 * 3 * 4 , false);
244
+ ret = afs_extract_data (call , false);
247
245
if (ret < 0 )
248
246
return ret ;
249
247
@@ -256,7 +254,6 @@ static int afs_deliver_cb_callback(struct afs_call *call)
256
254
cb -> cb .type = ntohl (* bp ++ );
257
255
}
258
256
259
- call -> offset = 0 ;
260
257
call -> unmarshall ++ ;
261
258
case 5 :
262
259
break ;
@@ -303,7 +300,8 @@ static int afs_deliver_cb_init_call_back_state(struct afs_call *call)
303
300
304
301
rxrpc_kernel_get_peer (call -> net -> socket , call -> rxcall , & srx );
305
302
306
- ret = afs_extract_data (call , NULL , 0 , false);
303
+ afs_extract_discard (call , 0 );
304
+ ret = afs_extract_data (call , false);
307
305
if (ret < 0 )
308
306
return ret ;
309
307
@@ -332,16 +330,15 @@ static int afs_deliver_cb_init_call_back_state3(struct afs_call *call)
332
330
333
331
switch (call -> unmarshall ) {
334
332
case 0 :
335
- call -> offset = 0 ;
336
333
call -> buffer = kmalloc_array (11 , sizeof (__be32 ), GFP_KERNEL );
337
334
if (!call -> buffer )
338
335
return - ENOMEM ;
336
+ afs_extract_to_buf (call , 11 * sizeof (__be32 ));
339
337
call -> unmarshall ++ ;
340
338
341
339
case 1 :
342
340
_debug ("extract UUID" );
343
- ret = afs_extract_data (call , call -> buffer ,
344
- 11 * sizeof (__be32 ), false);
341
+ ret = afs_extract_data (call , false);
345
342
switch (ret ) {
346
343
case 0 : break ;
347
344
case - EAGAIN : return 0 ;
@@ -364,7 +361,6 @@ static int afs_deliver_cb_init_call_back_state3(struct afs_call *call)
364
361
for (loop = 0 ; loop < 6 ; loop ++ )
365
362
r -> node [loop ] = ntohl (b [loop + 5 ]);
366
363
367
- call -> offset = 0 ;
368
364
call -> unmarshall ++ ;
369
365
370
366
case 2 :
@@ -407,7 +403,8 @@ static int afs_deliver_cb_probe(struct afs_call *call)
407
403
408
404
_enter ("" );
409
405
410
- ret = afs_extract_data (call , NULL , 0 , false);
406
+ afs_extract_discard (call , 0 );
407
+ ret = afs_extract_data (call , false);
411
408
if (ret < 0 )
412
409
return ret ;
413
410
@@ -455,16 +452,15 @@ static int afs_deliver_cb_probe_uuid(struct afs_call *call)
455
452
456
453
switch (call -> unmarshall ) {
457
454
case 0 :
458
- call -> offset = 0 ;
459
455
call -> buffer = kmalloc_array (11 , sizeof (__be32 ), GFP_KERNEL );
460
456
if (!call -> buffer )
461
457
return - ENOMEM ;
458
+ afs_extract_to_buf (call , 11 * sizeof (__be32 ));
462
459
call -> unmarshall ++ ;
463
460
464
461
case 1 :
465
462
_debug ("extract UUID" );
466
- ret = afs_extract_data (call , call -> buffer ,
467
- 11 * sizeof (__be32 ), false);
463
+ ret = afs_extract_data (call , false);
468
464
switch (ret ) {
469
465
case 0 : break ;
470
466
case - EAGAIN : return 0 ;
@@ -487,7 +483,6 @@ static int afs_deliver_cb_probe_uuid(struct afs_call *call)
487
483
for (loop = 0 ; loop < 6 ; loop ++ )
488
484
r -> node [loop ] = ntohl (b [loop + 5 ]);
489
485
490
- call -> offset = 0 ;
491
486
call -> unmarshall ++ ;
492
487
493
488
case 2 :
@@ -572,7 +567,8 @@ static int afs_deliver_cb_tell_me_about_yourself(struct afs_call *call)
572
567
573
568
_enter ("" );
574
569
575
- ret = afs_extract_data (call , NULL , 0 , false);
570
+ afs_extract_discard (call , 0 );
571
+ ret = afs_extract_data (call , false);
576
572
if (ret < 0 )
577
573
return ret ;
578
574
0 commit comments