Skip to content

Commit 025db80

Browse files
committed
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 <[email protected]>
1 parent becfcc7 commit 025db80

File tree

5 files changed

+233
-20
lines changed

5 files changed

+233
-20
lines changed

fs/afs/fsclient.c

Lines changed: 63 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
#include "internal.h"
1717
#include "afs_fs.h"
1818

19+
static const struct afs_fid afs_zero_fid;
20+
1921
/*
2022
* We need somewhere to discard into in case the server helpfully returns more
2123
* than we asked for in FS.FetchData{,64}.
@@ -299,6 +301,7 @@ static int afs_deliver_fs_fetch_status(struct afs_call *call)
299301
*/
300302
static const struct afs_call_type afs_RXFSFetchStatus = {
301303
.name = "FS.FetchStatus",
304+
.op = afs_FS_FetchStatus,
302305
.deliver = afs_deliver_fs_fetch_status,
303306
.destructor = afs_flat_call_destructor,
304307
};
@@ -335,6 +338,7 @@ int afs_fs_fetch_file_status(struct afs_fs_cursor *fc, struct afs_volsync *volsy
335338

336339
call->cb_break = fc->cb_break;
337340
afs_use_fs_server(call, fc->cbi);
341+
trace_afs_make_fs_call(call, &vnode->fid);
338342
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
339343
}
340344

@@ -497,12 +501,14 @@ static void afs_fetch_data_destructor(struct afs_call *call)
497501
*/
498502
static const struct afs_call_type afs_RXFSFetchData = {
499503
.name = "FS.FetchData",
504+
.op = afs_FS_FetchData,
500505
.deliver = afs_deliver_fs_fetch_data,
501506
.destructor = afs_fetch_data_destructor,
502507
};
503508

504509
static const struct afs_call_type afs_RXFSFetchData64 = {
505510
.name = "FS.FetchData64",
511+
.op = afs_FS_FetchData64,
506512
.deliver = afs_deliver_fs_fetch_data,
507513
.destructor = afs_fetch_data_destructor,
508514
};
@@ -527,7 +533,6 @@ static int afs_fs_fetch_data64(struct afs_fs_cursor *fc, struct afs_read *req)
527533
call->reply[0] = vnode;
528534
call->reply[1] = NULL; /* volsync */
529535
call->reply[2] = req;
530-
call->operation_ID = FSFETCHDATA64;
531536

532537
/* marshall the parameters */
533538
bp = call->request;
@@ -543,6 +548,7 @@ static int afs_fs_fetch_data64(struct afs_fs_cursor *fc, struct afs_read *req)
543548
atomic_inc(&req->usage);
544549
call->cb_break = fc->cb_break;
545550
afs_use_fs_server(call, fc->cbi);
551+
trace_afs_make_fs_call(call, &vnode->fid);
546552
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
547553
}
548554

@@ -571,7 +577,6 @@ int afs_fs_fetch_data(struct afs_fs_cursor *fc, struct afs_read *req)
571577
call->reply[0] = vnode;
572578
call->reply[1] = NULL; /* volsync */
573579
call->reply[2] = req;
574-
call->operation_ID = FSFETCHDATA;
575580

576581
/* marshall the parameters */
577582
bp = call->request;
@@ -585,6 +590,7 @@ int afs_fs_fetch_data(struct afs_fs_cursor *fc, struct afs_read *req)
585590
atomic_inc(&req->usage);
586591
call->cb_break = fc->cb_break;
587592
afs_use_fs_server(call, fc->cbi);
593+
trace_afs_make_fs_call(call, &vnode->fid);
588594
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
589595
}
590596

@@ -618,8 +624,16 @@ static int afs_deliver_fs_create_vnode(struct afs_call *call)
618624
/*
619625
* FS.CreateFile and FS.MakeDir operation type
620626
*/
621-
static const struct afs_call_type afs_RXFSCreateXXXX = {
622-
.name = "FS.CreateXXXX",
627+
static const struct afs_call_type afs_RXFSCreateFile = {
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,
623637
.deliver = afs_deliver_fs_create_vnode,
624638
.destructor = afs_flat_call_destructor,
625639
};
@@ -646,8 +660,9 @@ int afs_fs_create(struct afs_fs_cursor *fc,
646660
padsz = (4 - (namesz & 3)) & 3;
647661
reqsz = (5 * 4) + namesz + padsz + (6 * 4);
648662

649-
call = afs_alloc_flat_call(net, &afs_RXFSCreateXXXX, reqsz,
650-
(3 + 21 + 21 + 3 + 6) * 4);
663+
call = afs_alloc_flat_call(
664+
net, S_ISDIR(mode) ? &afs_RXFSMakeDir : &afs_RXFSCreateFile,
665+
reqsz, (3 + 21 + 21 + 3 + 6) * 4);
651666
if (!call)
652667
return -ENOMEM;
653668

@@ -678,6 +693,7 @@ int afs_fs_create(struct afs_fs_cursor *fc,
678693
*bp++ = 0; /* segment size */
679694

680695
afs_use_fs_server(call, fc->cbi);
696+
trace_afs_make_fs_call(call, &vnode->fid);
681697
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
682698
}
683699

@@ -708,8 +724,16 @@ static int afs_deliver_fs_remove(struct afs_call *call)
708724
/*
709725
* FS.RemoveDir/FS.RemoveFile operation type
710726
*/
711-
static const struct afs_call_type afs_RXFSRemoveXXXX = {
712-
.name = "FS.RemoveXXXX",
727+
static const struct afs_call_type afs_RXFSRemoveFile = {
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,
713737
.deliver = afs_deliver_fs_remove,
714738
.destructor = afs_flat_call_destructor,
715739
};
@@ -731,7 +755,9 @@ int afs_fs_remove(struct afs_fs_cursor *fc, const char *name, bool isdir)
731755
padsz = (4 - (namesz & 3)) & 3;
732756
reqsz = (5 * 4) + namesz + padsz;
733757

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);
735761
if (!call)
736762
return -ENOMEM;
737763

@@ -753,6 +779,7 @@ int afs_fs_remove(struct afs_fs_cursor *fc, const char *name, bool isdir)
753779
}
754780

755781
afs_use_fs_server(call, fc->cbi);
782+
trace_afs_make_fs_call(call, &vnode->fid);
756783
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
757784
}
758785

@@ -786,6 +813,7 @@ static int afs_deliver_fs_link(struct afs_call *call)
786813
*/
787814
static const struct afs_call_type afs_RXFSLink = {
788815
.name = "FS.Link",
816+
.op = afs_FS_Link,
789817
.deliver = afs_deliver_fs_link,
790818
.destructor = afs_flat_call_destructor,
791819
};
@@ -834,6 +862,7 @@ int afs_fs_link(struct afs_fs_cursor *fc, struct afs_vnode *vnode,
834862
*bp++ = htonl(vnode->fid.unique);
835863

836864
afs_use_fs_server(call, fc->cbi);
865+
trace_afs_make_fs_call(call, &vnode->fid);
837866
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
838867
}
839868

@@ -868,6 +897,7 @@ static int afs_deliver_fs_symlink(struct afs_call *call)
868897
*/
869898
static const struct afs_call_type afs_RXFSSymlink = {
870899
.name = "FS.Symlink",
900+
.op = afs_FS_Symlink,
871901
.deliver = afs_deliver_fs_symlink,
872902
.destructor = afs_flat_call_destructor,
873903
};
@@ -935,6 +965,7 @@ int afs_fs_symlink(struct afs_fs_cursor *fc,
935965
*bp++ = 0; /* segment size */
936966

937967
afs_use_fs_server(call, fc->cbi);
968+
trace_afs_make_fs_call(call, &vnode->fid);
938969
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
939970
}
940971

@@ -970,6 +1001,7 @@ static int afs_deliver_fs_rename(struct afs_call *call)
9701001
*/
9711002
static const struct afs_call_type afs_RXFSRename = {
9721003
.name = "FS.Rename",
1004+
.op = afs_FS_Rename,
9731005
.deliver = afs_deliver_fs_rename,
9741006
.destructor = afs_flat_call_destructor,
9751007
};
@@ -1035,6 +1067,7 @@ int afs_fs_rename(struct afs_fs_cursor *fc,
10351067
}
10361068

10371069
afs_use_fs_server(call, fc->cbi);
1070+
trace_afs_make_fs_call(call, &orig_dvnode->fid);
10381071
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
10391072
}
10401073

@@ -1070,12 +1103,14 @@ static int afs_deliver_fs_store_data(struct afs_call *call)
10701103
*/
10711104
static const struct afs_call_type afs_RXFSStoreData = {
10721105
.name = "FS.StoreData",
1106+
.op = afs_FS_StoreData,
10731107
.deliver = afs_deliver_fs_store_data,
10741108
.destructor = afs_flat_call_destructor,
10751109
};
10761110

10771111
static const struct afs_call_type afs_RXFSStoreData64 = {
10781112
.name = "FS.StoreData64",
1113+
.op = afs_FS_StoreData64,
10791114
.deliver = afs_deliver_fs_store_data,
10801115
.destructor = afs_flat_call_destructor,
10811116
};
@@ -1135,6 +1170,7 @@ static int afs_fs_store_data64(struct afs_fs_cursor *fc,
11351170
*bp++ = htonl(i_size >> 32);
11361171
*bp++ = htonl((u32) i_size);
11371172

1173+
trace_afs_make_fs_call(call, &vnode->fid);
11381174
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
11391175
}
11401176

@@ -1208,6 +1244,7 @@ int afs_fs_store_data(struct afs_fs_cursor *fc, struct afs_writeback *wb,
12081244
*bp++ = htonl(i_size);
12091245

12101246
afs_use_fs_server(call, fc->cbi);
1247+
trace_afs_make_fs_call(call, &vnode->fid);
12111248
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
12121249
}
12131250

@@ -1245,18 +1282,21 @@ static int afs_deliver_fs_store_status(struct afs_call *call)
12451282
*/
12461283
static const struct afs_call_type afs_RXFSStoreStatus = {
12471284
.name = "FS.StoreStatus",
1285+
.op = afs_FS_StoreStatus,
12481286
.deliver = afs_deliver_fs_store_status,
12491287
.destructor = afs_flat_call_destructor,
12501288
};
12511289

12521290
static const struct afs_call_type afs_RXFSStoreData_as_Status = {
12531291
.name = "FS.StoreData",
1292+
.op = afs_FS_StoreData,
12541293
.deliver = afs_deliver_fs_store_status,
12551294
.destructor = afs_flat_call_destructor,
12561295
};
12571296

12581297
static const struct afs_call_type afs_RXFSStoreData64_as_Status = {
12591298
.name = "FS.StoreData64",
1299+
.op = afs_FS_StoreData64,
12601300
.deliver = afs_deliver_fs_store_status,
12611301
.destructor = afs_flat_call_destructor,
12621302
};
@@ -1286,7 +1326,6 @@ static int afs_fs_setattr_size64(struct afs_fs_cursor *fc, struct iattr *attr)
12861326
call->key = fc->key;
12871327
call->reply[0] = vnode;
12881328
call->store_version = vnode->status.data_version + 1;
1289-
call->operation_ID = FSSTOREDATA;
12901329

12911330
/* marshall the parameters */
12921331
bp = call->request;
@@ -1305,6 +1344,7 @@ static int afs_fs_setattr_size64(struct afs_fs_cursor *fc, struct iattr *attr)
13051344
*bp++ = htonl((u32) attr->ia_size);
13061345

13071346
afs_use_fs_server(call, fc->cbi);
1347+
trace_afs_make_fs_call(call, &vnode->fid);
13081348
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
13091349
}
13101350

@@ -1335,7 +1375,6 @@ static int afs_fs_setattr_size(struct afs_fs_cursor *fc, struct iattr *attr)
13351375
call->key = fc->key;
13361376
call->reply[0] = vnode;
13371377
call->store_version = vnode->status.data_version + 1;
1338-
call->operation_ID = FSSTOREDATA;
13391378

13401379
/* marshall the parameters */
13411380
bp = call->request;
@@ -1351,6 +1390,7 @@ static int afs_fs_setattr_size(struct afs_fs_cursor *fc, struct iattr *attr)
13511390
*bp++ = htonl(attr->ia_size); /* new file length */
13521391

13531392
afs_use_fs_server(call, fc->cbi);
1393+
trace_afs_make_fs_call(call, &vnode->fid);
13541394
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
13551395
}
13561396

@@ -1379,7 +1419,6 @@ int afs_fs_setattr(struct afs_fs_cursor *fc, struct iattr *attr)
13791419

13801420
call->key = fc->key;
13811421
call->reply[0] = vnode;
1382-
call->operation_ID = FSSTORESTATUS;
13831422

13841423
/* marshall the parameters */
13851424
bp = call->request;
@@ -1391,6 +1430,7 @@ int afs_fs_setattr(struct afs_fs_cursor *fc, struct iattr *attr)
13911430
xdr_encode_AFS_StoreStatus(&bp, attr);
13921431

13931432
afs_use_fs_server(call, fc->cbi);
1433+
trace_afs_make_fs_call(call, &vnode->fid);
13941434
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
13951435
}
13961436

@@ -1581,6 +1621,7 @@ static void afs_get_volume_status_call_destructor(struct afs_call *call)
15811621
*/
15821622
static const struct afs_call_type afs_RXFSGetVolumeStatus = {
15831623
.name = "FS.GetVolumeStatus",
1624+
.op = afs_FS_GetVolumeStatus,
15841625
.deliver = afs_deliver_fs_get_volume_status,
15851626
.destructor = afs_get_volume_status_call_destructor,
15861627
};
@@ -1620,6 +1661,7 @@ int afs_fs_get_volume_status(struct afs_fs_cursor *fc,
16201661
bp[1] = htonl(vnode->fid.vid);
16211662

16221663
afs_use_fs_server(call, fc->cbi);
1664+
trace_afs_make_fs_call(call, &vnode->fid);
16231665
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
16241666
}
16251667

@@ -1650,6 +1692,7 @@ static int afs_deliver_fs_xxxx_lock(struct afs_call *call)
16501692
*/
16511693
static const struct afs_call_type afs_RXFSSetLock = {
16521694
.name = "FS.SetLock",
1695+
.op = afs_FS_SetLock,
16531696
.deliver = afs_deliver_fs_xxxx_lock,
16541697
.destructor = afs_flat_call_destructor,
16551698
};
@@ -1659,6 +1702,7 @@ static const struct afs_call_type afs_RXFSSetLock = {
16591702
*/
16601703
static const struct afs_call_type afs_RXFSExtendLock = {
16611704
.name = "FS.ExtendLock",
1705+
.op = afs_FS_ExtendLock,
16621706
.deliver = afs_deliver_fs_xxxx_lock,
16631707
.destructor = afs_flat_call_destructor,
16641708
};
@@ -1668,6 +1712,7 @@ static const struct afs_call_type afs_RXFSExtendLock = {
16681712
*/
16691713
static const struct afs_call_type afs_RXFSReleaseLock = {
16701714
.name = "FS.ReleaseLock",
1715+
.op = afs_FS_ReleaseLock,
16711716
.deliver = afs_deliver_fs_xxxx_lock,
16721717
.destructor = afs_flat_call_destructor,
16731718
};
@@ -1700,6 +1745,7 @@ int afs_fs_set_lock(struct afs_fs_cursor *fc, afs_lock_type_t type)
17001745
*bp++ = htonl(type);
17011746

17021747
afs_use_fs_server(call, fc->cbi);
1748+
trace_afs_make_fs_call(call, &vnode->fid);
17031749
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
17041750
}
17051751

@@ -1730,6 +1776,7 @@ int afs_fs_extend_lock(struct afs_fs_cursor *fc)
17301776
*bp++ = htonl(vnode->fid.unique);
17311777

17321778
afs_use_fs_server(call, fc->cbi);
1779+
trace_afs_make_fs_call(call, &vnode->fid);
17331780
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
17341781
}
17351782

@@ -1760,6 +1807,7 @@ int afs_fs_release_lock(struct afs_fs_cursor *fc)
17601807
*bp++ = htonl(vnode->fid.unique);
17611808

17621809
afs_use_fs_server(call, fc->cbi);
1810+
trace_afs_make_fs_call(call, &vnode->fid);
17631811
return afs_make_call(&fc->ac, call, GFP_NOFS, false);
17641812
}
17651813

@@ -1776,6 +1824,7 @@ static int afs_deliver_fs_give_up_all_callbacks(struct afs_call *call)
17761824
*/
17771825
static const struct afs_call_type afs_RXFSGiveUpAllCallBacks = {
17781826
.name = "FS.GiveUpAllCallBacks",
1827+
.op = afs_FS_GiveUpAllCallBacks,
17791828
.deliver = afs_deliver_fs_give_up_all_callbacks,
17801829
.destructor = afs_flat_call_destructor,
17811830
};
@@ -1866,6 +1915,7 @@ static int afs_deliver_fs_get_capabilities(struct afs_call *call)
18661915
*/
18671916
static const struct afs_call_type afs_RXFSGetCapabilities = {
18681917
.name = "FS.GetCapabilities",
1918+
.op = afs_FS_GetCapabilities,
18691919
.deliver = afs_deliver_fs_get_capabilities,
18701920
.destructor = afs_flat_call_destructor,
18711921
};
@@ -1895,5 +1945,6 @@ int afs_fs_get_capabilities(struct afs_net *net,
18951945
*bp++ = htonl(FSGETCAPABILITIES);
18961946

18971947
/* Can't take a ref on server */
1948+
trace_afs_make_fs_call(call, NULL);
18981949
return afs_make_call(ac, call, GFP_NOFS, false);
18991950
}

fs/afs/internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ struct afs_call {
124124

125125
struct afs_call_type {
126126
const char *name;
127+
unsigned int op; /* Really enum afs_fs_operation */
127128

128129
/* deliver request or reply data to an call
129130
* - returning an error will cause the call to be aborted

0 commit comments

Comments
 (0)