• Home
  • Raw
  • Download

Lines Matching full:call

29 static inline void afs_use_fs_server(struct afs_call *call, struct afs_cb_interest *cbi)  in afs_use_fs_server()  argument
31 call->cbi = afs_get_cb_interest(cbi); in afs_use_fs_server()
129 static int xdr_decode_AFSFetchStatus(struct afs_call *call, in xdr_decode_AFSFetchStatus() argument
137 bool inline_error = (call->operation_ID == afs_FS_InlineBulkStatus); in xdr_decode_AFSFetchStatus()
198 EXTRACT_M(caller_access); /* call ticket dependent */ in xdr_decode_AFSFetchStatus()
236 return afs_protocol_error(call, -EBADMSG); in xdr_decode_AFSFetchStatus()
243 static int afs_decode_status(struct afs_call *call, in afs_decode_status() argument
253 return xdr_decode_AFSFetchStatus(call, _bp, status, vnode, in afs_decode_status()
257 ret = xdr_decode_AFSFetchStatus(call, _bp, status, vnode, in afs_decode_status()
266 static void xdr_decode_AFSCallBack(struct afs_call *call, in xdr_decode_AFSCallBack() argument
270 struct afs_cb_interest *old, *cbi = call->cbi; in xdr_decode_AFSCallBack()
276 if (call->cb_break == afs_cb_break_sum(vnode, cbi)) { in xdr_decode_AFSCallBack()
282 if (old != call->cbi) { in xdr_decode_AFSCallBack()
292 call->cbi = cbi; in xdr_decode_AFSCallBack()
388 static int afs_deliver_fs_fetch_status_vnode(struct afs_call *call) in afs_deliver_fs_fetch_status_vnode() argument
390 struct afs_vnode *vnode = call->reply[0]; in afs_deliver_fs_fetch_status_vnode()
394 ret = afs_transfer_reply(call); in afs_deliver_fs_fetch_status_vnode()
401 bp = call->buffer; in afs_deliver_fs_fetch_status_vnode()
402 if (afs_decode_status(call, &bp, &vnode->status, vnode, in afs_deliver_fs_fetch_status_vnode()
403 &call->expected_version, NULL) < 0) in afs_deliver_fs_fetch_status_vnode()
404 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_fetch_status_vnode()
405 xdr_decode_AFSCallBack(call, vnode, &bp); in afs_deliver_fs_fetch_status_vnode()
406 if (call->reply[1]) in afs_deliver_fs_fetch_status_vnode()
407 xdr_decode_AFSVolSync(&bp, call->reply[1]); in afs_deliver_fs_fetch_status_vnode()
430 struct afs_call *call; in afs_fs_fetch_file_status() local
437 call = afs_alloc_flat_call(net, &afs_RXFSFetchStatus_vnode, in afs_fs_fetch_file_status()
439 if (!call) { in afs_fs_fetch_file_status()
444 call->key = fc->key; in afs_fs_fetch_file_status()
445 call->reply[0] = vnode; in afs_fs_fetch_file_status()
446 call->reply[1] = volsync; in afs_fs_fetch_file_status()
447 call->expected_version = new_inode ? 1 : vnode->status.data_version; in afs_fs_fetch_file_status()
450 bp = call->request; in afs_fs_fetch_file_status()
456 call->cb_break = fc->cb_break; in afs_fs_fetch_file_status()
457 afs_use_fs_server(call, fc->cbi); in afs_fs_fetch_file_status()
458 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_fetch_file_status()
459 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_fetch_file_status()
465 static int afs_deliver_fs_fetch_data(struct afs_call *call) in afs_deliver_fs_fetch_data() argument
467 struct afs_vnode *vnode = call->reply[0]; in afs_deliver_fs_fetch_data()
468 struct afs_read *req = call->reply[2]; in afs_deliver_fs_fetch_data()
475 call->unmarshall, call->offset, call->count, in afs_deliver_fs_fetch_data()
478 switch (call->unmarshall) { in afs_deliver_fs_fetch_data()
481 call->offset = 0; in afs_deliver_fs_fetch_data()
482 call->unmarshall++; in afs_deliver_fs_fetch_data()
483 if (call->operation_ID != FSFETCHDATA64) { in afs_deliver_fs_fetch_data()
484 call->unmarshall++; in afs_deliver_fs_fetch_data()
493 ret = afs_extract_data(call, &call->tmp, 4, true); in afs_deliver_fs_fetch_data()
497 req->actual_len = ntohl(call->tmp); in afs_deliver_fs_fetch_data()
499 call->offset = 0; in afs_deliver_fs_fetch_data()
500 call->unmarshall++; in afs_deliver_fs_fetch_data()
506 ret = afs_extract_data(call, &call->tmp, 4, true); in afs_deliver_fs_fetch_data()
510 req->actual_len |= ntohl(call->tmp); in afs_deliver_fs_fetch_data()
514 call->offset = req->pos & (PAGE_SIZE - 1); in afs_deliver_fs_fetch_data()
518 call->unmarshall++; in afs_deliver_fs_fetch_data()
522 if (req->remain > PAGE_SIZE - call->offset) in afs_deliver_fs_fetch_data()
523 size = PAGE_SIZE - call->offset; in afs_deliver_fs_fetch_data()
526 call->count = call->offset + size; in afs_deliver_fs_fetch_data()
527 ASSERTCMP(call->count, <=, PAGE_SIZE); in afs_deliver_fs_fetch_data()
533 req->remain, req->actual_len, call->offset, call->count); in afs_deliver_fs_fetch_data()
536 ret = afs_extract_data(call, buffer, call->count, true); in afs_deliver_fs_fetch_data()
540 if (call->offset == PAGE_SIZE) { in afs_deliver_fs_fetch_data()
542 req->page_done(call, req); in afs_deliver_fs_fetch_data()
545 call->offset = 0; in afs_deliver_fs_fetch_data()
547 call->unmarshall = 4; in afs_deliver_fs_fetch_data()
559 call->count = size; in afs_deliver_fs_fetch_data()
561 req->remain, req->actual_len, call->offset, call->count); in afs_deliver_fs_fetch_data()
563 call->offset = 0; in afs_deliver_fs_fetch_data()
564 ret = afs_extract_data(call, afs_discard_buffer, call->count, true); in afs_deliver_fs_fetch_data()
565 req->remain -= call->offset; in afs_deliver_fs_fetch_data()
572 call->offset = 0; in afs_deliver_fs_fetch_data()
573 call->unmarshall = 5; in afs_deliver_fs_fetch_data()
577 ret = afs_extract_data(call, call->buffer, in afs_deliver_fs_fetch_data()
582 bp = call->buffer; in afs_deliver_fs_fetch_data()
583 if (afs_decode_status(call, &bp, &vnode->status, vnode, in afs_deliver_fs_fetch_data()
585 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_fetch_data()
586 xdr_decode_AFSCallBack(call, vnode, &bp); in afs_deliver_fs_fetch_data()
587 if (call->reply[1]) in afs_deliver_fs_fetch_data()
588 xdr_decode_AFSVolSync(&bp, call->reply[1]); in afs_deliver_fs_fetch_data()
590 call->offset = 0; in afs_deliver_fs_fetch_data()
591 call->unmarshall++; in afs_deliver_fs_fetch_data()
598 if (call->count < PAGE_SIZE) in afs_deliver_fs_fetch_data()
600 call->count, PAGE_SIZE); in afs_deliver_fs_fetch_data()
602 req->page_done(call, req); in afs_deliver_fs_fetch_data()
603 call->count = 0; in afs_deliver_fs_fetch_data()
610 static void afs_fetch_data_destructor(struct afs_call *call) in afs_fetch_data_destructor() argument
612 struct afs_read *req = call->reply[2]; in afs_fetch_data_destructor()
615 afs_flat_call_destructor(call); in afs_fetch_data_destructor()
641 struct afs_call *call; in afs_fs_fetch_data64() local
647 call = afs_alloc_flat_call(net, &afs_RXFSFetchData64, 32, (21 + 3 + 6) * 4); in afs_fs_fetch_data64()
648 if (!call) in afs_fs_fetch_data64()
651 call->key = fc->key; in afs_fs_fetch_data64()
652 call->reply[0] = vnode; in afs_fs_fetch_data64()
653 call->reply[1] = NULL; /* volsync */ in afs_fs_fetch_data64()
654 call->reply[2] = req; in afs_fs_fetch_data64()
655 call->expected_version = vnode->status.data_version; in afs_fs_fetch_data64()
658 bp = call->request; in afs_fs_fetch_data64()
669 call->cb_break = fc->cb_break; in afs_fs_fetch_data64()
670 afs_use_fs_server(call, fc->cbi); in afs_fs_fetch_data64()
671 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_fetch_data64()
672 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_fetch_data64()
681 struct afs_call *call; in afs_fs_fetch_data() local
692 call = afs_alloc_flat_call(net, &afs_RXFSFetchData, 24, (21 + 3 + 6) * 4); in afs_fs_fetch_data()
693 if (!call) in afs_fs_fetch_data()
696 call->key = fc->key; in afs_fs_fetch_data()
697 call->reply[0] = vnode; in afs_fs_fetch_data()
698 call->reply[1] = NULL; /* volsync */ in afs_fs_fetch_data()
699 call->reply[2] = req; in afs_fs_fetch_data()
700 call->expected_version = vnode->status.data_version; in afs_fs_fetch_data()
703 bp = call->request; in afs_fs_fetch_data()
712 call->cb_break = fc->cb_break; in afs_fs_fetch_data()
713 afs_use_fs_server(call, fc->cbi); in afs_fs_fetch_data()
714 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_fetch_data()
715 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_fetch_data()
721 static int afs_deliver_fs_create_vnode(struct afs_call *call) in afs_deliver_fs_create_vnode() argument
723 struct afs_vnode *vnode = call->reply[0]; in afs_deliver_fs_create_vnode()
727 _enter("{%u}", call->unmarshall); in afs_deliver_fs_create_vnode()
729 ret = afs_transfer_reply(call); in afs_deliver_fs_create_vnode()
734 bp = call->buffer; in afs_deliver_fs_create_vnode()
735 xdr_decode_AFSFid(&bp, call->reply[1]); in afs_deliver_fs_create_vnode()
736 if (afs_decode_status(call, &bp, call->reply[2], NULL, NULL, NULL) < 0 || in afs_deliver_fs_create_vnode()
737 afs_decode_status(call, &bp, &vnode->status, vnode, in afs_deliver_fs_create_vnode()
738 &call->expected_version, NULL) < 0) in afs_deliver_fs_create_vnode()
739 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_create_vnode()
740 xdr_decode_AFSCallBack_raw(&bp, call->reply[3]); in afs_deliver_fs_create_vnode()
741 /* xdr_decode_AFSVolSync(&bp, call->reply[X]); */ in afs_deliver_fs_create_vnode()
776 struct afs_call *call; in afs_fs_create() local
787 call = afs_alloc_flat_call( in afs_fs_create()
790 if (!call) in afs_fs_create()
793 call->key = fc->key; in afs_fs_create()
794 call->reply[0] = vnode; in afs_fs_create()
795 call->reply[1] = newfid; in afs_fs_create()
796 call->reply[2] = newstatus; in afs_fs_create()
797 call->reply[3] = newcb; in afs_fs_create()
798 call->expected_version = current_data_version + 1; in afs_fs_create()
801 bp = call->request; in afs_fs_create()
820 afs_use_fs_server(call, fc->cbi); in afs_fs_create()
821 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_create()
822 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_create()
828 static int afs_deliver_fs_remove(struct afs_call *call) in afs_deliver_fs_remove() argument
830 struct afs_vnode *vnode = call->reply[0]; in afs_deliver_fs_remove()
834 _enter("{%u}", call->unmarshall); in afs_deliver_fs_remove()
836 ret = afs_transfer_reply(call); in afs_deliver_fs_remove()
841 bp = call->buffer; in afs_deliver_fs_remove()
842 if (afs_decode_status(call, &bp, &vnode->status, vnode, in afs_deliver_fs_remove()
843 &call->expected_version, NULL) < 0) in afs_deliver_fs_remove()
844 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_remove()
845 /* xdr_decode_AFSVolSync(&bp, call->reply[X]); */ in afs_deliver_fs_remove()
875 struct afs_call *call; in afs_fs_remove() local
886 call = afs_alloc_flat_call( in afs_fs_remove()
889 if (!call) in afs_fs_remove()
892 call->key = fc->key; in afs_fs_remove()
893 call->reply[0] = vnode; in afs_fs_remove()
894 call->expected_version = current_data_version + 1; in afs_fs_remove()
897 bp = call->request; in afs_fs_remove()
910 afs_use_fs_server(call, fc->cbi); in afs_fs_remove()
911 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_remove()
912 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_remove()
918 static int afs_deliver_fs_link(struct afs_call *call) in afs_deliver_fs_link() argument
920 struct afs_vnode *dvnode = call->reply[0], *vnode = call->reply[1]; in afs_deliver_fs_link()
924 _enter("{%u}", call->unmarshall); in afs_deliver_fs_link()
926 ret = afs_transfer_reply(call); in afs_deliver_fs_link()
931 bp = call->buffer; in afs_deliver_fs_link()
932 if (afs_decode_status(call, &bp, &vnode->status, vnode, NULL, NULL) < 0 || in afs_deliver_fs_link()
933 afs_decode_status(call, &bp, &dvnode->status, dvnode, in afs_deliver_fs_link()
934 &call->expected_version, NULL) < 0) in afs_deliver_fs_link()
935 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_link()
936 /* xdr_decode_AFSVolSync(&bp, call->reply[X]); */ in afs_deliver_fs_link()
959 struct afs_call *call; in afs_fs_link() local
970 call = afs_alloc_flat_call(net, &afs_RXFSLink, reqsz, (21 + 21 + 6) * 4); in afs_fs_link()
971 if (!call) in afs_fs_link()
974 call->key = fc->key; in afs_fs_link()
975 call->reply[0] = dvnode; in afs_fs_link()
976 call->reply[1] = vnode; in afs_fs_link()
977 call->expected_version = current_data_version + 1; in afs_fs_link()
980 bp = call->request; in afs_fs_link()
996 afs_use_fs_server(call, fc->cbi); in afs_fs_link()
997 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_link()
998 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_link()
1004 static int afs_deliver_fs_symlink(struct afs_call *call) in afs_deliver_fs_symlink() argument
1006 struct afs_vnode *vnode = call->reply[0]; in afs_deliver_fs_symlink()
1010 _enter("{%u}", call->unmarshall); in afs_deliver_fs_symlink()
1012 ret = afs_transfer_reply(call); in afs_deliver_fs_symlink()
1017 bp = call->buffer; in afs_deliver_fs_symlink()
1018 xdr_decode_AFSFid(&bp, call->reply[1]); in afs_deliver_fs_symlink()
1019 if (afs_decode_status(call, &bp, call->reply[2], NULL, NULL, NULL) || in afs_deliver_fs_symlink()
1020 afs_decode_status(call, &bp, &vnode->status, vnode, in afs_deliver_fs_symlink()
1021 &call->expected_version, NULL) < 0) in afs_deliver_fs_symlink()
1022 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_symlink()
1023 /* xdr_decode_AFSVolSync(&bp, call->reply[X]); */ in afs_deliver_fs_symlink()
1050 struct afs_call *call; in afs_fs_symlink() local
1065 call = afs_alloc_flat_call(net, &afs_RXFSSymlink, reqsz, in afs_fs_symlink()
1067 if (!call) in afs_fs_symlink()
1070 call->key = fc->key; in afs_fs_symlink()
1071 call->reply[0] = vnode; in afs_fs_symlink()
1072 call->reply[1] = newfid; in afs_fs_symlink()
1073 call->reply[2] = newstatus; in afs_fs_symlink()
1074 call->expected_version = current_data_version + 1; in afs_fs_symlink()
1077 bp = call->request; in afs_fs_symlink()
1103 afs_use_fs_server(call, fc->cbi); in afs_fs_symlink()
1104 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_symlink()
1105 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_symlink()
1111 static int afs_deliver_fs_rename(struct afs_call *call) in afs_deliver_fs_rename() argument
1113 struct afs_vnode *orig_dvnode = call->reply[0], *new_dvnode = call->reply[1]; in afs_deliver_fs_rename()
1117 _enter("{%u}", call->unmarshall); in afs_deliver_fs_rename()
1119 ret = afs_transfer_reply(call); in afs_deliver_fs_rename()
1124 bp = call->buffer; in afs_deliver_fs_rename()
1125 if (afs_decode_status(call, &bp, &orig_dvnode->status, orig_dvnode, in afs_deliver_fs_rename()
1126 &call->expected_version, NULL) < 0) in afs_deliver_fs_rename()
1127 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_rename()
1129 afs_decode_status(call, &bp, &new_dvnode->status, new_dvnode, in afs_deliver_fs_rename()
1130 &call->expected_version_2, NULL) < 0) in afs_deliver_fs_rename()
1131 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_rename()
1132 /* xdr_decode_AFSVolSync(&bp, call->reply[X]); */ in afs_deliver_fs_rename()
1159 struct afs_call *call; in afs_fs_rename() local
1177 call = afs_alloc_flat_call(net, &afs_RXFSRename, reqsz, (21 + 21 + 6) * 4); in afs_fs_rename()
1178 if (!call) in afs_fs_rename()
1181 call->key = fc->key; in afs_fs_rename()
1182 call->reply[0] = orig_dvnode; in afs_fs_rename()
1183 call->reply[1] = new_dvnode; in afs_fs_rename()
1184 call->expected_version = current_orig_data_version + 1; in afs_fs_rename()
1185 call->expected_version_2 = current_new_data_version + 1; in afs_fs_rename()
1188 bp = call->request; in afs_fs_rename()
1212 afs_use_fs_server(call, fc->cbi); in afs_fs_rename()
1213 trace_afs_make_fs_call(call, &orig_dvnode->fid); in afs_fs_rename()
1214 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_rename()
1220 static int afs_deliver_fs_store_data(struct afs_call *call) in afs_deliver_fs_store_data() argument
1222 struct afs_vnode *vnode = call->reply[0]; in afs_deliver_fs_store_data()
1228 ret = afs_transfer_reply(call); in afs_deliver_fs_store_data()
1233 bp = call->buffer; in afs_deliver_fs_store_data()
1234 if (afs_decode_status(call, &bp, &vnode->status, vnode, in afs_deliver_fs_store_data()
1235 &call->expected_version, NULL) < 0) in afs_deliver_fs_store_data()
1236 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_store_data()
1237 /* xdr_decode_AFSVolSync(&bp, call->reply[X]); */ in afs_deliver_fs_store_data()
1239 afs_pages_written_back(vnode, call); in afs_deliver_fs_store_data()
1272 struct afs_call *call; in afs_fs_store_data64() local
1279 call = afs_alloc_flat_call(net, &afs_RXFSStoreData64, in afs_fs_store_data64()
1282 if (!call) in afs_fs_store_data64()
1285 call->key = fc->key; in afs_fs_store_data64()
1286 call->mapping = mapping; in afs_fs_store_data64()
1287 call->reply[0] = vnode; in afs_fs_store_data64()
1288 call->first = first; in afs_fs_store_data64()
1289 call->last = last; in afs_fs_store_data64()
1290 call->first_offset = offset; in afs_fs_store_data64()
1291 call->last_to = to; in afs_fs_store_data64()
1292 call->send_pages = true; in afs_fs_store_data64()
1293 call->expected_version = vnode->status.data_version + 1; in afs_fs_store_data64()
1296 bp = call->request; in afs_fs_store_data64()
1316 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_store_data64()
1317 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_store_data64()
1328 struct afs_call *call; in afs_fs_store_data() local
1354 call = afs_alloc_flat_call(net, &afs_RXFSStoreData, in afs_fs_store_data()
1357 if (!call) in afs_fs_store_data()
1360 call->key = fc->key; in afs_fs_store_data()
1361 call->mapping = mapping; in afs_fs_store_data()
1362 call->reply[0] = vnode; in afs_fs_store_data()
1363 call->first = first; in afs_fs_store_data()
1364 call->last = last; in afs_fs_store_data()
1365 call->first_offset = offset; in afs_fs_store_data()
1366 call->last_to = to; in afs_fs_store_data()
1367 call->send_pages = true; in afs_fs_store_data()
1368 call->expected_version = vnode->status.data_version + 1; in afs_fs_store_data()
1371 bp = call->request; in afs_fs_store_data()
1388 afs_use_fs_server(call, fc->cbi); in afs_fs_store_data()
1389 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_store_data()
1390 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_store_data()
1396 static int afs_deliver_fs_store_status(struct afs_call *call) in afs_deliver_fs_store_status() argument
1398 struct afs_vnode *vnode = call->reply[0]; in afs_deliver_fs_store_status()
1404 ret = afs_transfer_reply(call); in afs_deliver_fs_store_status()
1409 bp = call->buffer; in afs_deliver_fs_store_status()
1410 if (afs_decode_status(call, &bp, &vnode->status, vnode, in afs_deliver_fs_store_status()
1411 &call->expected_version, NULL) < 0) in afs_deliver_fs_store_status()
1412 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_store_status()
1413 /* xdr_decode_AFSVolSync(&bp, call->reply[X]); */ in afs_deliver_fs_store_status()
1450 struct afs_call *call; in afs_fs_setattr_size64() local
1459 call = afs_alloc_flat_call(net, &afs_RXFSStoreData64_as_Status, in afs_fs_setattr_size64()
1462 if (!call) in afs_fs_setattr_size64()
1465 call->key = fc->key; in afs_fs_setattr_size64()
1466 call->reply[0] = vnode; in afs_fs_setattr_size64()
1467 call->expected_version = vnode->status.data_version + 1; in afs_fs_setattr_size64()
1470 bp = call->request; in afs_fs_setattr_size64()
1485 afs_use_fs_server(call, fc->cbi); in afs_fs_setattr_size64()
1486 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_setattr_size64()
1487 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_setattr_size64()
1497 struct afs_call *call; in afs_fs_setattr_size() local
1508 call = afs_alloc_flat_call(net, &afs_RXFSStoreData_as_Status, in afs_fs_setattr_size()
1511 if (!call) in afs_fs_setattr_size()
1514 call->key = fc->key; in afs_fs_setattr_size()
1515 call->reply[0] = vnode; in afs_fs_setattr_size()
1516 call->expected_version = vnode->status.data_version + 1; in afs_fs_setattr_size()
1519 bp = call->request; in afs_fs_setattr_size()
1531 afs_use_fs_server(call, fc->cbi); in afs_fs_setattr_size()
1532 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_setattr_size()
1533 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_setattr_size()
1543 struct afs_call *call; in afs_fs_setattr() local
1553 call = afs_alloc_flat_call(net, &afs_RXFSStoreStatus, in afs_fs_setattr()
1556 if (!call) in afs_fs_setattr()
1559 call->key = fc->key; in afs_fs_setattr()
1560 call->reply[0] = vnode; in afs_fs_setattr()
1561 call->expected_version = vnode->status.data_version; in afs_fs_setattr()
1564 bp = call->request; in afs_fs_setattr()
1572 afs_use_fs_server(call, fc->cbi); in afs_fs_setattr()
1573 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_setattr()
1574 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_setattr()
1580 static int afs_deliver_fs_get_volume_status(struct afs_call *call) in afs_deliver_fs_get_volume_status() argument
1586 _enter("{%u}", call->unmarshall); in afs_deliver_fs_get_volume_status()
1588 switch (call->unmarshall) { in afs_deliver_fs_get_volume_status()
1590 call->offset = 0; in afs_deliver_fs_get_volume_status()
1591 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1596 ret = afs_extract_data(call, call->buffer, in afs_deliver_fs_get_volume_status()
1601 bp = call->buffer; in afs_deliver_fs_get_volume_status()
1602 xdr_decode_AFSFetchVolumeStatus(&bp, call->reply[1]); in afs_deliver_fs_get_volume_status()
1603 call->offset = 0; in afs_deliver_fs_get_volume_status()
1604 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1608 ret = afs_extract_data(call, &call->tmp, 4, true); in afs_deliver_fs_get_volume_status()
1612 call->count = ntohl(call->tmp); in afs_deliver_fs_get_volume_status()
1613 _debug("volname length: %u", call->count); in afs_deliver_fs_get_volume_status()
1614 if (call->count >= AFSNAMEMAX) in afs_deliver_fs_get_volume_status()
1615 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_get_volume_status()
1616 call->offset = 0; in afs_deliver_fs_get_volume_status()
1617 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1622 if (call->count > 0) { in afs_deliver_fs_get_volume_status()
1623 ret = afs_extract_data(call, call->reply[2], in afs_deliver_fs_get_volume_status()
1624 call->count, true); in afs_deliver_fs_get_volume_status()
1629 p = call->reply[2]; in afs_deliver_fs_get_volume_status()
1630 p[call->count] = 0; in afs_deliver_fs_get_volume_status()
1633 call->offset = 0; in afs_deliver_fs_get_volume_status()
1634 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1637 if ((call->count & 3) == 0) { in afs_deliver_fs_get_volume_status()
1638 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1641 call->count = 4 - (call->count & 3); in afs_deliver_fs_get_volume_status()
1644 ret = afs_extract_data(call, call->buffer, in afs_deliver_fs_get_volume_status()
1645 call->count, true); in afs_deliver_fs_get_volume_status()
1649 call->offset = 0; in afs_deliver_fs_get_volume_status()
1650 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1655 ret = afs_extract_data(call, &call->tmp, 4, true); in afs_deliver_fs_get_volume_status()
1659 call->count = ntohl(call->tmp); in afs_deliver_fs_get_volume_status()
1660 _debug("offline msg length: %u", call->count); in afs_deliver_fs_get_volume_status()
1661 if (call->count >= AFSNAMEMAX) in afs_deliver_fs_get_volume_status()
1662 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_get_volume_status()
1663 call->offset = 0; in afs_deliver_fs_get_volume_status()
1664 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1669 if (call->count > 0) { in afs_deliver_fs_get_volume_status()
1670 ret = afs_extract_data(call, call->reply[2], in afs_deliver_fs_get_volume_status()
1671 call->count, true); in afs_deliver_fs_get_volume_status()
1676 p = call->reply[2]; in afs_deliver_fs_get_volume_status()
1677 p[call->count] = 0; in afs_deliver_fs_get_volume_status()
1680 call->offset = 0; in afs_deliver_fs_get_volume_status()
1681 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1684 if ((call->count & 3) == 0) { in afs_deliver_fs_get_volume_status()
1685 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1688 call->count = 4 - (call->count & 3); in afs_deliver_fs_get_volume_status()
1691 ret = afs_extract_data(call, call->buffer, in afs_deliver_fs_get_volume_status()
1692 call->count, true); in afs_deliver_fs_get_volume_status()
1696 call->offset = 0; in afs_deliver_fs_get_volume_status()
1697 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1702 ret = afs_extract_data(call, &call->tmp, 4, true); in afs_deliver_fs_get_volume_status()
1706 call->count = ntohl(call->tmp); in afs_deliver_fs_get_volume_status()
1707 _debug("motd length: %u", call->count); in afs_deliver_fs_get_volume_status()
1708 if (call->count >= AFSNAMEMAX) in afs_deliver_fs_get_volume_status()
1709 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_get_volume_status()
1710 call->offset = 0; in afs_deliver_fs_get_volume_status()
1711 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1716 if (call->count > 0) { in afs_deliver_fs_get_volume_status()
1717 ret = afs_extract_data(call, call->reply[2], in afs_deliver_fs_get_volume_status()
1718 call->count, true); in afs_deliver_fs_get_volume_status()
1723 p = call->reply[2]; in afs_deliver_fs_get_volume_status()
1724 p[call->count] = 0; in afs_deliver_fs_get_volume_status()
1727 call->offset = 0; in afs_deliver_fs_get_volume_status()
1728 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1731 call->count = (4 - (call->count & 3)) & 3; in afs_deliver_fs_get_volume_status()
1734 ret = afs_extract_data(call, call->buffer, in afs_deliver_fs_get_volume_status()
1735 call->count, false); in afs_deliver_fs_get_volume_status()
1739 call->offset = 0; in afs_deliver_fs_get_volume_status()
1740 call->unmarshall++; in afs_deliver_fs_get_volume_status()
1750 * destroy an FS.GetVolumeStatus call
1752 static void afs_get_volume_status_call_destructor(struct afs_call *call) in afs_get_volume_status_call_destructor() argument
1754 kfree(call->reply[2]); in afs_get_volume_status_call_destructor()
1755 call->reply[2] = NULL; in afs_get_volume_status_call_destructor()
1756 afs_flat_call_destructor(call); in afs_get_volume_status_call_destructor()
1776 struct afs_call *call; in afs_fs_get_volume_status() local
1787 call = afs_alloc_flat_call(net, &afs_RXFSGetVolumeStatus, 2 * 4, 12 * 4); in afs_fs_get_volume_status()
1788 if (!call) { in afs_fs_get_volume_status()
1793 call->key = fc->key; in afs_fs_get_volume_status()
1794 call->reply[0] = vnode; in afs_fs_get_volume_status()
1795 call->reply[1] = vs; in afs_fs_get_volume_status()
1796 call->reply[2] = tmpbuf; in afs_fs_get_volume_status()
1799 bp = call->request; in afs_fs_get_volume_status()
1803 afs_use_fs_server(call, fc->cbi); in afs_fs_get_volume_status()
1804 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_get_volume_status()
1805 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_get_volume_status()
1811 static int afs_deliver_fs_xxxx_lock(struct afs_call *call) in afs_deliver_fs_xxxx_lock() argument
1816 _enter("{%u}", call->unmarshall); in afs_deliver_fs_xxxx_lock()
1818 ret = afs_transfer_reply(call); in afs_deliver_fs_xxxx_lock()
1823 bp = call->buffer; in afs_deliver_fs_xxxx_lock()
1824 /* xdr_decode_AFSVolSync(&bp, call->reply[X]); */ in afs_deliver_fs_xxxx_lock()
1866 struct afs_call *call; in afs_fs_set_lock() local
1872 call = afs_alloc_flat_call(net, &afs_RXFSSetLock, 5 * 4, 6 * 4); in afs_fs_set_lock()
1873 if (!call) in afs_fs_set_lock()
1876 call->key = fc->key; in afs_fs_set_lock()
1877 call->reply[0] = vnode; in afs_fs_set_lock()
1880 bp = call->request; in afs_fs_set_lock()
1887 afs_use_fs_server(call, fc->cbi); in afs_fs_set_lock()
1888 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_set_lock()
1889 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_set_lock()
1898 struct afs_call *call; in afs_fs_extend_lock() local
1904 call = afs_alloc_flat_call(net, &afs_RXFSExtendLock, 4 * 4, 6 * 4); in afs_fs_extend_lock()
1905 if (!call) in afs_fs_extend_lock()
1908 call->key = fc->key; in afs_fs_extend_lock()
1909 call->reply[0] = vnode; in afs_fs_extend_lock()
1912 bp = call->request; in afs_fs_extend_lock()
1918 afs_use_fs_server(call, fc->cbi); in afs_fs_extend_lock()
1919 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_extend_lock()
1920 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_extend_lock()
1929 struct afs_call *call; in afs_fs_release_lock() local
1935 call = afs_alloc_flat_call(net, &afs_RXFSReleaseLock, 4 * 4, 6 * 4); in afs_fs_release_lock()
1936 if (!call) in afs_fs_release_lock()
1939 call->key = fc->key; in afs_fs_release_lock()
1940 call->reply[0] = vnode; in afs_fs_release_lock()
1943 bp = call->request; in afs_fs_release_lock()
1949 afs_use_fs_server(call, fc->cbi); in afs_fs_release_lock()
1950 trace_afs_make_fs_call(call, &vnode->fid); in afs_fs_release_lock()
1951 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_release_lock()
1957 static int afs_deliver_fs_give_up_all_callbacks(struct afs_call *call) in afs_deliver_fs_give_up_all_callbacks() argument
1959 return afs_transfer_reply(call); in afs_deliver_fs_give_up_all_callbacks()
1980 struct afs_call *call; in afs_fs_give_up_all_callbacks() local
1985 call = afs_alloc_flat_call(net, &afs_RXFSGiveUpAllCallBacks, 1 * 4, 0); in afs_fs_give_up_all_callbacks()
1986 if (!call) in afs_fs_give_up_all_callbacks()
1989 call->key = key; in afs_fs_give_up_all_callbacks()
1992 bp = call->request; in afs_fs_give_up_all_callbacks()
1996 return afs_make_call(ac, call, GFP_NOFS, false); in afs_fs_give_up_all_callbacks()
2002 static int afs_deliver_fs_get_capabilities(struct afs_call *call) in afs_deliver_fs_get_capabilities() argument
2007 _enter("{%u,%zu/%u}", call->unmarshall, call->offset, call->count); in afs_deliver_fs_get_capabilities()
2010 switch (call->unmarshall) { in afs_deliver_fs_get_capabilities()
2012 call->offset = 0; in afs_deliver_fs_get_capabilities()
2013 call->unmarshall++; in afs_deliver_fs_get_capabilities()
2017 ret = afs_extract_data(call, &call->tmp, in afs_deliver_fs_get_capabilities()
2023 count = ntohl(call->tmp); in afs_deliver_fs_get_capabilities()
2025 call->count = count; in afs_deliver_fs_get_capabilities()
2026 call->count2 = count; in afs_deliver_fs_get_capabilities()
2027 call->offset = 0; in afs_deliver_fs_get_capabilities()
2028 call->unmarshall++; in afs_deliver_fs_get_capabilities()
2032 count = min(call->count, 16U); in afs_deliver_fs_get_capabilities()
2033 ret = afs_extract_data(call, call->buffer, in afs_deliver_fs_get_capabilities()
2035 call->count > 16); in afs_deliver_fs_get_capabilities()
2041 call->count -= count; in afs_deliver_fs_get_capabilities()
2042 if (call->count > 0) in afs_deliver_fs_get_capabilities()
2044 call->offset = 0; in afs_deliver_fs_get_capabilities()
2045 call->unmarshall++; in afs_deliver_fs_get_capabilities()
2072 struct afs_call *call; in afs_fs_get_capabilities() local
2077 call = afs_alloc_flat_call(net, &afs_RXFSGetCapabilities, 1 * 4, 16 * 4); in afs_fs_get_capabilities()
2078 if (!call) in afs_fs_get_capabilities()
2081 call->key = key; in afs_fs_get_capabilities()
2084 bp = call->request; in afs_fs_get_capabilities()
2088 trace_afs_make_fs_call(call, NULL); in afs_fs_get_capabilities()
2089 return afs_make_call(ac, call, GFP_NOFS, false); in afs_fs_get_capabilities()
2095 static int afs_deliver_fs_fetch_status(struct afs_call *call) in afs_deliver_fs_fetch_status() argument
2097 struct afs_file_status *status = call->reply[1]; in afs_deliver_fs_fetch_status()
2098 struct afs_callback *callback = call->reply[2]; in afs_deliver_fs_fetch_status()
2099 struct afs_volsync *volsync = call->reply[3]; in afs_deliver_fs_fetch_status()
2100 struct afs_vnode *vnode = call->reply[0]; in afs_deliver_fs_fetch_status()
2104 ret = afs_transfer_reply(call); in afs_deliver_fs_fetch_status()
2111 bp = call->buffer; in afs_deliver_fs_fetch_status()
2112 afs_decode_status(call, &bp, status, vnode, in afs_deliver_fs_fetch_status()
2113 &call->expected_version, NULL); in afs_deliver_fs_fetch_status()
2114 callback[call->count].version = ntohl(bp[0]); in afs_deliver_fs_fetch_status()
2115 callback[call->count].expiry = ntohl(bp[1]); in afs_deliver_fs_fetch_status()
2116 callback[call->count].type = ntohl(bp[2]); in afs_deliver_fs_fetch_status()
2118 xdr_decode_AFSCallBack(call, vnode, &bp); in afs_deliver_fs_fetch_status()
2148 struct afs_call *call; in afs_fs_fetch_status() local
2154 call = afs_alloc_flat_call(net, &afs_RXFSFetchStatus, 16, (21 + 3 + 6) * 4); in afs_fs_fetch_status()
2155 if (!call) { in afs_fs_fetch_status()
2160 call->key = fc->key; in afs_fs_fetch_status()
2161 call->reply[0] = NULL; /* vnode for fid[0] */ in afs_fs_fetch_status()
2162 call->reply[1] = status; in afs_fs_fetch_status()
2163 call->reply[2] = callback; in afs_fs_fetch_status()
2164 call->reply[3] = volsync; in afs_fs_fetch_status()
2165 call->expected_version = 1; /* vnode->status.data_version */ in afs_fs_fetch_status()
2168 bp = call->request; in afs_fs_fetch_status()
2174 call->cb_break = fc->cb_break; in afs_fs_fetch_status()
2175 afs_use_fs_server(call, fc->cbi); in afs_fs_fetch_status()
2176 trace_afs_make_fs_call(call, fid); in afs_fs_fetch_status()
2177 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_fetch_status()
2181 * Deliver reply data to an FS.InlineBulkStatus call
2183 static int afs_deliver_fs_inline_bulk_status(struct afs_call *call) in afs_deliver_fs_inline_bulk_status() argument
2187 struct afs_vnode *vnode = call->reply[0]; in afs_deliver_fs_inline_bulk_status()
2192 _enter("{%u}", call->unmarshall); in afs_deliver_fs_inline_bulk_status()
2194 switch (call->unmarshall) { in afs_deliver_fs_inline_bulk_status()
2196 call->offset = 0; in afs_deliver_fs_inline_bulk_status()
2197 call->unmarshall++; in afs_deliver_fs_inline_bulk_status()
2202 ret = afs_extract_data(call, &call->tmp, 4, true); in afs_deliver_fs_inline_bulk_status()
2206 tmp = ntohl(call->tmp); in afs_deliver_fs_inline_bulk_status()
2207 _debug("status count: %u/%u", tmp, call->count2); in afs_deliver_fs_inline_bulk_status()
2208 if (tmp != call->count2) in afs_deliver_fs_inline_bulk_status()
2209 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_inline_bulk_status()
2211 call->count = 0; in afs_deliver_fs_inline_bulk_status()
2212 call->unmarshall++; in afs_deliver_fs_inline_bulk_status()
2214 call->offset = 0; in afs_deliver_fs_inline_bulk_status()
2217 _debug("extract status array %u", call->count); in afs_deliver_fs_inline_bulk_status()
2218 ret = afs_extract_data(call, call->buffer, 21 * 4, true); in afs_deliver_fs_inline_bulk_status()
2222 bp = call->buffer; in afs_deliver_fs_inline_bulk_status()
2223 statuses = call->reply[1]; in afs_deliver_fs_inline_bulk_status()
2224 if (afs_decode_status(call, &bp, &statuses[call->count], in afs_deliver_fs_inline_bulk_status()
2225 call->count == 0 ? vnode : NULL, in afs_deliver_fs_inline_bulk_status()
2227 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_inline_bulk_status()
2229 call->count++; in afs_deliver_fs_inline_bulk_status()
2230 if (call->count < call->count2) in afs_deliver_fs_inline_bulk_status()
2233 call->count = 0; in afs_deliver_fs_inline_bulk_status()
2234 call->unmarshall++; in afs_deliver_fs_inline_bulk_status()
2235 call->offset = 0; in afs_deliver_fs_inline_bulk_status()
2240 ret = afs_extract_data(call, &call->tmp, 4, true); in afs_deliver_fs_inline_bulk_status()
2244 tmp = ntohl(call->tmp); in afs_deliver_fs_inline_bulk_status()
2246 if (tmp != call->count2) in afs_deliver_fs_inline_bulk_status()
2247 return afs_protocol_error(call, -EBADMSG); in afs_deliver_fs_inline_bulk_status()
2248 call->count = 0; in afs_deliver_fs_inline_bulk_status()
2249 call->unmarshall++; in afs_deliver_fs_inline_bulk_status()
2251 call->offset = 0; in afs_deliver_fs_inline_bulk_status()
2255 ret = afs_extract_data(call, call->buffer, 3 * 4, true); in afs_deliver_fs_inline_bulk_status()
2260 bp = call->buffer; in afs_deliver_fs_inline_bulk_status()
2261 callbacks = call->reply[2]; in afs_deliver_fs_inline_bulk_status()
2262 callbacks[call->count].version = ntohl(bp[0]); in afs_deliver_fs_inline_bulk_status()
2263 callbacks[call->count].expiry = ntohl(bp[1]); in afs_deliver_fs_inline_bulk_status()
2264 callbacks[call->count].type = ntohl(bp[2]); in afs_deliver_fs_inline_bulk_status()
2265 statuses = call->reply[1]; in afs_deliver_fs_inline_bulk_status()
2266 if (call->count == 0 && vnode && statuses[0].abort_code == 0) in afs_deliver_fs_inline_bulk_status()
2267 xdr_decode_AFSCallBack(call, vnode, &bp); in afs_deliver_fs_inline_bulk_status()
2268 call->count++; in afs_deliver_fs_inline_bulk_status()
2269 if (call->count < call->count2) in afs_deliver_fs_inline_bulk_status()
2272 call->offset = 0; in afs_deliver_fs_inline_bulk_status()
2273 call->unmarshall++; in afs_deliver_fs_inline_bulk_status()
2276 ret = afs_extract_data(call, call->buffer, 6 * 4, false); in afs_deliver_fs_inline_bulk_status()
2280 bp = call->buffer; in afs_deliver_fs_inline_bulk_status()
2281 if (call->reply[3]) in afs_deliver_fs_inline_bulk_status()
2282 xdr_decode_AFSVolSync(&bp, call->reply[3]); in afs_deliver_fs_inline_bulk_status()
2284 call->offset = 0; in afs_deliver_fs_inline_bulk_status()
2285 call->unmarshall++; in afs_deliver_fs_inline_bulk_status()
2316 struct afs_call *call; in afs_fs_inline_bulk_status() local
2323 call = afs_alloc_flat_call(net, &afs_RXFSInlineBulkStatus, in afs_fs_inline_bulk_status()
2326 if (!call) { in afs_fs_inline_bulk_status()
2331 call->key = fc->key; in afs_fs_inline_bulk_status()
2332 call->reply[0] = NULL; /* vnode for fid[0] */ in afs_fs_inline_bulk_status()
2333 call->reply[1] = statuses; in afs_fs_inline_bulk_status()
2334 call->reply[2] = callbacks; in afs_fs_inline_bulk_status()
2335 call->reply[3] = volsync; in afs_fs_inline_bulk_status()
2336 call->count2 = nr_fids; in afs_fs_inline_bulk_status()
2339 bp = call->request; in afs_fs_inline_bulk_status()
2348 call->cb_break = fc->cb_break; in afs_fs_inline_bulk_status()
2349 afs_use_fs_server(call, fc->cbi); in afs_fs_inline_bulk_status()
2350 trace_afs_make_fs_call(call, &fids[0]); in afs_fs_inline_bulk_status()
2351 return afs_make_call(&fc->ac, call, GFP_NOFS, false); in afs_fs_inline_bulk_status()