16
16
#include "internal.h"
17
17
#include "afs_fs.h"
18
18
19
+ static const struct afs_fid afs_zero_fid ;
20
+
19
21
/*
20
22
* We need somewhere to discard into in case the server helpfully returns more
21
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
302
static const struct afs_call_type afs_RXFSFetchStatus = {
301
303
.name = "FS.FetchStatus" ,
304
+ .op = afs_FS_FetchStatus ,
302
305
.deliver = afs_deliver_fs_fetch_status ,
303
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
339
call -> cb_break = fc -> cb_break ;
337
340
afs_use_fs_server (call , fc -> cbi );
341
+ trace_afs_make_fs_call (call , & vnode -> fid );
338
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
502
static const struct afs_call_type afs_RXFSFetchData = {
499
503
.name = "FS.FetchData" ,
504
+ .op = afs_FS_FetchData ,
500
505
.deliver = afs_deliver_fs_fetch_data ,
501
506
.destructor = afs_fetch_data_destructor ,
502
507
};
503
508
504
509
static const struct afs_call_type afs_RXFSFetchData64 = {
505
510
.name = "FS.FetchData64" ,
511
+ .op = afs_FS_FetchData64 ,
506
512
.deliver = afs_deliver_fs_fetch_data ,
507
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
533
call -> reply [0 ] = vnode ;
528
534
call -> reply [1 ] = NULL ; /* volsync */
529
535
call -> reply [2 ] = req ;
530
- call -> operation_ID = FSFETCHDATA64 ;
531
536
532
537
/* marshall the parameters */
533
538
bp = call -> request ;
@@ -543,6 +548,7 @@ static int afs_fs_fetch_data64(struct afs_fs_cursor *fc, struct afs_read *req)
543
548
atomic_inc (& req -> usage );
544
549
call -> cb_break = fc -> cb_break ;
545
550
afs_use_fs_server (call , fc -> cbi );
551
+ trace_afs_make_fs_call (call , & vnode -> fid );
546
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
577
call -> reply [0 ] = vnode ;
572
578
call -> reply [1 ] = NULL ; /* volsync */
573
579
call -> reply [2 ] = req ;
574
- call -> operation_ID = FSFETCHDATA ;
575
580
576
581
/* marshall the parameters */
577
582
bp = call -> request ;
@@ -585,6 +590,7 @@ int afs_fs_fetch_data(struct afs_fs_cursor *fc, struct afs_read *req)
585
590
atomic_inc (& req -> usage );
586
591
call -> cb_break = fc -> cb_break ;
587
592
afs_use_fs_server (call , fc -> cbi );
593
+ trace_afs_make_fs_call (call , & vnode -> fid );
588
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
625
* FS.CreateFile and FS.MakeDir operation type
620
626
*/
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 ,
623
637
.deliver = afs_deliver_fs_create_vnode ,
624
638
.destructor = afs_flat_call_destructor ,
625
639
};
@@ -646,8 +660,9 @@ int afs_fs_create(struct afs_fs_cursor *fc,
646
660
padsz = (4 - (namesz & 3 )) & 3 ;
647
661
reqsz = (5 * 4 ) + namesz + padsz + (6 * 4 );
648
662
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 );
651
666
if (!call )
652
667
return - ENOMEM ;
653
668
@@ -678,6 +693,7 @@ int afs_fs_create(struct afs_fs_cursor *fc,
678
693
* bp ++ = 0 ; /* segment size */
679
694
680
695
afs_use_fs_server (call , fc -> cbi );
696
+ trace_afs_make_fs_call (call , & vnode -> fid );
681
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
725
* FS.RemoveDir/FS.RemoveFile operation type
710
726
*/
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 ,
713
737
.deliver = afs_deliver_fs_remove ,
714
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
755
padsz = (4 - (namesz & 3 )) & 3 ;
732
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
761
if (!call )
736
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
781
afs_use_fs_server (call , fc -> cbi );
782
+ trace_afs_make_fs_call (call , & vnode -> fid );
756
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
814
static const struct afs_call_type afs_RXFSLink = {
788
815
.name = "FS.Link" ,
816
+ .op = afs_FS_Link ,
789
817
.deliver = afs_deliver_fs_link ,
790
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
862
* bp ++ = htonl (vnode -> fid .unique );
835
863
836
864
afs_use_fs_server (call , fc -> cbi );
865
+ trace_afs_make_fs_call (call , & vnode -> fid );
837
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
898
static const struct afs_call_type afs_RXFSSymlink = {
870
899
.name = "FS.Symlink" ,
900
+ .op = afs_FS_Symlink ,
871
901
.deliver = afs_deliver_fs_symlink ,
872
902
.destructor = afs_flat_call_destructor ,
873
903
};
@@ -935,6 +965,7 @@ int afs_fs_symlink(struct afs_fs_cursor *fc,
935
965
* bp ++ = 0 ; /* segment size */
936
966
937
967
afs_use_fs_server (call , fc -> cbi );
968
+ trace_afs_make_fs_call (call , & vnode -> fid );
938
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
1002
static const struct afs_call_type afs_RXFSRename = {
972
1003
.name = "FS.Rename" ,
1004
+ .op = afs_FS_Rename ,
973
1005
.deliver = afs_deliver_fs_rename ,
974
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
1069
afs_use_fs_server (call , fc -> cbi );
1070
+ trace_afs_make_fs_call (call , & orig_dvnode -> fid );
1038
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
1104
static const struct afs_call_type afs_RXFSStoreData = {
1072
1105
.name = "FS.StoreData" ,
1106
+ .op = afs_FS_StoreData ,
1073
1107
.deliver = afs_deliver_fs_store_data ,
1074
1108
.destructor = afs_flat_call_destructor ,
1075
1109
};
1076
1110
1077
1111
static const struct afs_call_type afs_RXFSStoreData64 = {
1078
1112
.name = "FS.StoreData64" ,
1113
+ .op = afs_FS_StoreData64 ,
1079
1114
.deliver = afs_deliver_fs_store_data ,
1080
1115
.destructor = afs_flat_call_destructor ,
1081
1116
};
@@ -1135,6 +1170,7 @@ static int afs_fs_store_data64(struct afs_fs_cursor *fc,
1135
1170
* bp ++ = htonl (i_size >> 32 );
1136
1171
* bp ++ = htonl ((u32 ) i_size );
1137
1172
1173
+ trace_afs_make_fs_call (call , & vnode -> fid );
1138
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
1244
* bp ++ = htonl (i_size );
1209
1245
1210
1246
afs_use_fs_server (call , fc -> cbi );
1247
+ trace_afs_make_fs_call (call , & vnode -> fid );
1211
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
1283
static const struct afs_call_type afs_RXFSStoreStatus = {
1247
1284
.name = "FS.StoreStatus" ,
1285
+ .op = afs_FS_StoreStatus ,
1248
1286
.deliver = afs_deliver_fs_store_status ,
1249
1287
.destructor = afs_flat_call_destructor ,
1250
1288
};
1251
1289
1252
1290
static const struct afs_call_type afs_RXFSStoreData_as_Status = {
1253
1291
.name = "FS.StoreData" ,
1292
+ .op = afs_FS_StoreData ,
1254
1293
.deliver = afs_deliver_fs_store_status ,
1255
1294
.destructor = afs_flat_call_destructor ,
1256
1295
};
1257
1296
1258
1297
static const struct afs_call_type afs_RXFSStoreData64_as_Status = {
1259
1298
.name = "FS.StoreData64" ,
1299
+ .op = afs_FS_StoreData64 ,
1260
1300
.deliver = afs_deliver_fs_store_status ,
1261
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
1326
call -> key = fc -> key ;
1287
1327
call -> reply [0 ] = vnode ;
1288
1328
call -> store_version = vnode -> status .data_version + 1 ;
1289
- call -> operation_ID = FSSTOREDATA ;
1290
1329
1291
1330
/* marshall the parameters */
1292
1331
bp = call -> request ;
@@ -1305,6 +1344,7 @@ static int afs_fs_setattr_size64(struct afs_fs_cursor *fc, struct iattr *attr)
1305
1344
* bp ++ = htonl ((u32 ) attr -> ia_size );
1306
1345
1307
1346
afs_use_fs_server (call , fc -> cbi );
1347
+ trace_afs_make_fs_call (call , & vnode -> fid );
1308
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
1375
call -> key = fc -> key ;
1336
1376
call -> reply [0 ] = vnode ;
1337
1377
call -> store_version = vnode -> status .data_version + 1 ;
1338
- call -> operation_ID = FSSTOREDATA ;
1339
1378
1340
1379
/* marshall the parameters */
1341
1380
bp = call -> request ;
@@ -1351,6 +1390,7 @@ static int afs_fs_setattr_size(struct afs_fs_cursor *fc, struct iattr *attr)
1351
1390
* bp ++ = htonl (attr -> ia_size ); /* new file length */
1352
1391
1353
1392
afs_use_fs_server (call , fc -> cbi );
1393
+ trace_afs_make_fs_call (call , & vnode -> fid );
1354
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
1420
call -> key = fc -> key ;
1381
1421
call -> reply [0 ] = vnode ;
1382
- call -> operation_ID = FSSTORESTATUS ;
1383
1422
1384
1423
/* marshall the parameters */
1385
1424
bp = call -> request ;
@@ -1391,6 +1430,7 @@ int afs_fs_setattr(struct afs_fs_cursor *fc, struct iattr *attr)
1391
1430
xdr_encode_AFS_StoreStatus (& bp , attr );
1392
1431
1393
1432
afs_use_fs_server (call , fc -> cbi );
1433
+ trace_afs_make_fs_call (call , & vnode -> fid );
1394
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
1622
static const struct afs_call_type afs_RXFSGetVolumeStatus = {
1583
1623
.name = "FS.GetVolumeStatus" ,
1624
+ .op = afs_FS_GetVolumeStatus ,
1584
1625
.deliver = afs_deliver_fs_get_volume_status ,
1585
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
1661
bp [1 ] = htonl (vnode -> fid .vid );
1621
1662
1622
1663
afs_use_fs_server (call , fc -> cbi );
1664
+ trace_afs_make_fs_call (call , & vnode -> fid );
1623
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
1693
static const struct afs_call_type afs_RXFSSetLock = {
1652
1694
.name = "FS.SetLock" ,
1695
+ .op = afs_FS_SetLock ,
1653
1696
.deliver = afs_deliver_fs_xxxx_lock ,
1654
1697
.destructor = afs_flat_call_destructor ,
1655
1698
};
@@ -1659,6 +1702,7 @@ static const struct afs_call_type afs_RXFSSetLock = {
1659
1702
*/
1660
1703
static const struct afs_call_type afs_RXFSExtendLock = {
1661
1704
.name = "FS.ExtendLock" ,
1705
+ .op = afs_FS_ExtendLock ,
1662
1706
.deliver = afs_deliver_fs_xxxx_lock ,
1663
1707
.destructor = afs_flat_call_destructor ,
1664
1708
};
@@ -1668,6 +1712,7 @@ static const struct afs_call_type afs_RXFSExtendLock = {
1668
1712
*/
1669
1713
static const struct afs_call_type afs_RXFSReleaseLock = {
1670
1714
.name = "FS.ReleaseLock" ,
1715
+ .op = afs_FS_ReleaseLock ,
1671
1716
.deliver = afs_deliver_fs_xxxx_lock ,
1672
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
1745
* bp ++ = htonl (type );
1701
1746
1702
1747
afs_use_fs_server (call , fc -> cbi );
1748
+ trace_afs_make_fs_call (call , & vnode -> fid );
1703
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
1776
* bp ++ = htonl (vnode -> fid .unique );
1731
1777
1732
1778
afs_use_fs_server (call , fc -> cbi );
1779
+ trace_afs_make_fs_call (call , & vnode -> fid );
1733
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
1807
* bp ++ = htonl (vnode -> fid .unique );
1761
1808
1762
1809
afs_use_fs_server (call , fc -> cbi );
1810
+ trace_afs_make_fs_call (call , & vnode -> fid );
1763
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
1825
static const struct afs_call_type afs_RXFSGiveUpAllCallBacks = {
1778
1826
.name = "FS.GiveUpAllCallBacks" ,
1827
+ .op = afs_FS_GiveUpAllCallBacks ,
1779
1828
.deliver = afs_deliver_fs_give_up_all_callbacks ,
1780
1829
.destructor = afs_flat_call_destructor ,
1781
1830
};
@@ -1866,6 +1915,7 @@ static int afs_deliver_fs_get_capabilities(struct afs_call *call)
1866
1915
*/
1867
1916
static const struct afs_call_type afs_RXFSGetCapabilities = {
1868
1917
.name = "FS.GetCapabilities" ,
1918
+ .op = afs_FS_GetCapabilities ,
1869
1919
.deliver = afs_deliver_fs_get_capabilities ,
1870
1920
.destructor = afs_flat_call_destructor ,
1871
1921
};
@@ -1895,5 +1945,6 @@ int afs_fs_get_capabilities(struct afs_net *net,
1895
1945
* bp ++ = htonl (FSGETCAPABILITIES );
1896
1946
1897
1947
/* Can't take a ref on server */
1948
+ trace_afs_make_fs_call (call , NULL );
1898
1949
return afs_make_call (ac , call , GFP_NOFS , false);
1899
1950
}
0 commit comments