diff options
author | David Howells <dhowells@redhat.com> | 2017-11-02 11:27:51 -0400 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2017-11-13 10:38:19 -0500 |
commit | 025db80c9e421efef11f2b83b7f78a11476f06db (patch) | |
tree | 1c6e049f2ae3a380f4242d0eda61d759412cdc41 | |
parent | becfcc7e576eed03b93f412769573c93de550527 (diff) |
afs: Trace the initiation and completion of client calls
Add tracepoints to trace the initiation and completion of client calls
within the kafs filesystem.
The afs_make_vl_call tracepoint watches calls to the volume location
database server.
The afs_make_fs_call tracepoint watches calls to the file server.
The afs_call_done tracepoint watches for call completion.
Signed-off-by: David Howells <dhowells@redhat.com>
-rw-r--r-- | fs/afs/fsclient.c | 75 | ||||
-rw-r--r-- | fs/afs/internal.h | 1 | ||||
-rw-r--r-- | fs/afs/rxrpc.c | 25 | ||||
-rw-r--r-- | fs/afs/vlclient.c | 10 | ||||
-rw-r--r-- | include/trace/events/afs.h | 142 |
5 files changed, 233 insertions, 20 deletions
diff --git a/fs/afs/fsclient.c b/fs/afs/fsclient.c index 72ff3679fa2a..10e5ead629c2 100644 --- a/fs/afs/fsclient.c +++ b/fs/afs/fsclient.c | |||
@@ -16,6 +16,8 @@ | |||
16 | #include "internal.h" | 16 | #include "internal.h" |
17 | #include "afs_fs.h" | 17 | #include "afs_fs.h" |
18 | 18 | ||
19 | static const struct afs_fid afs_zero_fid; | ||
20 | |||
19 | /* | 21 | /* |
20 | * We need somewhere to discard into in case the server helpfully returns more | 22 | * We need somewhere to discard into in case the server helpfully returns more |
21 | * than we asked for in FS.FetchData{,64}. | 23 | * than we asked for in FS.FetchData{,64}. |
@@ -299,6 +301,7 @@ static int afs_deliver_fs_fetch_status(struct afs_call *call) | |||
299 | */ | 301 | */ |
300 | static const struct afs_call_type afs_RXFSFetchStatus = { | 302 | static const struct afs_call_type afs_RXFSFetchStatus = { |
301 | .name = "FS.FetchStatus", | 303 | .name = "FS.FetchStatus", |
304 | .op = afs_FS_FetchStatus, | ||
302 | .deliver = afs_deliver_fs_fetch_status, | 305 | .deliver = afs_deliver_fs_fetch_status, |
303 | .destructor = afs_flat_call_destructor, | 306 | .destructor = afs_flat_call_destructor, |
304 | }; | 307 | }; |
@@ -335,6 +338,7 @@ int afs_fs_fetch_file_status(struct afs_fs_cursor *fc, struct afs_volsync *volsy | |||
335 | 338 | ||
336 | call->cb_break = fc->cb_break; | 339 | call->cb_break = fc->cb_break; |
337 | afs_use_fs_server(call, fc->cbi); | 340 | afs_use_fs_server(call, fc->cbi); |
341 | trace_afs_make_fs_call(call, &vnode->fid); | ||
338 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 342 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
339 | } | 343 | } |
340 | 344 | ||
@@ -497,12 +501,14 @@ static void afs_fetch_data_destructor(struct afs_call *call) | |||
497 | */ | 501 | */ |
498 | static const struct afs_call_type afs_RXFSFetchData = { | 502 | static const struct afs_call_type afs_RXFSFetchData = { |
499 | .name = "FS.FetchData", | 503 | .name = "FS.FetchData", |
504 | .op = afs_FS_FetchData, | ||
500 | .deliver = afs_deliver_fs_fetch_data, | 505 | .deliver = afs_deliver_fs_fetch_data, |
501 | .destructor = afs_fetch_data_destructor, | 506 | .destructor = afs_fetch_data_destructor, |
502 | }; | 507 | }; |
503 | 508 | ||
504 | static const struct afs_call_type afs_RXFSFetchData64 = { | 509 | static const struct afs_call_type afs_RXFSFetchData64 = { |
505 | .name = "FS.FetchData64", | 510 | .name = "FS.FetchData64", |
511 | .op = afs_FS_FetchData64, | ||
506 | .deliver = afs_deliver_fs_fetch_data, | 512 | .deliver = afs_deliver_fs_fetch_data, |
507 | .destructor = afs_fetch_data_destructor, | 513 | .destructor = afs_fetch_data_destructor, |
508 | }; | 514 | }; |
@@ -527,7 +533,6 @@ static int afs_fs_fetch_data64(struct afs_fs_cursor *fc, struct afs_read *req) | |||
527 | call->reply[0] = vnode; | 533 | call->reply[0] = vnode; |
528 | call->reply[1] = NULL; /* volsync */ | 534 | call->reply[1] = NULL; /* volsync */ |
529 | call->reply[2] = req; | 535 | call->reply[2] = req; |
530 | call->operation_ID = FSFETCHDATA64; | ||
531 | 536 | ||
532 | /* marshall the parameters */ | 537 | /* marshall the parameters */ |
533 | bp = call->request; | 538 | bp = call->request; |
@@ -543,6 +548,7 @@ static int afs_fs_fetch_data64(struct afs_fs_cursor *fc, struct afs_read *req) | |||
543 | atomic_inc(&req->usage); | 548 | atomic_inc(&req->usage); |
544 | call->cb_break = fc->cb_break; | 549 | call->cb_break = fc->cb_break; |
545 | afs_use_fs_server(call, fc->cbi); | 550 | afs_use_fs_server(call, fc->cbi); |
551 | trace_afs_make_fs_call(call, &vnode->fid); | ||
546 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 552 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
547 | } | 553 | } |
548 | 554 | ||
@@ -571,7 +577,6 @@ int afs_fs_fetch_data(struct afs_fs_cursor *fc, struct afs_read *req) | |||
571 | call->reply[0] = vnode; | 577 | call->reply[0] = vnode; |
572 | call->reply[1] = NULL; /* volsync */ | 578 | call->reply[1] = NULL; /* volsync */ |
573 | call->reply[2] = req; | 579 | call->reply[2] = req; |
574 | call->operation_ID = FSFETCHDATA; | ||
575 | 580 | ||
576 | /* marshall the parameters */ | 581 | /* marshall the parameters */ |
577 | bp = call->request; | 582 | bp = call->request; |
@@ -585,6 +590,7 @@ int afs_fs_fetch_data(struct afs_fs_cursor *fc, struct afs_read *req) | |||
585 | atomic_inc(&req->usage); | 590 | atomic_inc(&req->usage); |
586 | call->cb_break = fc->cb_break; | 591 | call->cb_break = fc->cb_break; |
587 | afs_use_fs_server(call, fc->cbi); | 592 | afs_use_fs_server(call, fc->cbi); |
593 | trace_afs_make_fs_call(call, &vnode->fid); | ||
588 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 594 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
589 | } | 595 | } |
590 | 596 | ||
@@ -618,8 +624,16 @@ static int afs_deliver_fs_create_vnode(struct afs_call *call) | |||
618 | /* | 624 | /* |
619 | * FS.CreateFile and FS.MakeDir operation type | 625 | * FS.CreateFile and FS.MakeDir operation type |
620 | */ | 626 | */ |
621 | static const struct afs_call_type afs_RXFSCreateXXXX = { | 627 | static const struct afs_call_type afs_RXFSCreateFile = { |
622 | .name = "FS.CreateXXXX", | 628 | .name = "FS.CreateFile", |
629 | .op = afs_FS_CreateFile, | ||
630 | .deliver = afs_deliver_fs_create_vnode, | ||
631 | .destructor = afs_flat_call_destructor, | ||
632 | }; | ||
633 | |||
634 | static const struct afs_call_type afs_RXFSMakeDir = { | ||
635 | .name = "FS.MakeDir", | ||
636 | .op = afs_FS_MakeDir, | ||
623 | .deliver = afs_deliver_fs_create_vnode, | 637 | .deliver = afs_deliver_fs_create_vnode, |
624 | .destructor = afs_flat_call_destructor, | 638 | .destructor = afs_flat_call_destructor, |
625 | }; | 639 | }; |
@@ -646,8 +660,9 @@ int afs_fs_create(struct afs_fs_cursor *fc, | |||
646 | padsz = (4 - (namesz & 3)) & 3; | 660 | padsz = (4 - (namesz & 3)) & 3; |
647 | reqsz = (5 * 4) + namesz + padsz + (6 * 4); | 661 | reqsz = (5 * 4) + namesz + padsz + (6 * 4); |
648 | 662 | ||
649 | call = afs_alloc_flat_call(net, &afs_RXFSCreateXXXX, reqsz, | 663 | call = afs_alloc_flat_call( |
650 | (3 + 21 + 21 + 3 + 6) * 4); | 664 | net, S_ISDIR(mode) ? &afs_RXFSMakeDir : &afs_RXFSCreateFile, |
665 | reqsz, (3 + 21 + 21 + 3 + 6) * 4); | ||
651 | if (!call) | 666 | if (!call) |
652 | return -ENOMEM; | 667 | return -ENOMEM; |
653 | 668 | ||
@@ -678,6 +693,7 @@ int afs_fs_create(struct afs_fs_cursor *fc, | |||
678 | *bp++ = 0; /* segment size */ | 693 | *bp++ = 0; /* segment size */ |
679 | 694 | ||
680 | afs_use_fs_server(call, fc->cbi); | 695 | afs_use_fs_server(call, fc->cbi); |
696 | trace_afs_make_fs_call(call, &vnode->fid); | ||
681 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 697 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
682 | } | 698 | } |
683 | 699 | ||
@@ -708,8 +724,16 @@ static int afs_deliver_fs_remove(struct afs_call *call) | |||
708 | /* | 724 | /* |
709 | * FS.RemoveDir/FS.RemoveFile operation type | 725 | * FS.RemoveDir/FS.RemoveFile operation type |
710 | */ | 726 | */ |
711 | static const struct afs_call_type afs_RXFSRemoveXXXX = { | 727 | static const struct afs_call_type afs_RXFSRemoveFile = { |
712 | .name = "FS.RemoveXXXX", | 728 | .name = "FS.RemoveFile", |
729 | .op = afs_FS_RemoveFile, | ||
730 | .deliver = afs_deliver_fs_remove, | ||
731 | .destructor = afs_flat_call_destructor, | ||
732 | }; | ||
733 | |||
734 | static const struct afs_call_type afs_RXFSRemoveDir = { | ||
735 | .name = "FS.RemoveDir", | ||
736 | .op = afs_FS_RemoveDir, | ||
713 | .deliver = afs_deliver_fs_remove, | 737 | .deliver = afs_deliver_fs_remove, |
714 | .destructor = afs_flat_call_destructor, | 738 | .destructor = afs_flat_call_destructor, |
715 | }; | 739 | }; |
@@ -731,7 +755,9 @@ int afs_fs_remove(struct afs_fs_cursor *fc, const char *name, bool isdir) | |||
731 | padsz = (4 - (namesz & 3)) & 3; | 755 | padsz = (4 - (namesz & 3)) & 3; |
732 | reqsz = (5 * 4) + namesz + padsz; | 756 | reqsz = (5 * 4) + namesz + padsz; |
733 | 757 | ||
734 | call = afs_alloc_flat_call(net, &afs_RXFSRemoveXXXX, reqsz, (21 + 6) * 4); | 758 | call = afs_alloc_flat_call( |
759 | net, isdir ? &afs_RXFSRemoveDir : &afs_RXFSRemoveFile, | ||
760 | reqsz, (21 + 6) * 4); | ||
735 | if (!call) | 761 | if (!call) |
736 | return -ENOMEM; | 762 | return -ENOMEM; |
737 | 763 | ||
@@ -753,6 +779,7 @@ int afs_fs_remove(struct afs_fs_cursor *fc, const char *name, bool isdir) | |||
753 | } | 779 | } |
754 | 780 | ||
755 | afs_use_fs_server(call, fc->cbi); | 781 | afs_use_fs_server(call, fc->cbi); |
782 | trace_afs_make_fs_call(call, &vnode->fid); | ||
756 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 783 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
757 | } | 784 | } |
758 | 785 | ||
@@ -786,6 +813,7 @@ static int afs_deliver_fs_link(struct afs_call *call) | |||
786 | */ | 813 | */ |
787 | static const struct afs_call_type afs_RXFSLink = { | 814 | static const struct afs_call_type afs_RXFSLink = { |
788 | .name = "FS.Link", | 815 | .name = "FS.Link", |
816 | .op = afs_FS_Link, | ||
789 | .deliver = afs_deliver_fs_link, | 817 | .deliver = afs_deliver_fs_link, |
790 | .destructor = afs_flat_call_destructor, | 818 | .destructor = afs_flat_call_destructor, |
791 | }; | 819 | }; |
@@ -834,6 +862,7 @@ int afs_fs_link(struct afs_fs_cursor *fc, struct afs_vnode *vnode, | |||
834 | *bp++ = htonl(vnode->fid.unique); | 862 | *bp++ = htonl(vnode->fid.unique); |
835 | 863 | ||
836 | afs_use_fs_server(call, fc->cbi); | 864 | afs_use_fs_server(call, fc->cbi); |
865 | trace_afs_make_fs_call(call, &vnode->fid); | ||
837 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 866 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
838 | } | 867 | } |
839 | 868 | ||
@@ -868,6 +897,7 @@ static int afs_deliver_fs_symlink(struct afs_call *call) | |||
868 | */ | 897 | */ |
869 | static const struct afs_call_type afs_RXFSSymlink = { | 898 | static const struct afs_call_type afs_RXFSSymlink = { |
870 | .name = "FS.Symlink", | 899 | .name = "FS.Symlink", |
900 | .op = afs_FS_Symlink, | ||
871 | .deliver = afs_deliver_fs_symlink, | 901 | .deliver = afs_deliver_fs_symlink, |
872 | .destructor = afs_flat_call_destructor, | 902 | .destructor = afs_flat_call_destructor, |
873 | }; | 903 | }; |
@@ -935,6 +965,7 @@ int afs_fs_symlink(struct afs_fs_cursor *fc, | |||
935 | *bp++ = 0; /* segment size */ | 965 | *bp++ = 0; /* segment size */ |
936 | 966 | ||
937 | afs_use_fs_server(call, fc->cbi); | 967 | afs_use_fs_server(call, fc->cbi); |
968 | trace_afs_make_fs_call(call, &vnode->fid); | ||
938 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 969 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
939 | } | 970 | } |
940 | 971 | ||
@@ -970,6 +1001,7 @@ static int afs_deliver_fs_rename(struct afs_call *call) | |||
970 | */ | 1001 | */ |
971 | static const struct afs_call_type afs_RXFSRename = { | 1002 | static const struct afs_call_type afs_RXFSRename = { |
972 | .name = "FS.Rename", | 1003 | .name = "FS.Rename", |
1004 | .op = afs_FS_Rename, | ||
973 | .deliver = afs_deliver_fs_rename, | 1005 | .deliver = afs_deliver_fs_rename, |
974 | .destructor = afs_flat_call_destructor, | 1006 | .destructor = afs_flat_call_destructor, |
975 | }; | 1007 | }; |
@@ -1035,6 +1067,7 @@ int afs_fs_rename(struct afs_fs_cursor *fc, | |||
1035 | } | 1067 | } |
1036 | 1068 | ||
1037 | afs_use_fs_server(call, fc->cbi); | 1069 | afs_use_fs_server(call, fc->cbi); |
1070 | trace_afs_make_fs_call(call, &orig_dvnode->fid); | ||
1038 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 1071 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
1039 | } | 1072 | } |
1040 | 1073 | ||
@@ -1070,12 +1103,14 @@ static int afs_deliver_fs_store_data(struct afs_call *call) | |||
1070 | */ | 1103 | */ |
1071 | static const struct afs_call_type afs_RXFSStoreData = { | 1104 | static const struct afs_call_type afs_RXFSStoreData = { |
1072 | .name = "FS.StoreData", | 1105 | .name = "FS.StoreData", |
1106 | .op = afs_FS_StoreData, | ||
1073 | .deliver = afs_deliver_fs_store_data, | 1107 | .deliver = afs_deliver_fs_store_data, |
1074 | .destructor = afs_flat_call_destructor, | 1108 | .destructor = afs_flat_call_destructor, |
1075 | }; | 1109 | }; |
1076 | 1110 | ||
1077 | static const struct afs_call_type afs_RXFSStoreData64 = { | 1111 | static const struct afs_call_type afs_RXFSStoreData64 = { |
1078 | .name = "FS.StoreData64", | 1112 | .name = "FS.StoreData64", |
1113 | .op = afs_FS_StoreData64, | ||
1079 | .deliver = afs_deliver_fs_store_data, | 1114 | .deliver = afs_deliver_fs_store_data, |
1080 | .destructor = afs_flat_call_destructor, | 1115 | .destructor = afs_flat_call_destructor, |
1081 | }; | 1116 | }; |
@@ -1135,6 +1170,7 @@ static int afs_fs_store_data64(struct afs_fs_cursor *fc, | |||
1135 | *bp++ = htonl(i_size >> 32); | 1170 | *bp++ = htonl(i_size >> 32); |
1136 | *bp++ = htonl((u32) i_size); | 1171 | *bp++ = htonl((u32) i_size); |
1137 | 1172 | ||
1173 | trace_afs_make_fs_call(call, &vnode->fid); | ||
1138 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 1174 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
1139 | } | 1175 | } |
1140 | 1176 | ||
@@ -1208,6 +1244,7 @@ int afs_fs_store_data(struct afs_fs_cursor *fc, struct afs_writeback *wb, | |||
1208 | *bp++ = htonl(i_size); | 1244 | *bp++ = htonl(i_size); |
1209 | 1245 | ||
1210 | afs_use_fs_server(call, fc->cbi); | 1246 | afs_use_fs_server(call, fc->cbi); |
1247 | trace_afs_make_fs_call(call, &vnode->fid); | ||
1211 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 1248 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
1212 | } | 1249 | } |
1213 | 1250 | ||
@@ -1245,18 +1282,21 @@ static int afs_deliver_fs_store_status(struct afs_call *call) | |||
1245 | */ | 1282 | */ |
1246 | static const struct afs_call_type afs_RXFSStoreStatus = { | 1283 | static const struct afs_call_type afs_RXFSStoreStatus = { |
1247 | .name = "FS.StoreStatus", | 1284 | .name = "FS.StoreStatus", |
1285 | .op = afs_FS_StoreStatus, | ||
1248 | .deliver = afs_deliver_fs_store_status, | 1286 | .deliver = afs_deliver_fs_store_status, |
1249 | .destructor = afs_flat_call_destructor, | 1287 | .destructor = afs_flat_call_destructor, |
1250 | }; | 1288 | }; |
1251 | 1289 | ||
1252 | static const struct afs_call_type afs_RXFSStoreData_as_Status = { | 1290 | static const struct afs_call_type afs_RXFSStoreData_as_Status = { |
1253 | .name = "FS.StoreData", | 1291 | .name = "FS.StoreData", |
1292 | .op = afs_FS_StoreData, | ||
1254 | .deliver = afs_deliver_fs_store_status, | 1293 | .deliver = afs_deliver_fs_store_status, |
1255 | .destructor = afs_flat_call_destructor, | 1294 | .destructor = afs_flat_call_destructor, |
1256 | }; | 1295 | }; |
1257 | 1296 | ||
1258 | static const struct afs_call_type afs_RXFSStoreData64_as_Status = { | 1297 | static const struct afs_call_type afs_RXFSStoreData64_as_Status = { |
1259 | .name = "FS.StoreData64", | 1298 | .name = "FS.StoreData64", |
1299 | .op = afs_FS_StoreData64, | ||
1260 | .deliver = afs_deliver_fs_store_status, | 1300 | .deliver = afs_deliver_fs_store_status, |
1261 | .destructor = afs_flat_call_destructor, | 1301 | .destructor = afs_flat_call_destructor, |
1262 | }; | 1302 | }; |
@@ -1286,7 +1326,6 @@ static int afs_fs_setattr_size64(struct afs_fs_cursor *fc, struct iattr *attr) | |||
1286 | call->key = fc->key; | 1326 | call->key = fc->key; |
1287 | call->reply[0] = vnode; | 1327 | call->reply[0] = vnode; |
1288 | call->store_version = vnode->status.data_version + 1; | 1328 | call->store_version = vnode->status.data_version + 1; |
1289 | call->operation_ID = FSSTOREDATA; | ||
1290 | 1329 | ||
1291 | /* marshall the parameters */ | 1330 | /* marshall the parameters */ |
1292 | bp = call->request; | 1331 | bp = call->request; |
@@ -1305,6 +1344,7 @@ static int afs_fs_setattr_size64(struct afs_fs_cursor *fc, struct iattr *attr) | |||
1305 | *bp++ = htonl((u32) attr->ia_size); | 1344 | *bp++ = htonl((u32) attr->ia_size); |
1306 | 1345 | ||
1307 | afs_use_fs_server(call, fc->cbi); | 1346 | afs_use_fs_server(call, fc->cbi); |
1347 | trace_afs_make_fs_call(call, &vnode->fid); | ||
1308 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 1348 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
1309 | } | 1349 | } |
1310 | 1350 | ||
@@ -1335,7 +1375,6 @@ static int afs_fs_setattr_size(struct afs_fs_cursor *fc, struct iattr *attr) | |||
1335 | call->key = fc->key; | 1375 | call->key = fc->key; |
1336 | call->reply[0] = vnode; | 1376 | call->reply[0] = vnode; |
1337 | call->store_version = vnode->status.data_version + 1; | 1377 | call->store_version = vnode->status.data_version + 1; |
1338 | call->operation_ID = FSSTOREDATA; | ||
1339 | 1378 | ||
1340 | /* marshall the parameters */ | 1379 | /* marshall the parameters */ |
1341 | bp = call->request; | 1380 | bp = call->request; |
@@ -1351,6 +1390,7 @@ static int afs_fs_setattr_size(struct afs_fs_cursor *fc, struct iattr *attr) | |||
1351 | *bp++ = htonl(attr->ia_size); /* new file length */ | 1390 | *bp++ = htonl(attr->ia_size); /* new file length */ |
1352 | 1391 | ||
1353 | afs_use_fs_server(call, fc->cbi); | 1392 | afs_use_fs_server(call, fc->cbi); |
1393 | trace_afs_make_fs_call(call, &vnode->fid); | ||
1354 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 1394 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
1355 | } | 1395 | } |
1356 | 1396 | ||
@@ -1379,7 +1419,6 @@ int afs_fs_setattr(struct afs_fs_cursor *fc, struct iattr *attr) | |||
1379 | 1419 | ||
1380 | call->key = fc->key; | 1420 | call->key = fc->key; |
1381 | call->reply[0] = vnode; | 1421 | call->reply[0] = vnode; |
1382 | call->operation_ID = FSSTORESTATUS; | ||
1383 | 1422 | ||
1384 | /* marshall the parameters */ | 1423 | /* marshall the parameters */ |
1385 | bp = call->request; | 1424 | bp = call->request; |
@@ -1391,6 +1430,7 @@ int afs_fs_setattr(struct afs_fs_cursor *fc, struct iattr *attr) | |||
1391 | xdr_encode_AFS_StoreStatus(&bp, attr); | 1430 | xdr_encode_AFS_StoreStatus(&bp, attr); |
1392 | 1431 | ||
1393 | afs_use_fs_server(call, fc->cbi); | 1432 | afs_use_fs_server(call, fc->cbi); |
1433 | trace_afs_make_fs_call(call, &vnode->fid); | ||
1394 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 1434 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
1395 | } | 1435 | } |
1396 | 1436 | ||
@@ -1581,6 +1621,7 @@ static void afs_get_volume_status_call_destructor(struct afs_call *call) | |||
1581 | */ | 1621 | */ |
1582 | static const struct afs_call_type afs_RXFSGetVolumeStatus = { | 1622 | static const struct afs_call_type afs_RXFSGetVolumeStatus = { |
1583 | .name = "FS.GetVolumeStatus", | 1623 | .name = "FS.GetVolumeStatus", |
1624 | .op = afs_FS_GetVolumeStatus, | ||
1584 | .deliver = afs_deliver_fs_get_volume_status, | 1625 | .deliver = afs_deliver_fs_get_volume_status, |
1585 | .destructor = afs_get_volume_status_call_destructor, | 1626 | .destructor = afs_get_volume_status_call_destructor, |
1586 | }; | 1627 | }; |
@@ -1620,6 +1661,7 @@ int afs_fs_get_volume_status(struct afs_fs_cursor *fc, | |||
1620 | bp[1] = htonl(vnode->fid.vid); | 1661 | bp[1] = htonl(vnode->fid.vid); |
1621 | 1662 | ||
1622 | afs_use_fs_server(call, fc->cbi); | 1663 | afs_use_fs_server(call, fc->cbi); |
1664 | trace_afs_make_fs_call(call, &vnode->fid); | ||
1623 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 1665 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
1624 | } | 1666 | } |
1625 | 1667 | ||
@@ -1650,6 +1692,7 @@ static int afs_deliver_fs_xxxx_lock(struct afs_call *call) | |||
1650 | */ | 1692 | */ |
1651 | static const struct afs_call_type afs_RXFSSetLock = { | 1693 | static const struct afs_call_type afs_RXFSSetLock = { |
1652 | .name = "FS.SetLock", | 1694 | .name = "FS.SetLock", |
1695 | .op = afs_FS_SetLock, | ||
1653 | .deliver = afs_deliver_fs_xxxx_lock, | 1696 | .deliver = afs_deliver_fs_xxxx_lock, |
1654 | .destructor = afs_flat_call_destructor, | 1697 | .destructor = afs_flat_call_destructor, |
1655 | }; | 1698 | }; |
@@ -1659,6 +1702,7 @@ static const struct afs_call_type afs_RXFSSetLock = { | |||
1659 | */ | 1702 | */ |
1660 | static const struct afs_call_type afs_RXFSExtendLock = { | 1703 | static const struct afs_call_type afs_RXFSExtendLock = { |
1661 | .name = "FS.ExtendLock", | 1704 | .name = "FS.ExtendLock", |
1705 | .op = afs_FS_ExtendLock, | ||
1662 | .deliver = afs_deliver_fs_xxxx_lock, | 1706 | .deliver = afs_deliver_fs_xxxx_lock, |
1663 | .destructor = afs_flat_call_destructor, | 1707 | .destructor = afs_flat_call_destructor, |
1664 | }; | 1708 | }; |
@@ -1668,6 +1712,7 @@ static const struct afs_call_type afs_RXFSExtendLock = { | |||
1668 | */ | 1712 | */ |
1669 | static const struct afs_call_type afs_RXFSReleaseLock = { | 1713 | static const struct afs_call_type afs_RXFSReleaseLock = { |
1670 | .name = "FS.ReleaseLock", | 1714 | .name = "FS.ReleaseLock", |
1715 | .op = afs_FS_ReleaseLock, | ||
1671 | .deliver = afs_deliver_fs_xxxx_lock, | 1716 | .deliver = afs_deliver_fs_xxxx_lock, |
1672 | .destructor = afs_flat_call_destructor, | 1717 | .destructor = afs_flat_call_destructor, |
1673 | }; | 1718 | }; |
@@ -1700,6 +1745,7 @@ int afs_fs_set_lock(struct afs_fs_cursor *fc, afs_lock_type_t type) | |||
1700 | *bp++ = htonl(type); | 1745 | *bp++ = htonl(type); |
1701 | 1746 | ||
1702 | afs_use_fs_server(call, fc->cbi); | 1747 | afs_use_fs_server(call, fc->cbi); |
1748 | trace_afs_make_fs_call(call, &vnode->fid); | ||
1703 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 1749 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
1704 | } | 1750 | } |
1705 | 1751 | ||
@@ -1730,6 +1776,7 @@ int afs_fs_extend_lock(struct afs_fs_cursor *fc) | |||
1730 | *bp++ = htonl(vnode->fid.unique); | 1776 | *bp++ = htonl(vnode->fid.unique); |
1731 | 1777 | ||
1732 | afs_use_fs_server(call, fc->cbi); | 1778 | afs_use_fs_server(call, fc->cbi); |
1779 | trace_afs_make_fs_call(call, &vnode->fid); | ||
1733 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 1780 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
1734 | } | 1781 | } |
1735 | 1782 | ||
@@ -1760,6 +1807,7 @@ int afs_fs_release_lock(struct afs_fs_cursor *fc) | |||
1760 | *bp++ = htonl(vnode->fid.unique); | 1807 | *bp++ = htonl(vnode->fid.unique); |
1761 | 1808 | ||
1762 | afs_use_fs_server(call, fc->cbi); | 1809 | afs_use_fs_server(call, fc->cbi); |
1810 | trace_afs_make_fs_call(call, &vnode->fid); | ||
1763 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); | 1811 | return afs_make_call(&fc->ac, call, GFP_NOFS, false); |
1764 | } | 1812 | } |
1765 | 1813 | ||
@@ -1776,6 +1824,7 @@ static int afs_deliver_fs_give_up_all_callbacks(struct afs_call *call) | |||
1776 | */ | 1824 | */ |
1777 | static const struct afs_call_type afs_RXFSGiveUpAllCallBacks = { | 1825 | static const struct afs_call_type afs_RXFSGiveUpAllCallBacks = { |
1778 | .name = "FS.GiveUpAllCallBacks", | 1826 | .name = "FS.GiveUpAllCallBacks", |
1827 | .op = afs_FS_GiveUpAllCallBacks, | ||
1779 | .deliver = afs_deliver_fs_give_up_all_callbacks, | 1828 | .deliver = afs_deliver_fs_give_up_all_callbacks, |
1780 | .destructor = afs_flat_call_destructor, | 1829 | .destructor = afs_flat_call_destructor, |
1781 | }; | 1830 | }; |
@@ -1866,6 +1915,7 @@ again: | |||
1866 | */ | 1915 | */ |
1867 | static const struct afs_call_type afs_RXFSGetCapabilities = { | 1916 | static const struct afs_call_type afs_RXFSGetCapabilities = { |
1868 | .name = "FS.GetCapabilities", | 1917 | .name = "FS.GetCapabilities", |
1918 | .op = afs_FS_GetCapabilities, | ||
1869 | .deliver = afs_deliver_fs_get_capabilities, | 1919 | .deliver = afs_deliver_fs_get_capabilities, |
1870 | .destructor = afs_flat_call_destructor, | 1920 | .destructor = afs_flat_call_destructor, |
1871 | }; | 1921 | }; |
@@ -1895,5 +1945,6 @@ int afs_fs_get_capabilities(struct afs_net *net, | |||
1895 | *bp++ = htonl(FSGETCAPABILITIES); | 1945 | *bp++ = htonl(FSGETCAPABILITIES); |
1896 | 1946 | ||
1897 | /* Can't take a ref on server */ | 1947 | /* Can't take a ref on server */ |
1948 | trace_afs_make_fs_call(call, NULL); | ||
1898 | return afs_make_call(ac, call, GFP_NOFS, false); | 1949 | return afs_make_call(ac, call, GFP_NOFS, false); |
1899 | } | 1950 | } |
diff --git a/fs/afs/internal.h b/fs/afs/internal.h index 767317bf33db..aad12546e0ea 100644 --- a/fs/afs/internal.h +++ b/fs/afs/internal.h | |||
@@ -124,6 +124,7 @@ struct afs_call { | |||
124 | 124 | ||
125 | struct afs_call_type { | 125 | struct afs_call_type { |
126 | const char *name; | 126 | const char *name; |
127 | unsigned int op; /* Really enum afs_fs_operation */ | ||
127 | 128 | ||
128 | /* deliver request or reply data to an call | 129 | /* deliver request or reply data to an call |
129 | * - returning an error will cause the call to be aborted | 130 | * - returning an error will cause the call to be aborted |
diff --git a/fs/afs/rxrpc.c b/fs/afs/rxrpc.c index 1d075696bf55..59cc58022c4d 100644 --- a/fs/afs/rxrpc.c +++ b/fs/afs/rxrpc.c | |||
@@ -219,6 +219,7 @@ struct afs_call *afs_alloc_flat_call(struct afs_net *net, | |||
219 | goto nomem_free; | 219 | goto nomem_free; |
220 | } | 220 | } |
221 | 221 | ||
222 | call->operation_ID = type->op; | ||
222 | init_waitqueue_head(&call->waitq); | 223 | init_waitqueue_head(&call->waitq); |
223 | return call; | 224 | return call; |
224 | 225 | ||
@@ -422,6 +423,8 @@ error_do_abort: | |||
422 | ac->abort_code = call->abort_code; | 423 | ac->abort_code = call->abort_code; |
423 | ac->responded = true; | 424 | ac->responded = true; |
424 | } | 425 | } |
426 | call->error = ret; | ||
427 | trace_afs_call_done(call); | ||
425 | error_kill_call: | 428 | error_kill_call: |
426 | afs_put_call(call); | 429 | afs_put_call(call); |
427 | ac->error = ret; | 430 | ac->error = ret; |
@@ -455,10 +458,10 @@ static void afs_deliver_to_call(struct afs_call *call) | |||
455 | 458 | ||
456 | if (ret == -EINPROGRESS || ret == -EAGAIN) | 459 | if (ret == -EINPROGRESS || ret == -EAGAIN) |
457 | return; | 460 | return; |
458 | if (ret == 1 || ret < 0) { | 461 | if (ret < 0) |
459 | call->state = AFS_CALL_COMPLETE; | 462 | call->error = ret; |
460 | goto done; | 463 | if (ret < 0 || ret == 1) |
461 | } | 464 | goto call_complete; |
462 | return; | 465 | return; |
463 | } | 466 | } |
464 | 467 | ||
@@ -466,7 +469,7 @@ static void afs_deliver_to_call(struct afs_call *call) | |||
466 | switch (ret) { | 469 | switch (ret) { |
467 | case 0: | 470 | case 0: |
468 | if (call->state == AFS_CALL_AWAIT_REPLY) | 471 | if (call->state == AFS_CALL_AWAIT_REPLY) |
469 | call->state = AFS_CALL_COMPLETE; | 472 | goto call_complete; |
470 | goto done; | 473 | goto done; |
471 | case -EINPROGRESS: | 474 | case -EINPROGRESS: |
472 | case -EAGAIN: | 475 | case -EAGAIN: |
@@ -505,7 +508,11 @@ out: | |||
505 | 508 | ||
506 | save_error: | 509 | save_error: |
507 | call->error = ret; | 510 | call->error = ret; |
508 | call->state = AFS_CALL_COMPLETE; | 511 | call_complete: |
512 | if (call->state != AFS_CALL_COMPLETE) { | ||
513 | call->state = AFS_CALL_COMPLETE; | ||
514 | trace_afs_call_done(call); | ||
515 | } | ||
509 | goto done; | 516 | goto done; |
510 | } | 517 | } |
511 | 518 | ||
@@ -567,8 +574,10 @@ static long afs_wait_for_call_to_complete(struct afs_call *call, | |||
567 | if (call->state < AFS_CALL_COMPLETE) { | 574 | if (call->state < AFS_CALL_COMPLETE) { |
568 | _debug("call interrupted"); | 575 | _debug("call interrupted"); |
569 | if (rxrpc_kernel_abort_call(call->net->socket, call->rxcall, | 576 | if (rxrpc_kernel_abort_call(call->net->socket, call->rxcall, |
570 | RX_USER_ABORT, -EINTR, "KWI")) | 577 | RX_USER_ABORT, -EINTR, "KWI")) { |
571 | call->error = -ERESTARTSYS; | 578 | call->error = -ERESTARTSYS; |
579 | trace_afs_call_done(call); | ||
580 | } | ||
572 | } | 581 | } |
573 | 582 | ||
574 | ac->abort_code = call->abort_code; | 583 | ac->abort_code = call->abort_code; |
@@ -882,6 +891,7 @@ int afs_extract_data(struct afs_call *call, void *buf, size_t count, | |||
882 | switch (call->state) { | 891 | switch (call->state) { |
883 | case AFS_CALL_AWAIT_REPLY: | 892 | case AFS_CALL_AWAIT_REPLY: |
884 | call->state = AFS_CALL_COMPLETE; | 893 | call->state = AFS_CALL_COMPLETE; |
894 | trace_afs_call_done(call); | ||
885 | break; | 895 | break; |
886 | case AFS_CALL_AWAIT_REQUEST: | 896 | case AFS_CALL_AWAIT_REQUEST: |
887 | call->state = AFS_CALL_REPLYING; | 897 | call->state = AFS_CALL_REPLYING; |
@@ -894,5 +904,6 @@ int afs_extract_data(struct afs_call *call, void *buf, size_t count, | |||
894 | 904 | ||
895 | call->error = ret; | 905 | call->error = ret; |
896 | call->state = AFS_CALL_COMPLETE; | 906 | call->state = AFS_CALL_COMPLETE; |
907 | trace_afs_call_done(call); | ||
897 | return ret; | 908 | return ret; |
898 | } | 909 | } |
diff --git a/fs/afs/vlclient.c b/fs/afs/vlclient.c index 1d38cbdf6cad..e372f89fd36a 100644 --- a/fs/afs/vlclient.c +++ b/fs/afs/vlclient.c | |||
@@ -114,6 +114,7 @@ static void afs_destroy_vl_get_entry_by_name_u(struct afs_call *call) | |||
114 | */ | 114 | */ |
115 | static const struct afs_call_type afs_RXVLGetEntryByNameU = { | 115 | static const struct afs_call_type afs_RXVLGetEntryByNameU = { |
116 | .name = "VL.GetEntryByNameU", | 116 | .name = "VL.GetEntryByNameU", |
117 | .op = afs_VL_GetEntryByNameU, | ||
117 | .deliver = afs_deliver_vl_get_entry_by_name_u, | 118 | .deliver = afs_deliver_vl_get_entry_by_name_u, |
118 | .destructor = afs_destroy_vl_get_entry_by_name_u, | 119 | .destructor = afs_destroy_vl_get_entry_by_name_u, |
119 | }; | 120 | }; |
@@ -161,6 +162,7 @@ struct afs_vldb_entry *afs_vl_get_entry_by_name_u(struct afs_net *net, | |||
161 | if (padsz > 0) | 162 | if (padsz > 0) |
162 | memset((void *)bp + volnamesz, 0, padsz); | 163 | memset((void *)bp + volnamesz, 0, padsz); |
163 | 164 | ||
165 | trace_afs_make_vl_call(call); | ||
164 | return (struct afs_vldb_entry *)afs_make_call(ac, call, GFP_KERNEL, false); | 166 | return (struct afs_vldb_entry *)afs_make_call(ac, call, GFP_KERNEL, false); |
165 | } | 167 | } |
166 | 168 | ||
@@ -251,6 +253,7 @@ static void afs_vl_get_addrs_u_destructor(struct afs_call *call) | |||
251 | */ | 253 | */ |
252 | static const struct afs_call_type afs_RXVLGetAddrsU = { | 254 | static const struct afs_call_type afs_RXVLGetAddrsU = { |
253 | .name = "VL.GetAddrsU", | 255 | .name = "VL.GetAddrsU", |
256 | .op = afs_VL_GetAddrsU, | ||
254 | .deliver = afs_deliver_vl_get_addrs_u, | 257 | .deliver = afs_deliver_vl_get_addrs_u, |
255 | .destructor = afs_vl_get_addrs_u_destructor, | 258 | .destructor = afs_vl_get_addrs_u_destructor, |
256 | }; | 259 | }; |
@@ -298,6 +301,7 @@ struct afs_addr_list *afs_vl_get_addrs_u(struct afs_net *net, | |||
298 | for (i = 0; i < 6; i++) | 301 | for (i = 0; i < 6; i++) |
299 | r->uuid.node[i] = ntohl(u->node[i]); | 302 | r->uuid.node[i] = ntohl(u->node[i]); |
300 | 303 | ||
304 | trace_afs_make_vl_call(call); | ||
301 | return (struct afs_addr_list *)afs_make_call(ac, call, GFP_KERNEL, false); | 305 | return (struct afs_addr_list *)afs_make_call(ac, call, GFP_KERNEL, false); |
302 | } | 306 | } |
303 | 307 | ||
@@ -362,6 +366,7 @@ again: | |||
362 | */ | 366 | */ |
363 | static const struct afs_call_type afs_RXVLGetCapabilities = { | 367 | static const struct afs_call_type afs_RXVLGetCapabilities = { |
364 | .name = "VL.GetCapabilities", | 368 | .name = "VL.GetCapabilities", |
369 | .op = afs_VL_GetCapabilities, | ||
365 | .deliver = afs_deliver_vl_get_capabilities, | 370 | .deliver = afs_deliver_vl_get_capabilities, |
366 | .destructor = afs_flat_call_destructor, | 371 | .destructor = afs_flat_call_destructor, |
367 | }; | 372 | }; |
@@ -396,6 +401,7 @@ int afs_vl_get_capabilities(struct afs_net *net, | |||
396 | *bp++ = htonl(VLGETCAPABILITIES); | 401 | *bp++ = htonl(VLGETCAPABILITIES); |
397 | 402 | ||
398 | /* Can't take a ref on server */ | 403 | /* Can't take a ref on server */ |
404 | trace_afs_make_vl_call(call); | ||
399 | return afs_make_call(ac, call, GFP_KERNEL, false); | 405 | return afs_make_call(ac, call, GFP_KERNEL, false); |
400 | } | 406 | } |
401 | 407 | ||
@@ -598,7 +604,8 @@ again: | |||
598 | * YFSVL.GetEndpoints operation type. | 604 | * YFSVL.GetEndpoints operation type. |
599 | */ | 605 | */ |
600 | static const struct afs_call_type afs_YFSVLGetEndpoints = { | 606 | static const struct afs_call_type afs_YFSVLGetEndpoints = { |
601 | .name = "VL.GetEndpoints", | 607 | .name = "YFSVL.GetEndpoints", |
608 | .op = afs_YFSVL_GetEndpoints, | ||
602 | .deliver = afs_deliver_yfsvl_get_endpoints, | 609 | .deliver = afs_deliver_yfsvl_get_endpoints, |
603 | .destructor = afs_vl_get_addrs_u_destructor, | 610 | .destructor = afs_vl_get_addrs_u_destructor, |
604 | }; | 611 | }; |
@@ -633,5 +640,6 @@ struct afs_addr_list *afs_yfsvl_get_endpoints(struct afs_net *net, | |||
633 | *bp++ = htonl(YFS_SERVER_UUID); | 640 | *bp++ = htonl(YFS_SERVER_UUID); |
634 | memcpy(bp, uuid, sizeof(*uuid)); /* Type opr_uuid */ | 641 | memcpy(bp, uuid, sizeof(*uuid)); /* Type opr_uuid */ |
635 | 642 | ||
643 | trace_afs_make_vl_call(call); | ||
636 | return (struct afs_addr_list *)afs_make_call(ac, call, GFP_KERNEL, false); | 644 | return (struct afs_addr_list *)afs_make_call(ac, call, GFP_KERNEL, false); |
637 | } | 645 | } |
diff --git a/include/trace/events/afs.h b/include/trace/events/afs.h index 8b95c16b7045..dd9d2600ee98 100644 --- a/include/trace/events/afs.h +++ b/include/trace/events/afs.h | |||
@@ -30,6 +30,38 @@ enum afs_call_trace { | |||
30 | afs_call_trace_work, | 30 | afs_call_trace_work, |
31 | }; | 31 | }; |
32 | 32 | ||
33 | enum afs_fs_operation { | ||
34 | afs_FS_FetchData = 130, /* AFS Fetch file data */ | ||
35 | afs_FS_FetchStatus = 132, /* AFS Fetch file status */ | ||
36 | afs_FS_StoreData = 133, /* AFS Store file data */ | ||
37 | afs_FS_StoreStatus = 135, /* AFS Store file status */ | ||
38 | afs_FS_RemoveFile = 136, /* AFS Remove a file */ | ||
39 | afs_FS_CreateFile = 137, /* AFS Create a file */ | ||
40 | afs_FS_Rename = 138, /* AFS Rename or move a file or directory */ | ||
41 | afs_FS_Symlink = 139, /* AFS Create a symbolic link */ | ||
42 | afs_FS_Link = 140, /* AFS Create a hard link */ | ||
43 | afs_FS_MakeDir = 141, /* AFS Create a directory */ | ||
44 | afs_FS_RemoveDir = 142, /* AFS Remove a directory */ | ||
45 | afs_FS_GetVolumeInfo = 148, /* AFS Get information about a volume */ | ||
46 | afs_FS_GetVolumeStatus = 149, /* AFS Get volume status information */ | ||
47 | afs_FS_GetRootVolume = 151, /* AFS Get root volume name */ | ||
48 | afs_FS_SetLock = 156, /* AFS Request a file lock */ | ||
49 | afs_FS_ExtendLock = 157, /* AFS Extend a file lock */ | ||
50 | afs_FS_ReleaseLock = 158, /* AFS Release a file lock */ | ||
51 | afs_FS_Lookup = 161, /* AFS lookup file in directory */ | ||
52 | afs_FS_FetchData64 = 65537, /* AFS Fetch file data */ | ||
53 | afs_FS_StoreData64 = 65538, /* AFS Store file data */ | ||
54 | afs_FS_GiveUpAllCallBacks = 65539, /* AFS Give up all our callbacks on a server */ | ||
55 | afs_FS_GetCapabilities = 65540, /* AFS Get FS server capabilities */ | ||
56 | }; | ||
57 | |||
58 | enum afs_vl_operation { | ||
59 | afs_VL_GetEntryByNameU = 527, /* AFS Get Vol Entry By Name operation ID */ | ||
60 | afs_VL_GetAddrsU = 533, /* AFS Get FS server addresses */ | ||
61 | afs_YFSVL_GetEndpoints = 64002, /* YFS Get FS & Vol server addresses */ | ||
62 | afs_VL_GetCapabilities = 65537, /* AFS Get VL server capabilities */ | ||
63 | }; | ||
64 | |||
33 | #endif /* end __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY */ | 65 | #endif /* end __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY */ |
34 | 66 | ||
35 | /* | 67 | /* |
@@ -42,6 +74,37 @@ enum afs_call_trace { | |||
42 | EM(afs_call_trace_wake, "WAKE ") \ | 74 | EM(afs_call_trace_wake, "WAKE ") \ |
43 | E_(afs_call_trace_work, "WORK ") | 75 | E_(afs_call_trace_work, "WORK ") |
44 | 76 | ||
77 | #define afs_fs_operations \ | ||
78 | EM(afs_FS_FetchData, "FS.FetchData") \ | ||
79 | EM(afs_FS_FetchStatus, "FS.FetchStatus") \ | ||
80 | EM(afs_FS_StoreData, "FS.StoreData") \ | ||
81 | EM(afs_FS_StoreStatus, "FS.StoreStatus") \ | ||
82 | EM(afs_FS_RemoveFile, "FS.RemoveFile") \ | ||
83 | EM(afs_FS_CreateFile, "FS.CreateFile") \ | ||
84 | EM(afs_FS_Rename, "FS.Rename") \ | ||
85 | EM(afs_FS_Symlink, "FS.Symlink") \ | ||
86 | EM(afs_FS_Link, "FS.Link") \ | ||
87 | EM(afs_FS_MakeDir, "FS.MakeDir") \ | ||
88 | EM(afs_FS_RemoveDir, "FS.RemoveDir") \ | ||
89 | EM(afs_FS_GetVolumeInfo, "FS.GetVolumeInfo") \ | ||
90 | EM(afs_FS_GetVolumeStatus, "FS.GetVolumeStatus") \ | ||
91 | EM(afs_FS_GetRootVolume, "FS.GetRootVolume") \ | ||
92 | EM(afs_FS_SetLock, "FS.SetLock") \ | ||
93 | EM(afs_FS_ExtendLock, "FS.ExtendLock") \ | ||
94 | EM(afs_FS_ReleaseLock, "FS.ReleaseLock") \ | ||
95 | EM(afs_FS_Lookup, "FS.Lookup") \ | ||
96 | EM(afs_FS_FetchData64, "FS.FetchData64") \ | ||
97 | EM(afs_FS_StoreData64, "FS.StoreData64") \ | ||
98 | EM(afs_FS_GiveUpAllCallBacks, "FS.GiveUpAllCallBacks") \ | ||
99 | E_(afs_FS_GetCapabilities, "FS.GetCapabilities") | ||
100 | |||
101 | #define afs_vl_operations \ | ||
102 | EM(afs_VL_GetEntryByNameU, "VL.GetEntryByNameU") \ | ||
103 | EM(afs_VL_GetAddrsU, "VL.GetAddrsU") \ | ||
104 | EM(afs_YFSVL_GetEndpoints, "YFSVL.GetEndpoints") \ | ||
105 | E_(afs_VL_GetCapabilities, "VL.GetCapabilities") | ||
106 | |||
107 | |||
45 | /* | 108 | /* |
46 | * Export enum symbols via userspace. | 109 | * Export enum symbols via userspace. |
47 | */ | 110 | */ |
@@ -51,6 +114,8 @@ enum afs_call_trace { | |||
51 | #define E_(a, b) TRACE_DEFINE_ENUM(a); | 114 | #define E_(a, b) TRACE_DEFINE_ENUM(a); |
52 | 115 | ||
53 | afs_call_traces; | 116 | afs_call_traces; |
117 | afs_fs_operations; | ||
118 | afs_vl_operations; | ||
54 | 119 | ||
55 | /* | 120 | /* |
56 | * Now redefine the EM() and E_() macros to map the enums to the strings that | 121 | * Now redefine the EM() and E_() macros to map the enums to the strings that |
@@ -178,6 +243,83 @@ TRACE_EVENT(afs_call, | |||
178 | __entry->where) | 243 | __entry->where) |
179 | ); | 244 | ); |
180 | 245 | ||
246 | TRACE_EVENT(afs_make_fs_call, | ||
247 | TP_PROTO(struct afs_call *call, const struct afs_fid *fid), | ||
248 | |||
249 | TP_ARGS(call, fid), | ||
250 | |||
251 | TP_STRUCT__entry( | ||
252 | __field(struct afs_call *, call ) | ||
253 | __field(enum afs_fs_operation, op ) | ||
254 | __field_struct(struct afs_fid, fid ) | ||
255 | ), | ||
256 | |||
257 | TP_fast_assign( | ||
258 | __entry->call = call; | ||
259 | __entry->op = call->operation_ID; | ||
260 | if (fid) { | ||
261 | __entry->fid = *fid; | ||
262 | } else { | ||
263 | __entry->fid.vid = 0; | ||
264 | __entry->fid.vnode = 0; | ||
265 | __entry->fid.unique = 0; | ||
266 | } | ||
267 | ), | ||
268 | |||
269 | TP_printk("c=%p %06x:%06x:%06x %s", | ||
270 | __entry->call, | ||
271 | __entry->fid.vid, | ||
272 | __entry->fid.vnode, | ||
273 | __entry->fid.unique, | ||
274 | __print_symbolic(__entry->op, afs_fs_operations)) | ||
275 | ); | ||
276 | |||
277 | TRACE_EVENT(afs_make_vl_call, | ||
278 | TP_PROTO(struct afs_call *call), | ||
279 | |||
280 | TP_ARGS(call), | ||
281 | |||
282 | TP_STRUCT__entry( | ||
283 | __field(struct afs_call *, call ) | ||
284 | __field(enum afs_vl_operation, op ) | ||
285 | ), | ||
286 | |||
287 | TP_fast_assign( | ||
288 | __entry->call = call; | ||
289 | __entry->op = call->operation_ID; | ||
290 | ), | ||
291 | |||
292 | TP_printk("c=%p %s", | ||
293 | __entry->call, | ||
294 | __print_symbolic(__entry->op, afs_vl_operations)) | ||
295 | ); | ||
296 | |||
297 | TRACE_EVENT(afs_call_done, | ||
298 | TP_PROTO(struct afs_call *call), | ||
299 | |||
300 | TP_ARGS(call), | ||
301 | |||
302 | TP_STRUCT__entry( | ||
303 | __field(struct afs_call *, call ) | ||
304 | __field(struct rxrpc_call *, rx_call ) | ||
305 | __field(int, ret ) | ||
306 | __field(u32, abort_code ) | ||
307 | ), | ||
308 | |||
309 | TP_fast_assign( | ||
310 | __entry->call = call; | ||
311 | __entry->rx_call = call->rxcall; | ||
312 | __entry->ret = call->error; | ||
313 | __entry->abort_code = call->abort_code; | ||
314 | ), | ||
315 | |||
316 | TP_printk(" c=%p ret=%d ab=%d [%p]", | ||
317 | __entry->call, | ||
318 | __entry->ret, | ||
319 | __entry->abort_code, | ||
320 | __entry->rx_call) | ||
321 | ); | ||
322 | |||
181 | #endif /* _TRACE_AFS_H */ | 323 | #endif /* _TRACE_AFS_H */ |
182 | 324 | ||
183 | /* This part must be outside protection */ | 325 | /* This part must be outside protection */ |