1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
|
Thu Feb 6 01:56:27 1997 Miles Bader <miles@gnu.ai.mit.edu>
(diskfs_S_file_getfh, diskfs_S_fsys_getfile): Functions removed.
Tue Nov 19 18:28:26 1996 Miles Bader <miles@gnu.ai.mit.edu>
* inode.c (read_disknode): If SBLOCK->fs_inodefmt < FS_44INODEFMT,
set ST->st_author to st->st_uid, and NP->author_tracks_uid to true.
(diskfs_validate_author_change): New function.
Mon Nov 18 17:10:00 1996 Miles Bader <miles@gnu.ai.mit.edu>
* inode.c (read_disknode): When setting ST->st_mode, Clear
S_ITRANS bits, and set S_IPTRANS if necessary. Don't set
NP->istranslated anymore.
(diskfs_set_translator): Frob S_IPTRANS bit in mode bits instead
of NP->istranslated.
(write_node): Don't write any bits in S_ITRANS to disk.
* alloc.c (ffs_alloc): Use S_IPTRANS in NP->dn_stat.st_mode
instead of NP->istranslated.
Sat Nov 16 17:21:40 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* inode.c (diskfs_S_fsys_getfile): Delete var `fakecred'.
diskfs_access -> fshelp_access.
* alloc.c (ffs_alloc): diskfs_isuid -> idvec_contains.
(ffs_realloccg): Likewise.
Thu Nov 14 16:43:36 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* inode.c (diskfs_S_file_getfh): diskfs_isuid -> idvec_contains.
(diskfs_S_fsys_getfile): Use idvecs and iousers.
Thu Oct 24 16:07:17 1996 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (startup_children, runtime_children): New variables.
(startup_parents, runtime_parents): Variables removed.
(startup_argp, runtime_argp): Use new *_CHILDREN variables instead of
corresponding *_PARENT ones.
Thu Sep 19 18:02:40 1996 Miles Bader <miles@gnu.ai.mit.edu>
* Makefile (HURDLIBS): Add store.
Wed Sep 18 15:30:00 1996 Miles Bader <miles@gnu.ai.mit.edu>
* inode.c (diskfs_S_file_get_storage_info): Narrow scope of RUN.
* consts.c (diskfs_extra_version): New variable.
* main.c (main): Remove CLASSES argument to store_parsed_open.
Use STORE_PARAMS variable to get result from parsing STORE_ARGP.
Don't force COMPAT_GNU on bootstrap filesystems (it's the default
anyway).
Mon Sep 16 13:27:38 1996 Miles Bader <miles@gnu.ai.mit.edu>
* Makefile (ufs.static ufs): Add ../libstore/libstore.a.
* hyper.c (zeroblock): Change type to `void *'.
(get_hypermetadata): Cast ZEROBLOCK when vm_{de,}allocating.
* ufs.h (zeroblock): Change type to `void *'.
* sizes.c (diskfs_truncate): Don't cast ZEROBLOCK to diskfs_node_rw.
(block_extended, diskfs_grow): Do cast it to offer_data.
* main.c (main): Don't set DISKFS_USE_MACH_DEVICE (which is no longer).
* inode.c (diskfs_S_file_get_storage_info): Coalesce adjacent
blocks when constructing RUNS.
Set *PORTS_TYPE, not *STORAGE_PORT_TYPE.
* inode.c (diskfs_S_file_getfh): Variable ERR removed.
* sizes.c (indir_release): Use DISKFS_DISK_PAGER instead of DISK_PAGER.
* ufs.h (sync_disk_blocks): Likewise.
* pokeloc.c (sync_disk): Likewise.
* main.c (diskfs_reload_global_state): Likewise.
* pager.c (create_disk_pager, diskfs_shutdown_pager,
diskfs_sync_everything): Likewise.
* main.c <argp.h>, <hurd/store.h>: New includes.
* hyper.c, pager.c, inode.c <hurd/store.h>: New include.
(get_hypermetadata): Use %Zd for printfing size_t.
(diskfs_set_hypermetadata): Return EIO for incomplete writes.
Cast BUF when calling vm_deallocate.
* dir.c (diskfs_direnter_hard): Initialize OLDSIZE to shut up gcc.
Sat Sep 14 20:38:47 1996 Miles Bader <miles@gnu.ai.mit.edu>
* ufs.h (store, store_parsed, disk_image): New declarations.
* pager.c (thread_function): Function removed.
(create_disk_pager): Create PAGER_BUCKET.
Use diskfs_start_disk_pager instead of disk_pager_setup.
(disk_image): New variable.
* main.c (store, store_parsed, diskfs_disk_name): New variables.
(parse_opt): Propagate our input to the first child parser.
(diskfs_append_args): New function.
(diskfs_get_options): Function removed.
(startup_parents): Use DISKFS_STORE_STARTUP_ARGP instead of
DISKFS_STD_DEVICE_STARTUP_ARGP.
* hyper.c (get_hypermetadata): Use DISKFS_DISK_NAME instead of
DISKFS_DEVICE_ARG.
* main.c (main): Likewise.
* hyper.c (get_hypermetadata, diskfs_readonly_changed): Use
fields in STORE instead of DISKFS_DEVICE_* variables.
* inode.c (diskfs_S_file_get_storage_info): Likewise.
* pager.c (pager_report_extent): Likewise.
* main.c (main): Likewise.
* pager.c (pager_read_page, pager_write_page, pager_unlock_page):
Use store_{read,write} instead of diskfs_device_{read,write}_sync.
* hyper.c (diskfs_set_hypermetadata): Likewise.
* inode.c (diskfs_S_file_get_storage_info): Rewrite to use
libstore functions (still has NDADDR block limit, though).
Thu Sep 12 16:36:19 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* Makefile (HURDLIBS): New variable.
(ufs.static ufs): Depend on $(library_deps) instead of long list
of libraries.
Fri Sep 6 16:00:42 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* consts.c: Include <version.h>.
(diskfs_major_version, diskfs_minor_version, diskfs_edit_version):
Deleted variables.
(diskfs_server_version): New variable.
Thu Aug 29 16:07:07 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* dir.c (diskfs_lookup_hard): When setting ds->stat to EXTEND, set
ds->idx by looking at the size of the file. (IDX itself is no
longer at the end because of the change on Aug 16 1996.)
Wed Aug 28 12:15:15 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* dir.c (dirscanblock): Size dirents correctly when mallocing it.
(diskfs_direnter_hard): Be more careful when sizing or resizing
dirents. Correctly set to -1 all the new entries we create after
realloc call.
Fri Aug 16 18:51:31 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* ufs.h (struct disknode): New member `dir_idx'.
* inode.c (diskfs_cached_lookup): Initialize DN->dir_idx.
* dir.c (diskfs_lookup_hard): After successful dirscanblock,
record index where we finished in DP->dn->dir_idx. Start searches
at that index.
Mon Aug 12 13:43:46 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* hyper.c (diskfs_set_hypermetadata): Bother to return 0 at end of
function.
Wed Aug 7 13:00:30 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* inode.c (diskfs_set_statfs): Compute st->f_blocks correctly; set
bsize to be fs_fsize, not fs_bsize.
* hyper.c (diskfs_set_hypermetadata): Return an error as
appropriate.
* inode.c (struct ufs_fhandle): Layout filehandle more like Unixy
NFSD.
(diskfs_S_file_getfh): Bother to clear unused parts of a
file handle so that they always compare equal.
Tue Aug 6 12:19:38 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* inode.c: Include <fcntl.h>.
(struct ufs_fhandle): New type.
(diskfs_S_fsys_getfile, diskfs_S_file_getfh): New functions.
Tue Jul 23 15:58:28 1996 Miles Bader <miles@gnu.ai.mit.edu>
* inode.c (write_node, read_disknode): `struct timespec' now uses
a field prefix of `tv_'.
Sat Jul 6 16:14:10 1996 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (ufs_version): Variable removed.
Sat Jul 6 12:45:36 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* inode.c (read_disknode): Don't set allocsize based on st->size
for kludged symlinks.
* sizes.c (diskfs_truncate): Call record_poke after truncating a
kludged symlink.
Wed Jul 3 13:27:04 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* main.c: Include <argz.h>.
(startup_parents, runtime_parents): Declare const.
Tue Jun 25 14:02:02 1996 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (diskfs_get_options): Include `--compat=' in options.
Mon Jun 24 16:59:12 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* dir.c (diskfs_lookup_hard): Use diskfs_check_readonly instead of
diskfs_readonly.
(diskfs_dirempty): Likewise.
* dir.c (diskfs_lookup_hard): Use diskfs_check_readonly instead of
diskfs_readonly.
(diskfs_dirempty): Likewise.
* inode.c (diskfs_cached_lookup): Likewise.
(read_symlink_hook): Likewise.
* sizes.c (diskfs_truncate): Call diskfs_check_readonly.
(diskfs_grow): Likewise.
* hyper.c (diskfs_set_hypermetadata): If CLEAN is not set, make
sure we clear the clean bit on disk. Always call sync_disk (with
appropriate WAIT).
(diskfs_readonly_changed): Don't do set_hypermetadata here.
(copy_sblock): Don't track clean state here.
* pager.c (diskfs_shutdown_pager): Don't shutdown DISKPAGER ever,
just sync it instead.
Sat Jun 22 17:45:34 1996 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (diskfs_get_options): New function.
(options): Make const.
Fri Jun 21 01:32:09 1996 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (parse_opt): Handle runtime invalid selection of 4.2 mode.
Save select mode until we're done to correctly deal with external
errors at runtime.
(startup_parents, startup_argp, runtime_parents, runtime_argp):
New variables.
(main): Argp vars made global.
(argp_parents): diskfs_device_startup_argp -->
&diskfs_std_device_startup_argp.
Sat Jun 15 13:57:27 1996 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (options): New variable.
(parse_opt): New function.
(main): Parse ufs-specific options too.
<string.h>: New include.
Fri May 10 09:29:03 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* inode.c (diskfs_set_statfs): Fix one reference to old name of ST
member.
Thu May 9 11:54:13 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* Makefile (ufs.static ufs): s/ioserver/iohelp/g
* ufs.h: ioserver.h -> iohelp.h.
* inode.c (diskfs_set_statfs): Use and fill in new statfs
structure.
Mon May 6 14:23:54 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* main.c (ufs_version): Upgrade to 0.0.
Fri May 3 09:15:33 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* sizes.c (block_extended): Rewrite code that moves pages
to be more efficient, and not deadlock too, using unlocked
pagein permission feature (read "hack"). Return value
now indicates whether we expect a sync.
(diskfs_grow): If a call to block_extended returns nonzero,
then sync the file before returning.
* pager.c (diskfs_get_filemap): Initialize
UPI->allow_unlocked_pagein and UPI->unlocked_pagein_length.
(unlocked_pagein_lock): New variable.
(find_address): New parameter `isread'; all callers changed.
If ISREAD and we are in the unlocked pagein region, don't
attempt to acquire NP->dn->allocptrlock.
* ufs.h (struct user_pager_info): New members
`allow_unlocked_pagein' and `unlocked_pagein_length'.
(unlocked_pagein_lock): New variable.
Thu May 2 10:56:10 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* sizes.c (offer_data): Offer pages at ADDR each time through the
loop, not the same page over and over.
(block_extended): When moving data, sync in-core pager both before
reading from disk and after providing data to kernel.
(diskfs_grow): Always call block_extended or offer_data before
adjusting block pointer.
Tue Apr 30 13:38:42 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* sizes.c (diskfs_grow): In last offer_data, don't offer a block
number as an address.
Fri Apr 26 15:35:53 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* Makefile (makemode): Now `servers'.
(targets): Renamed from `target'; now include ufs.static.
(ufs.static-LDFLAGS): Renamed from `LDFLAGS'.
(ufs.static): Depend on same things as `ufs'.
(include ../Makeconf): Must come before dependency information.
Wed Apr 24 14:05:48 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* dir.h (DIRECT_NAMLEN) [! LITTLE_ENDIAN]: Deal correctly with the
case where it was written on a little endian machine without the
extension.
(DIRECT_NAMLEN) [LITTLE_ENDIAN]: Deal with case correctly where it
was written without the extension on a big endian machine.
* dir.c (dirscanblock): Use read/write_disk_entry when reading or
writing fields from directory entries.
(diskfs_direnter_hard): Likewise.
(diskfs_dirremove_hard): Likewise.
(diskfs_dirrewrite_hard): Likewise.
(diskfs_get_directs): Likewise.
(diskfs_dirempty): Likewise.
(count_dirents): Likewise.
Tue Apr 23 11:28:42 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* dir.c (diskfs_dirempty): node_update -> diskfs_node_update.
* hyper.c (swab_sblock, swab_csums): New functions.
(get_hypermetadata): If this is a swapped filesystem, set swab_disk.
Also swap csum and sblock after reading them.
(diskfs_set_hypermetadata): If swab_disk, swap the csums back before
writing them.
(copy_sblock): If swab_disk, swap the sblock before writing it.
* ufs.h (swab_disk): New variable.
(swab_short, swab_long, swab_long_long): New functions.
(read_disk_entry, write_disk_entry): New macros.
* alloc.c (ffs_realloccg): Use read/write_disk_entry when
reading/writing on-disk inode fields.
* bmap.c (fetch_indir_spec): Likewise.
* inode.c (read_disknode): Likewise.
(write_node): Likewise.
(diskfs_set_translator): Likewise.
(diskfs_get_translator): Likewise.
(diskfs_S_file_get_storage_info): Likewise.
* sizes.c (diskfs_truncate): Likewise.
(diskfs_grow): Likewise.
* pager.c (pager_unlock_page): Likewise.
* bmap.c (fetch_indir_spec): Use read/write_disk_entry when
reading/writing on-disk indirect blocks.
* sizes.c (diskfs_truncate): Likewise.
(indir_release): Likewise.
(diskfs_grow): Likewise.
* pager.c (pager_unlock_page): Likewise.
* alloc.c: Include <string.h>
(ffs_blkpref): Use read_disk_entry when reading from BAP array.
(swab_cg, read_cg, release_cg): New functions.
(ffs_fragextend, ffs_alloccg, ffs_nodealloccg, ffs_blkfree,
diskfs_free_node): Use new cg access functions.
Thu Apr 18 14:50:30 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* sizes.c (diskfs_grow): New variable `pagerpt'.
(offer_zeroes, block_extended): New functions.
(diskfs_grow): In initializing newly allocated data disk blocks with
zeroes, use less aggressive offer_zeroes instead of immediate
synchronous writes. After ffs_realloccg succeeds, use
block_extended to handle the magic. Get rid of old poke calls.
* alloc.c (ffs_realloccg): If we are allocating a new block, don't
actually free the old one here.
* sizes.c (diskfs_grow): New variable `pagerpt'.
(offer_zeroes, block_extended): New functions.
(diskfs_grow): In initializing newly allocated data disk blocks
with zeroes, use less aggressive offer_zeroes instead of immediate
synchronous writes. After ffs_realloccg succeeds, use
block_extended to handle the magic. Get rid of old poke calls.
Tue Apr 16 15:20:07 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* dir.c (diskfs_lookup_hard): Set atime appropriately, and sync
the new atime if we are running synchronously (!).
(diskfs_dirempty): Likewise.
(diskfs_direnter_hard): Set mtime appropriately.
(diskfs_dirremove_hard): Likewise.
(diskfs_dirrewrite_hard): Likewise.
* inode.c (diskfs_write_disknode): Only do sync if WAIT is set.
Thu Apr 4 16:39:22 1996 Miles Bader <miles@gnu.ai.mit.edu>
* inode.c (diskfs_cached_lookup): Intialize NP->cache_id *after*
NP exists.
Wed Apr 3 16:03:51 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* inode.c (diskfs_cached_lookup): Renamed from `iget'. All
callers changed. Initialize NP->cache_id.
Fri Mar 29 16:52:31 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* sizes.c (diskfs_truncate): Cast DI->di_shortlink to correct type
before adding a character count to it.
Mon Mar 25 13:08:10 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* dir.c (diskfs_null_dirstat): New function.
Fri Mar 22 23:43:53 1996 Miles Bader <miles@gnu.ai.mit.edu>
* inode.c (read_symlink_hook): Only set NP's atime if !readonly.
Wed Mar 20 14:36:31 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* dir.c (diskfs_lookup_hard): Don't do initial or final permission
checking here.
* dir.c (diskfs_dirrewrite_hard): Renamed from diskfs_dirrewrite.
No longer call modification tracking routines.
(diskfs_dirremove_hard): Renamed from diskfs_dirremove. No longer call
modification tracking routines.
(diskfs_direnter_hard): Renamed from diskfs_direnter. No longer call
modification tracking routines.
(diskfs_lookup_hard): Renamed from diskfs_lookup.
Mon Mar 18 19:50:41 1996 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (main): Pass new arg to argp_parse.
Mon Mar 18 12:33:06 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* pager.c (diskfs_max_user_pager_prot) [add_pager_max_prot]:
(a == b) ? 1 : 0 ====> (a == b).
Fri Feb 23 15:27:05 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* hyper.c (get_hypermetadata): Use diskfs_device_arg in unclean msgs.
Wed Feb 21 05:57:12 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* hyper.c: Implement proper handling of the filesystem `clean bit'.
(ufs_clean): New variable.
(get_hypermetadata): Set it from the fs_clean flag. If not clean,
complain and force read-only. Complain when ignoring COMPAT_BSD42.
(diskfs_set_hypermetadata): Set the clean flag in the superblock
when CLEAN and fs was clean to start with.
(copy_sblock): Remove bogus clean flag frobnication.
Fri Feb 16 17:05:36 1996 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (main): Check error return from diskfs_init_diskfs.
Sat Jan 6 11:50:14 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* ufs.h (diskpager, diskpagerport, disk_image): Variables removed.
Include <hurd/diskfs-pager.h> instead.
(sync_disk_blocks): Use `disk_pager' in place of `diskpager->p'.
* pager.c (diskfs_shutdown_pager, diskfs_sync_everything): Use
`disk_pager' in place of `diskpager->p'.
(create_disk_pager): Rewritten using disk_pager_setup.
* pokeloc.c (sync_disk): Use `disk_pager' in place of `diskpager->p'.
* sizes.c (indir_release): Likewise.
* main.c (diskfs_reload_global_state): Likewise.
Thu Jan 4 19:10:11 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* main.c (main): Don't map disk image here; create_disk_pager now
does it.
* hyper.c (get_hypermetadata, copy_sblock): Don't put
diskfs_catch_exception () inside assert, bonehead! Use
assert_perror on a variable of its result.
Mon Jan 1 16:38:14 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* pager.c (pager_unlock_page): When allocating block in direct
array, clear it synchronously just like we do when it goes in the
indirect array.
Thu Nov 9 14:01:30 1995 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* dir.c (struct dirstat): New member `nbytes'.
(dirscanblock): If DS->type is COMPRESS, still look
for TAKE/SHRINK possibilities. Also, if it's COMPRESS,
still look to see if the current block can be compressed
with fewer byte copies.
Sun Nov 5 02:08:38 1995 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (main): Add flags arg to diskfs_startup_diskfs call.
Sat Nov 4 20:01:58 1995 Miles Bader <miles@gnu.ai.mit.edu>
* inode.c (diskfs_S_file_get_storage_info): Add FLAGS argument.
Thu Oct 19 12:50:11 1995 Miles Bader <miles@gnu.ai.mit.edu>
* pager.c (diskfs_max_user_pager_prot): Return what we discovered,
instead of 1.
* dir.c (diskfs_lookup, diskfs_dirempty): Give diskfs_get_filemap
a protection arg.
* sizes.c (diskfs_truncate, diskfs_grow): Ditto.
* hyper.c (diskfs_readonly_changed): Give the 2nd arg to
vm_protect an appropiate type.
* pager.c (diskfs_max_user_pager_prot): Stop iterating early if poss.
Wed Oct 18 16:28:42 1995 Miles Bader <miles@gnu.ai.mit.edu>
* ufs.h (struct user_pager_info): Add max_prot field.
* pager.c (diskfs_get_filemap): Add PROT parameter, & use it.
(diskfs_pager_users): Split out block_caching & enable_caching.
(block_caching, enable_caching): New function.
(diskfs_max_user_pager_prot): New function.
* main.c (main): Always include VM_PROT_WRITE in max prot.
* hyper.c (diskfs_readonly_changed): Change the protection of
DISK_IMAGE to reflect the new state. Clear SBLOCK_DIRTY if readonly.
* inode.c (read_disknode): Bother to set the allocsize field.
* ufs.h (struct rwlock): Structure deleted.
(rwlock_init, rwlock_reader_unlock, rwlock_reader_lock,
rwlock_writer_lock, rwlock_writer_unlock): Functions deleted.
Tue Oct 17 14:49:43 1995 Miles Bader <miles@gnu.ai.mit.edu>
* inode.c (diskfs_node_reload): New function.
(iget): Move allocsize setting into read_disknode.
* pager.c (flush_node_pager): New function.
* ufs.h (zeroblock, sblock, csum): Declare extern.
(flush_node_pager, flush_pokes): New declarations.
* pokeloc.c (flush_pokes): New function.
* hyper.c (diskfs_readonly_changed): New function.
(get_hypermetadata): Move compat_mode futzing & disk size
validation here from main.
(zeroblock, sblock, csum): Define (were common).
(get_hypermetadata): Only allocate SBLOCK if not already done.
Deallocate any old ZEROBLOCK and CSUM storage.
(diskfs_readonly_changed): New function.
* main.c (main): Move stuff into get_hypermetadata.
Writable init code moved to diskfs_readonly_changed.
(diskfs_reload_global_state): New function.
Fri Oct 13 15:03:37 1995 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (main): Use new handy diskfs routines and get rid of
tons of junk. Main should be almost all ufs-specific now.
(USAGE, usage, SHORT_OPTS, long_opts, parse_opt, trans_parse_arg): RIP.
(printf_lock): Initialize.
Thu Oct 12 18:48:04 1995 Miles Bader <miles@gnu.ai.mit.edu>
* pager.c (pager_unlock_page, pager_write_page, pager_read_page):
Use diskfs_device_{read,write}_sync instead of dev_{read,write}_sync.
* hyper.c (diskfs_set_hypermetadata): Ditto.
* sizes.c (diskfs_grow): Ditto.
* pager.c (pager_report_extent): Calculate the pager size.
* ufs.h (dev_read_sync, dev_write_sync, dev_write, diskpagersize):
Decls removed.
* Makefile (SRCS): Remove devio.c.
* ufs.h (ufs_device, ufs_device_name): Variables removed.
* inode.c (diskfs_S_file_get_storage_info): Use DISKFS_DEVICE
instead of UFS_DEVICE, and DISKFS_DEVICE_NAME instead of
UFS_DEVICE_NAME.
Sat Oct 7 20:47:56 1995 Miles Bader <miles@gnu.ai.mit.edu>
* main.c (diskfs_init_completed): Function deleted (now in libdiskfs).
(thread_cancel): Function deleted.
Fri Oct 6 17:30:23 1995 Miles Bader <miles@gnu.ai.mit.edu>
* inode.c (diskfs_S_file_get_storage_info): Change type of
ADDRESSES to off_t **, and add the BLOCK_SIZE parameter.
Wed Oct 4 17:21:33 1995 Miles Bader <miles@gnu.ai.mit.edu>
* inode.c (diskfs_set_statfs): fsys_stb_bsize -> fsys_stb_iosize.
fsys_stb_fsize -> fsys_stb_bsize.
* main.c (parse_opt): Rearrange slightly.
Tue Sep 26 11:54:35 1995 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* inode.c: Include <netinet/in.h>.
(diskfs_S_file_get_storage_info): New function.
* main.c (main): Delete var `devname'. Use `ufs_device_name'
throughout instead.
* ufs.h (ufs_device_name): New var.
Fri Sep 22 13:22:42 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* hyper.c (get_hypermetadata): Use %Zd format for result of sizeof.
Tue Sep 19 13:41:46 1995 Miles Bader <miles@churchy.gnu.ai.mit.edu>
* Makefile (LDFLAGS): New variable.
Wed Sep 13 12:30:23 1995 Michael I. Bushnell, p/BSG <mib@duality.gnu.ai.mit.edu>
* dir.c (diskfs_lookup): Don't attempt to lock NP if NPP is not
set. Don't even set NP if NPP is not set; use INUM as "lookup
succeeded flag" instead. Lookups for REMOVE and RENAME now *must*
set NPP.
Wed Sep 6 11:01:50 1995 Miles Bader <miles@churchy.gnu.ai.mit.edu>
* pager.c (diskfs_pager_users): Ignore the disk pager when seeing
if there are any active pagers.
Mon Aug 28 17:07:36 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makefile (ufs): Depend on ../libshouldbeinlibc/libshouldbeinlibc.a.
Fri Aug 25 17:14:09 1995 Michael I. Bushnell, p/BSG <mib@duality.gnu.ai.mit.edu>
* sizes.c (diskfs_truncate): When freeing direct blocks mentioned
in a single indirect block, or single indirect blocks mentioned in
a double, only call the free routine (ffs_blkfree or
indir_release, respectively) if the block is actually allocated.
Wed Aug 23 12:24:07 1995 Miles Bader <miles@churchy.gnu.ai.mit.edu>
* Makefile (ufs): Add explicit dependencies.
(HURDLIBS, LDFLAGS, REMHDRS): Removed.
Rules associated with ../lib removed.
Fri Jul 21 17:48:12 1995 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* pager.c (diskfs_get_filemap): Drop initial reference created by
pager_create.
* pager.c (diskfs_get_filemap): Avoid race with simultaneous
termination by looping until we win.
(pager_clear_user_data): Only clear UPI->np->dn->fileinfo if it
still points to us.
Mon Jul 17 14:35:25 1995 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* pager.c (thread_function): Don't have any global timeout here;
we don't use it anyhow.
Thu Jul 6 15:42:52 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* Makefile: Removed dependencies that are now automatically
generated.
Mon Jun 26 20:17:42 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* pager.c: Include <unistd.h>.
(diskfs_pager_users): New function.
Thu Jun 22 11:41:04 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* pager.c (thread_function): Move thread_function to be non-local,
of course, because it needs to live even after create_disk_pager
returns.
* main.c (thread_cancel): New function (HACK).
* Makefile (HURDLIBS): Add libihash.
* main.c (main): Have main thread exit when done instead of
calling a diskfs function.
Wed Jun 21 12:20:01 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* ufs.h (user_pager_info): Removed members next and prevp.
* pager.c (pager_clear_user_data): Don't maintain pager linked
list.
(diskfs_get_filemap): Don't maintain pager linked list.
(pager_dropweak): New function.
(pager_traverse): Delete function.
(diskfs_shutdown_pager): Use ports_bucket_iterate instead of
pager_traverse.
(diskfs_sync_everything): Likewise.
* pager.c (pager_bucket): New variable.
(create_disk_pager): Provide pager_bucket in call to pager_create.
(diskfs_get_filemap): Likewise.
(diskfs_file_update): Use ports reference calls directly instead
of pager wrappers.
(drop_pager_softrefs): Likewise.
(allow_pager_softrefs): Likewise.
(pager_traverse): Likewise.
(create_disk_pager): Initialize pager_bucket here and fork off
service thread for pager ports.
* sizes.c (diskfs_truncate): Likewise.
* dir.c (diskfs_lookup): Provide initialization for BUFLEN.
(diskfs_direnter): Move assignment out of if test.
Tue Jun 20 11:48:06 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* sizes.c (diskfs_grow): Provide initialization of POKE_OFF.
* alloc.c (ffs_realloccg): Remove assignment from if tests.
* sizes.c (diskfs_truncate): Likewise.
* bmap.c (fetch_indir_spec): Likewise.
Mon Jun 19 21:17:21 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* inode.c (diskfs_node_iterate): New function.
(write_all_disknodes): Use it.
Wed Jun 14 16:18:55 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* inode.c (diskfs_get_translator): Conform to new memory usage
semantic.
Sat May 20 00:17:30 1995 Miles Bader <miles@churchy.gnu.ai.mit.edu>
* main.c (trans_parse_args): Use options_parse &
diskfs_standard_startup_options to parse our translator options.
(usage): New function.
(parse_opt): New function.
* Makefile (CPPFLAGS): Add -I../lib, to get include lib include files,
and $(CPPFLAGS-$(notdir $<)) to get file-specific cpp options.
Add a vpath for %.c to ../lib, so we can use source files from there.
Mon May 15 13:14:48 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* pager.c (pager_clear_user_data): Doc fix.
Sat May 13 05:04:11 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makefile (OBJS): Remove exec_server_image.o.
(exec_server_image.o): Rule removed.
Mon May 8 08:43:43 1995 Miles Bader <miles@churchy.gnu.ai.mit.edu>
* dir.c (diskfs_lookup): When looping back to try_again: because
we're looking up "..", be sure and trash the mapping we made of
the directory's pager -- otherwise the reference to the pager
never gets dropped and we can never free the node.
* dir.c (diskfs_lookup): ds->type was being compared to LOOKING, which
value it can never have. Compare ds->stat against LOOKING instead.
* pager.c (pager_clear_user_data): Don't die when called on the
disk pager.
* inode.c (write_all_disknodes): Fix typo `alloc' --> `alloca'.
Tue May 2 11:59:09 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* pager.c (pager_clear_user_data): Acquire pagerlistlock around
modifications to UPI->next/prevp list structure.
Fri Apr 28 19:02:05 1995 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* inode.c (write_all_disknodes): We have to really lock the nodes
around the calls to diskfs_set_node_times and write_node; this in
turn forces us to have real refereces.
Thu Apr 13 16:36:57 1995 Miles Bader <miles@churchy.gnu.ai.mit.edu>
* main.c (main): Don't abort if a std file descriptor is already open.
Tue Apr 4 20:08:25 1995 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* inode.c (diskfs_set_translator): When freeing passive
translator, account for blocks freed in NP->dn_stat.st_blocks.
Fri Mar 31 13:43:27 1995 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* sizes.c (diskfs_truncate): Don't acquire writer lock on
NP->dn->allocptrlock until after forcing delayed copies through;
otherwise the pageins will deadlock attempting to get a reader
lock to service them. This is safe, because we only need
NP->allocsize here, and that can't change as long as we hold
NP->lock.
Mon Mar 20 13:58:44 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* consts.c (diskfs_synchronous): New variable.
Fri Mar 17 14:31:04 1995 Michael I Bushnell <mib@duality.gnu.ai.mit.edu>
* alloc.c (ffs_clusteracct): Make static.
(alloc_sync): New function.
(ffs_alloc): Call alloc_sync.
(ffs_realloccg): Likewise.
(diskfs_alloc_node): Likewise.
(ffs_blkfree): Likewise.
(diskfs_free_node): Likewise.
Sat Jan 28 14:59:26 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makefile (OBJS): Remove reference to libc's devstream.o.
Fri Nov 11 11:45:38 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* hyper.c (diskfs_set_hypermetadata): Always use dev_write_sync to
avoid device_write bug that says you can't modify the buffer until
device_write returns. Also remember to deallocate BUF.
Thu Nov 10 13:27:09 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* main.c (main): Issue decent prompt.
* hyper.c (diskfs_set_hypermetadata): Copy CSUM into a
page-aligned page-sized buffer for disk write to avoid inane
kernel bug.
Wed Nov 9 05:43:14 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* main.c (main): Behave more reasonably if we can't open DEVNAME.
Tue Nov 8 00:03:20 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* pager.c (pager_write_page): Use %p for printing PAGER.
* ufs.h: Declare copy_sblock.
Wed Nov 2 16:06:10 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* hyper.c (copy_sblock): Don't copy csum here.
(diskfs_set_hypermetadata): Write csum directly to disk here.
Thu Oct 27 20:58:08 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* dir.c (diskfs_lookup): diskfs_get_filemap returns a send right,
so don't create an additional one here.
(diskfs_dirempty): Likewise.
* sizes.c (diskfs_truncate): Likewise.
(diskfs_grow): Likewise.
Tue Oct 25 12:49:41 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* hyper.c (copy_sblock): Call record_poke for csum and superblock
after modifying them.
* pager.c (diskfs_shutdown_pager): Call copy_sblock.
(diskfs_sync_everything): Likewise.
* alloc.c (ffs_fragextend): Call record_poke for CG after
modifying it. Also set CSUM_DIRTY and SBLOCK_DIRTY.
(ffs_alloccg): Likewise.
(ffs_alloccgblk): Likewise.
(ffs_nodealloccg): Likewise.
(ffs_blkfree): Likewise.
(diskfs_free_node): Likewise.
Fri Oct 7 01:32:56 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* main.c (diskfs_init_completed): Don't call _hurd_proc_init.
(saved_argv): Variable removed.
(main): Don't set saved_argv. Pass ARGV to diskfs_start_bootstrap.
Wed Oct 5 22:18:46 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* inode.c (read_disknode): If we are the bootstrap filesystem,
then getpid changes once proc starts up. So only call getpid
once, thus not allowing st_dev values to mysteriously change.
Wed Oct 5 12:56:53 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* alloc.c (diskfs_alloc_node): Abort if free inode has
translator attached.
Tue Oct 4 18:33:35 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* pager.c (pager_unlock_page): Call diskfs_catch_exception.
Tue Oct 4 00:16:04 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* inode.c (diskfs_lost_hardrefs): Comment out body.
* ufs.h (node2pagelock): New variable.
* pager.c (node2pagelock): Initialize.
(diskfs_get_filemap): Don't let node hold a reference to the pager.
(pager_clear_user_data): Acquire node2pagelock and clear
the node's reference to the pager.
(diskfs_file_update): Hold node2pagelock for reference
of NP->dn->fileinfo.
(drop_pager_softrefs): Likewise.
(allow_pager_softrefs): Likewise.
(diskfs_get_filemap): Likewise.
* sizes.c (diskfs_truncate): Likewise.
* Makefile (SRCS): Added pokeloc.c.
Mon Oct 3 15:03:38 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* sizes.c (diskfs_truncate): Rewritten.
* bmap.c (fetch_indir_spec): Initialize OFFSET values to -2,
meaning that the entry is not needed. If LBN is negative,
then don't set values for the data block.
* inode.c (write_node): Call record_poke after writing
dinode.
(create_symlink_hook): Likewise.
(diskfs_set_translator): Likewise.
* pager.c (pager_unlock_page): Likewise.
* sizes.c (diskfs_truncate): Likewise.
* pager.c (pager_unlock_page): Call record_poke after writing
indirect block.
* sizes.c (diskfs_grow): Likewise.
(diskfs_grow): Likewise.
* pager.c (diskfs_sync_everything) [sync_one]: If this is the
disk pager, call sync_disk instead.
* pokeloc.c: New file.
Fri Sep 30 11:25:36 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* dir.h: Delete DT_* definitions; they are now in <dirent.h>.
* dir.c (diskfs_get_directs): Set USERP->d_type as DT_UNKNOWN.
When the bugs in the type fields are fixed (dealing with
multiple links and mode changes) then this can actually return
the value.
Thu Sep 29 17:16:58 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* main.c (main): Test getpid()>0 to decide we are a normal
translator instead of the boot fs. Fetch bootstrap port after
possibly calling diskfs_parse_bootargs, not before.
Tue Sep 27 15:24:58 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* sizes.c (diskfs_grow) [computation of newallocsize]: Last block
number is one less than the total number of blocks.
Tue Sep 27 11:58:44 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* bmap.c (fetch_indir_spec): Single indirect block pointer is
in the INDIR_SINGLE slot, not the INDIR_DOUBLE slot.
Mon Sep 26 20:47:30 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* Makefile (SRCS): Added bmap.c.
* main.c (main): Don't call pager_init.
* inode.c (diskfs_get_translator): Repair to read translator
correctly.
* sizes.c (diskfs_grow): Compute block numbers in a more clean
(and confidently correct) fashion.
(diskfs_truncate): Set NP->allocsize from a properly rounded
value.
Mon Sep 26 12:50:38 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* inode.c (diskfs_lost_hardrefs): "Know" that a pager starts
with a portinfo; we don't actually have access to the pager
struct here.
Fri Sep 23 14:21:55 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
[ Continuing yesterday's changes. ]
* ufs.h (struct dirty_indir): New type.
(struct disknode): New member `dirty'.
* inode.c (iget): Initialize DN->dirty.
* bmap.c (mark_indir_dirty): New function.
* pager.c (pager_unlock_page): Call mark_indir_dirty before
writing into indirect blocks.
(diskfs_file_update): Sync indirect blocks here.
(pager_traverse): Simplify; do FILE_DATA and diskpager.
(pager_init): Removed function.
(create_disk_pager): New function.
* sizes.c: Completely rewritten.
* main.c (main): Spawn first thread sooner so we can
map and look at the disk image.
* hyper.c (get_hypermetadata): Moved firewall asserts
here from pager_init.
Thu Sep 22 11:28:46 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
[This long series of changes deletes the DINODE, CG, SINDIR,
and DINDIR pagers and adds a new pager type DISK.]
* ufs.h (struct disknode) Removed DINLOCK, SINLOCK, and
SININFO members. New member ALLOCPTRLOCK renamed from DATALOCK.
Removed SINLOC, DINLOC, SINLOCLEN, and DINLOCLEN.
(struct user_pager_info) [enum pager_type]: Removed types
DINODE, CG, SINDIR and DINDIR; added type DISK.
(dinpager, dinodepager, cgpager): Deleted vars.
(diskpager): New var.
(dinmaplock, sinmaplock, pagernplock): Deleted vars.
(sblock_dirty, csum_dirty, cgs, dinodes): Deleted vars.
(fsaddr): New macro.
(dino, indir_block, cg_locate): New inline functions.
(sync_disk_blocks, sync_dinode): New inline functions.
(struct iblock_spec): New type.
* pager.c (dinport, dinodeport, cgport, sinlist): Deleted vars.
(filepagerlist): Renamed from filelist.
(pagernplock): Deleted variable.
(find_address): Removed switch; support only DISK and FILE_DATA.
(pager_report_extent): Likewise.
(pager_unlock_page): Removed switch. Return without comment for
DISK; allocate indirect blocks as necessary right here for
FILE_DATA.
(sin_map, sin_remap, sin_unmap, din_map, din_unmap): Deleted
functions.
(indir_alloc, sync_dinode): Deleted functions.
(enqueue_pager, dequeue_pager): Deleted functions.
(diskfs_file_update): No longer lock pagernplock; nothing
to do with sininfo.
(drop_pager_softrefs): Likewise.
(allow_pager_softrefs): Likewise.
(diskfs_get_filemap): Put pager on filepagerlist right here
instead of through pager_enqueue.
(pager_clear_user_data): Likewise, mutatis mutandis.
* main.c (main): Call create_disk_pager and then map the
entire disk into disk_image.
* hyper.c (get_hypermetadata): Use bcopy instead of dev_read_sync.
(diskfs_set_hypermetadata): NOP out function.
(copy_sblock): New function, substance of code is from old
diskfs_set_hypermetadata.
* inode.c (iget): Don't initialize deleted disknode fields.
(diskfs_node_norefs): Don't verify that deleted disknode
fields are not set.
(read_disknode): Get dinode from DINO, not DINODES array.
(write_node): Likewise.
(create_symlink_hook): Likewise.
(read_symlink_hook): Likewise.
(diskfs_set_translator): Likewise.
(diskfs_get_translator): Likewise.
(diskfs_node_translated): Likewise.
* alloc.c (ffs_realloccg): Likewise.
(ffs_fragextend): Use cg_locate instead of cgs array.
(ffs_alloccg): Likewise.
(ffs_nodealloccg): Likewise.
(ffs_blkfree): Likewise.
(diskfs_free_node): Likewise.
* inode.c (diskfs_set_translator): Use bcopy and sync_disk_blocks
instead of dev_write_sync.
(diskfs_get_translator): Likewise, mutatis mutandis.
(read_disknode): Initialize NP->istranslated.
(diskfs_set_translator): Set/clear NP->istranslated as appropriate.
(diskfs_node_translated): Removed function.
* bmap.c: New file.
[This improves the RWLOCK mechanism and makes it more
orthogonal. It should probably be moved into a library.]
* ufs.h (struct rwlock): Added MASTER and WAKEUP members.
(struct disknode): Removed RWLOCK_MASTER and RWLOCK_WAKEUP
fields.
(rwlock_reader_lock): Ommitted arg DN; use new MASTER and WAKEUP
members inside LOCK instead.
(rwlock_writer_lock): Likewise.
(rwlock_reader_unlock): Likewise.
(rwlock_init): Initialize new MASTER and WAKEUP fields.
* inode.c (iget): Don't deal with RWLOCK_MASTER and RWLOCK_WAKEUP.
* pager.c (find_address): Deleted arg DNP. Only pass one
arg to rwlock functions.
(pager_read_page): Deleted var DN; only pass one arg to rwlock
functions.
(pager_write_page): Likewise.
Wed Sep 21 00:26:25 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* pager.c (allow_pager_softrefs): Unlock PAGERNPLOCK when
we're done with it.
(sin_map): Hold PAGERNPLOCK all the way until we're done
with the sininfo pointer.
(pagernplock): No longer static.
* ufs.h (pagernplock): Declare here.
* sizes.c (diskfs_grow): Don't call diskfs_file_update here.
This was done to prevent too much dirty data from accumulating
and then overwhelming the pager later. But that's really the
pager's responsibility.
* ufs.h (struct disknode): New members `dinloclen' and `sinloclen'.
* inode.c (iget): Initialize DN->dinloclen and DN->sinloclen.
(diskfs_node_norefs): Verify that DN->dinloclen and DN->sinloclen
are both zero.
* pager.c (find_address) [SINDIR]: Verify that reference is
within bounds of NP->dn->dinloc.
(pager_unlock_page) [SINDIR]: Likewise.
(din_map): Set NP->dn->dinloclen.
(din_unmap): Clear NP->dn->dinloclen.
(find_address) [FILE_DATA]: Verify that reference is within
bounds of NP->dn->sinloc.
(pager_unlock_page) [FILE_DATE]: Likewise.
(sin_map): Set NP->dn->sinloclen.
(sin_remap): Reset NP->dn->sinloclen.
(sin_unmap): Clean NP->dn->sinloclen.
* pager.c (pager_write_page): Flush stdout after printf.
(pager_unlock_page) [FILE_DATA]: Likewise.
* sizes.c (diskfs_truncate): In all references to sinloc and
dinloc arrays, verify that references are within allocated bounds.
(diskfs_grow): Likewise.
(sindir_drop): Likewise.
* pager.c: Create new mapping with extent NEWSIZE, not SIZE (which
was the old size of the mapping).
Tue Sep 20 15:51:35 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* pager.c (pager_report_extent) [SINDIR]: Remove erroneous extra
division by block size.
(sin_remap): Likewise.
Mon Sep 19 17:34:11 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* inode.c (create_symlink_hook): Write assert test correctly.
* dir.c (diskfs_direnter) [EXTEND]: Reference file size only
*once*; don't rely on the behavior if diskfs_grow vis a vis
file size.
Fri Sep 16 10:29:42 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* dir.c (dirscanblock): Compute offset correctly for mangled
entry notice.
* dir.c (diskfs_direnter) [EXTEND]: Reference file size only
once before calling diskfs_grow in case diskfs_grow actually
increases the size.
* inode.c (diskfs_set_statfs): Set fsid from getpid.
(read_disknode): Likewise.
* dir.h (struct directory_entry): Renamed from struct direct.
* dir.c: All uses of struct direct changed to use
struct directory_entry.
(diskfs_get_directs): New var `userp'. Copy from *ENTRYP into
it (set at DATAP) more cleanly.
Mon Sep 12 11:30:48 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* hyper.c (diskfs_set_hypermetadata): Don't frob clean and dirty
bits if we are readonly.
Sat Sep 10 11:41:06 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* main.c (main): When started up as a passive translator,
open fds 0, 1, and 2 on /dev/console for debugging messages.
Call diskfs_init_diskfs with no args; after warp_root, call
diskfs_startup_diskfs on BOOTSTRAP. Compare BOOTSTRAP to
MACH_PORT_NULL instead of zero.
Fri Sep 9 13:02:33 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* main.c (trans_parse_args): Fix and enable.
Tue Sep 6 11:29:55 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* inode.c (iget): Remove old assert test that checked for bad
inode block allocations.
Thu Sep 1 11:39:12 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* tables.c: Don't include "ufs.h"; include <sys/types.h>. Then
this file can be used unmodified by fsck.
Tue Aug 30 13:36:37 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* inode.c (diskfs_set_translator): ffs_blkfree doesn't have
a return value.
Mon Aug 29 12:49:17 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* inode.c (diskfs_set_translator): If NAMELEN is zero, then
make the node have no translator.
Fri Aug 26 12:28:20 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* inode.c (read_disknode): 4.4 fsck sometimes sets the author
field to -1 to mean "ignore old uid location"; take that to mean
"author == uid".
(diskfs_set_translator): If we are allocating a new block for
the translator, then account for it in st_blocks.
Thu Aug 18 12:41:12 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* Makefile (HURDLIBS): Use short version.
* alloc.c (diskfs_alloc_node): Bother to set *NPP before
returning.
Tue Aug 16 10:48:04 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* Makefile (LDFLAGS): New variable.
Fri Aug 5 15:51:09 1994 Michael I Bushnell <mib@churchy.gnu.ai.mit.edu>
* dir.c (diskfs_direnter) [EXTEND]: Crash if the entry won't
fit in the new block.
(diskfs_lookup): Return ENAMETOOLONG if the name is bigger than
MAXNAMLEN.
* dir.c (diskfs_get_directs): Set USERD->d_reclen correctly.
Fri Jul 22 15:12:35 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* Makefile: Rewritten in accord with new scheme.
Wed Jul 20 13:28:38 1994 Michael I Bushnell <mib@geech.gnu.ai.mit.edu>
* main.c (main): Don't set diskfs_dotdot_file.
Tue Jul 19 21:51:54 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* ufs.h: Removed defns of u_quad_t, quad_t; now in <sys/types.h>.
Removed defn of struct timespec; now in <sys/time.h>.
Tue Jul 19 12:47:31 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* main.c (main): Deleted var `diskfs_dotdot_file'.
(trans_parse_args): Don't set diskfs_dotdot_file; don't expect
dotdot from fsys_getroot.
* Makefile (LDFLAGS): Moved to rule for `ufs' and commented out.
(ufs): Don't use variable $(link) anymore.
Mon Jul 18 14:55:17 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* dir.c (diskfs_get_directs): Return data to user in old format.
Add new code for new format, maintaining compatibility correctly,
but comment it out until the library is ready.
* hyper.c (diskfs_set_hypermetadata): If we presumed to
set new values of fs_maxfilesize, fs_qbmask, and fs_qfmask,
then restore the originals before writing out the superblock.
* pager.c (diskfs_get_filemap): Test should be S_ISLNK, not
S_ISSOCK.
* hyper.c (get_hypermetadata): Set new constants in filesystems
which don't have them yet.
(get_hypermetadata): Cast MAXSYMLINKLEN to long to avoid
converting sblock->fs_maxsymlinklen into an unsigned.
* subr.c (scanc, skipc): New functions.
(ffs_setblock): Use assert instead of panic.
* inode.c (read_disknode): Set old stat structure until the header
file gets changed.
Fri Jul 15 12:07:15 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* sizes.c: Include <string.h> for bzero.
* fs.h (blksize): Comment out dblksize macro. In blksize
macro, use NP->allocsize instead of IP->i_size.
* dinode.h (INDIR_SINGLE, INDIR_DOUBLE, INDIR_TRIPLE): New macros.
* inode.c (read_disknode, write_node): Use new stat and dinode
fields for times.
* ufs.h: Change `nextgennumber' to be `u_long' instead of int.
Change prototypes of some alloc.c functions.
* alloc.c (ffs_alloc): Declare to return error_t.
(ffs_realloccg): Likewise.
(ffs_hashalloc, ffs_alloccg, ffs_fragextend, ffs_alloccg,
ffs_dirpref, ffs_nodealloccg, ffs_allccgblk, ffs_mapsearch,
ffs_clusteracct): Provide forward declarations.
(ffs_realloccg): Use printf instead of log.
Make BPREF volatile for setjmp safety.
(diskfs_alloc_node): Use diskfs global variable instead of TIME.
(ffs_nodealloccg): Likewise.
(ffs_blkfree): Likewise.
(diskfs_free_node): Likewise.
(ffs_blkfree, ffs_clusteracct): Declare as void.
(ffs_alloccg, ffs_nodealloccg): Declare as u_long.
* ufs.h: Change prototypes of some subr.c functions.
* subr.c (ffs_isblock): Use assert instead of panic.
(ffs_clrblock): Likewise.
* hyper.c: Include "dinode.h".
* dinode.h (LINK_MAX): New macro, from BSD sys/sys/syslimits.h.
* fs.h (MAXBSIZE, MAXFRAG): New macros, from BSD sys/sys/param.h.
* hyper.c (get_hypermetadata): Provide first arg in call to
fsbtodb.
(diskfs_set_hypermetadata): Likewise.
* inode.c (diskfs_set_translator): Likewise.
(diskfs_get_translator): Likewise.
* pager.c (find_address): Likewise.
(indir_alloc): Likewise.
* inode.c (iget): Provide first arg in call to lblkno.
* sizes.c (diskfs_truncate): Likewise.
* pager.c (find_address): Likewise.
* sizes.c (diskfs_grow): Likewise.
* inode.c (iget): Provide first arg in call to fragroundup.
* sizes.c (diskfs_trucate): Likewise.
* sizes.c (diskfs_grow): Likewise.
* inode.c (iget): Provide first arg in call to blkroundup.
* pager.c (pager_unlock_page): Likewise.
* sizes.c (diskfs_truncate): Likewise.
* sizes.c (diskfs_grow): Likewise.
* pager.c (find_address): Provide first arg in call to cgtod.
* pager.c (find_address): Provide first arg in call to cgimin.
* pager.c (find_address): Provide first arg in call to blktofrags.
* pager.c (find_address): Provide first arg in call to blkoff.
* sizes.c (diskfs_truncate): Likewise.
* sizes.c (diskfs_grow): Likewise.
* sizes.c (diskfs_truncate): Provide first arg in call to blksize.
* sizes.c (diskfs_grow): Likewise.
* sizes.c (diskfs_truncate): Provide first arg in call to numfrags.
* ufs.h: Added temporary declarations of `u_quad_t', `quad_t', and
`struct timespec'.
* pager.c (diskfs_get_filemap): Make sure that this is
a kind of node that can be validly read.
* inode.c (create_symlink_hook): Renamed from symlink_hook.
(read_symlink_hook): New function.
(diskfs_read_symlink_hook): Initialize.
Thu Jul 14 12:23:45 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* alloc.c: New from 4.4 BSD; BSD version `8.8 2/21/94'.
Remove old includes; include "ufs.h", "fs.h", "dinode.h",
and <stdio.h>. Replace panics with asserts and comment out
uprintfs. Use prototypes throughout. Replace calls
to ffs_fserr with printf.
(alloclock): New variable.
(ffs_alloc): Variable struct inode *IP is now struct node *NP;
refer to it appropriately. Initialize FS to sblock.
Lock alloclock around actual allocation steps. Reverse order
of BNP and CRED arguments; declare CRED as a protid and use
accordingly. Permit CRED to be null.
(ffs_realloccg): Variable struct inode *IP is now struct node *NP;
refer to it accordingly. Comment out U*x buffer management code.
Lock alloclock around actual allocation steps. Initialize FS
from sblock. Declare CRED as a protid and use it accordingly.
Change BUF arg to PBN (physical block number); return new block
there.
(ffs_reallocblks): Comment out.
(diskfs_alloc_node): Renamed from ialloc. Initialize FS from
sblock. Use calling sequence from <hurd/diskfs.h>. Acquire
alloclock aroud actual allocation steps. Deleted vars
`pip', `pvp' (use dir instead). Use iget instead of VFS_VGET.
Var struct inode *IP now struct node *NP. Lock gennumberlock
around frobbing of nextgennumber.
(ffs_blkpref): Arg struct inode *ip is now struct node *np;
refer to it accordingly. Initialize FS to sblock. Lock
alloclock during actual work. Use csum instead of fs_cs macro.
(ffs_hashalloc): Arg struct inode *IP is now struct node *NP;
use it accordingly. Initialize FS from sblock.
(ffs_fragextend): Arg struct inode *IP is now struct node *NP;
use it accordingly. Initialize FS from sblock. Initialize
CGP from cgs array; don't use bread. Comment out calls to brelse
and bdwrite. Set CGP->time from diskfs global var. Use csum
instead of fs_cs macro.
(ffs_alloccg): Arg struct inode *IP is now struct node *NP.
Initialize FS from sblock. Initialize CGP from cgs array;
don't use bread. Comment out calls to brelse and bdwrite.
Set CGP->time from diskfs global var. Use csum instead of
fs_cs macro.
(ffs_nodealloccg): Arg struct inode *IP is now struct node *NP.
Initialize FS from sblock. Initialize CGP from cgs array;
don't use bread. Comment out calls to brelse and bdwrite. Use
csum instead of fs_cs macro.
(ffs_blkfree): Arg struct inode *IP is now struct node *NP.
Initialize FS from sblock. Initialize CGP from cgs array;
don't use bread. Comment out calls to brelse and bdwrite. Use
csum instead of fs_cs macro.
(diskfs_free_node): Renamed from ffs_vfree. Use calling
sequence from <hurd/diskfs.h>. Initialize FS from sblock.
Deleted vars pip,pvp (use NP instead). Initialize CGP from
cgs array; don't use bread. Comment out calls to brelse and
bdwrite. Use csum instead of fs_cs macro.
(ffs_fserr): Commented out.
(ffs_dirpref): Use csum instead of fs_cs macro.
* ufs.h (ffs_alloc): Renamed from alloc; all callers changed.
(ffs_blkfree): New arg NP; renamed from blkfree; all callers changed.
(ffs_blkpref): Renamed from blkpref; all callers changed.
(ffs_realloocg): Rename from realloccg; all callers changed.
* fs.h: New from 4.4 BSD; BSD version `8.7 4/19/94'.
(fs_cs): Don't use fs_csp; use global csum instead.
* subr.c: New from 4.4 BSD; BSD version `8.2 9/21/93'.
Remove old includes. Include "ufs.h" and "fs.h".
(ffs_blkatoff, ffs_checkoverlap): Comment out.
* tables.c: New from 4.4 BSD; BSD version `8.1 6/11/93'.
Don't include <param.h>; do include "ufs.h" and "fs.h".
* dinode.h: New from 4.4 BSD; BSD version `8.3 1/21/94'.
Remove oldids/inum union; replace with author.
Renamed di_mode to be di_model; allocated di_modeh from spare.
Allocate di_trans from spare.
(di_inumber): Remove macro.
* inode.c (read_disknode): Fetch uid and gid from new (long)
fields in dinode unless we are the old inode format, in which
case fetch them from the old fields.
(write_node): Only set new uid and gid fields if we are not
COMPAT_BSD4. Set old fields if the superblock says to.
(symlink_hook): New function.
(diskfs_create_symlink_hook): Initialize.
* sizes.c (diskfs_truncate): Deal with truncation of short
symlink properly.
* dir.h: New from 4.4 BSD; BSD version `8.2 1/21/94'.
Substitute our version of DIRSIZ which uses the namelen.
Comment out declarations of struct dirtemplate and struct
odirtemplate.
(DIRECT_TYPE, DIRECT_NAMLEN): New macros.
* ufs.h (direct_symlink_extension): New variable.
* hyper.c (get_hypermetadata): Set direct_symlink_extension.
* dir.c (dirscanblock): Use DIRECT_NAMLEN instead of d_namlen.
(diskfs_direnter): Likewise.
(diskfs_dirempty): Likewise.
(diskfs_get_directs): Likewise.
(diskfs_direnter): Set d_type field of new slot if
direct_symlink_extension is set.
(diskfs_dirrewrite): Likewise.
* ufs.h (compat_mode): New variable.
* main.c (main): Set compat_mode to zero if we are the bootstrap
filesystem.
* inode.c (diskfs_set_translator): Return error if compat_mode
is set.
(write_node): Don't set GNU dinode field extensions unless
compat_mode is COMPAT_GNU.
Mon Jul 11 18:14:26 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* dir.c (diskfs_get_directs): When copying entries into DATAP,
set the d_reclen parameter of the copy to the minimum length
(because that's all we use) rather than the size that it had
in the directory itself.
Wed Jul 6 14:41:48 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* dir.c (dirscanblock): In main loop, initialize PREVOFF
to zero, not BLOCKADDR. Otherwise, the wrong value is
stored into DS->prevoff and then diskfs_dirremove crashes.
Tue Jul 5 14:07:38 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* dinode.h: Include <endian.h> before test of BYTE_ORDER.
* Makefile (TAGSLIBS): New variable.
Tue Jun 21 13:45:04 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* dir.c (diskfs_direnter): Update dirents of DP, not NP.
Mon Jun 20 16:43:48 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* dir.c (diskfs_direnter) [case SHRINK]: NEW should be set to
OLDNEEDED past DS->entry, not to the start of the next entry.
* dir.c (diskfs_direnter) [case EXTEND]: Cast in assignment
to NEW needs proper scope.
* inode.c (diskfs_node_norefs): Free dirents list of structure
being deallocated. Also add assert checks to make sure other
state is already clean.
Thu Jun 16 11:38:17 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
* dir.c (diskfs_dirempty): Map directory contents ourselves
instead of using diskfs_node_rdwr.
(struct dirstat): New structure to cache mapping between
lookup and commit operation and avoid use of diskfs_node_rdwr.
(diskfs_lookup): Map directory ourselves. Keep mapping in
DS if DS is nonzero and we might use it in direnter, dirremove,
or dirrewrite. Deallocate mapped buffer if we return some
error (other than ENOENT), or if DS is zero, or if there is
no possible commit operation to follow. When setting DS->stat
to EXTEND, do it the new way.
(dirscanblock): Changed BLKOFF to be virtual address of mapped
block and renamed it BLKADDR. New arg IDX. Use mapped block
instead of calling diskfs_node_rdwr. Set DS according to the new
rules.
(diskfs_direnter): Interpret new dirstat format.
(diskfs_dirremove): Likewise.
(diskfs_dirrewrite): Likewise.
(diskfs_drop_dirstat): Deallocate cached mapping here.
* dir.c (dirscanblock): When we find the node for type CREATE,
invalidate DS by setting type to LOOKUP, not LOOKING.
* dir.c (diskfs_direnter, diskfs_dirremove, diskfs_dirrewrite):
Call diskfs_notice_dirchange when appropriate.
* dir.c (diskfs_get_directs): Deal properly with case where
BUFSIZ==0 and where NENTRIES==-1.
Wed Jun 15 16:40:12 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
* main.c (main): Check device sector size and media size
on startup.
Tue Jun 14 14:41:17 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
* ufs.h (struct disknode) [dirents]: New member.
* inode.c (iget): Initialize DN->dirents.
* dir.c (diskfs_direnter, diskfs_dirremove): Keep track
of dirents member.
(dirscanblock): New var `nentries'; use it to count the
number of directory entries in this block and set it if
we end up scanning the entire block.
(count_dirents): New function.
(diskfs_get_directs): New function.
Mon Jun 13 13:50:00 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
* ufs.h (sinmaplock, dinmaplock): New global vars.
* inode.c (inode_init): Initialize sinmaplock and dinmaplock.
* pager.c (find_address, pager_unlock_page): Protect use
if dinloc array with dinmaplock.
(din_map, din_unmap): Doc fix.
(find_address, pager_unlock_page): Protect use of sinloc array
with sinmaplock.
(sin_map, sin_remap, sin_unmap): Doc fix.
(pager_clear_user_data): Acquire sinmaplock and dinmaplock
instead of NP->dn->datalock and NP->dn->sinlock respectively.
* sizes.c (diskfs_truncate, diskfs_grow): Protect use of sinloc
and sindir mapping functions with sinmaplock.
(sindir_drop): Protect use of dinloc and dindir mapping functions
with dinmaplock.
* ufs.h (struct rwlock): New type.
(struct disknode) [dinlock, sinlock, datalock]: Use read-write lock.
Change comments so that these don't lock dinloc and sinloc anymore.
[rwlock_master, rwlock_wakeup]: New members.
(rwlock_reader_lock, rwlock_writer_lock, rwlock_reader_unlock,
rwlock_writer_unlock, rwlock_init): New functions.
* inode.c (iget): Initialize DN->rwlock_master and
DN->rwlock_wakeup. Change initialization of DN->dinlock,
DN->sinlock, and DN->datalock to use rwlock_init.
* pager.c (find_address): Lock NP->dn->dinlock, NP->dn->sinlock,
and NP->dn->datalock with rwlock_reader_lock. Change type of
parameter NPLOCK to be a read-write lock. New parm DNP. Callers
changed.
(pager_read_page, pager_write_page): Change type of NPLOCK to be
read-write lock; call rwlock_reader_unlock instead of
mutex_unlock. New variable DN.
(pager_unlock_page): Use rwlock_writer_lock to lock
NP->dn->dinlock, NP->dn->sinlock, and NP->dn->datalock.
* sizes.c (diskfs_truncate, diskfs_grow): Change locks of DATALOCK
field to use rwlock_writer_{un,}lock.
(sindir_drop): Ditto for SINLOCK field.
(dindir_drop): Ditto for DINLOCK field.
Mon Jun 6 19:23:26 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* sizes.c (diskfs_grow): After realloccg, zero new data (which I'm
not sure is really necessary, but until I figure it out, this is
safest). Also poke old data (the latter only if the block has
moved)--otherwise the kernel won't know to page it out to the new
location.
(poke_pages): When poking, be careful not to actually change the data.
LEN should be end - start, not start - end.
Fri Jun 3 12:37:27 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* inode.c (iget): When we find the node in the table, acquire the
mutex *after* incrementing NP->references and unlocking
diskfs_node_refcnt_lock; otherwise we can deadlock against
diskfs_nput.
Thu Jun 2 12:16:09 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* ufs.h (sblock_dirty, csum_dirty, alloclock): New global variables.
* alloc.c (alloclock): Remove static keyword..
* alloc.c (realloccg): Set sblock_dirty after changing sblock.
(blkpref): Likewise.
(fragextend): Likewise.
(alloccg): Likewise.
(alloccgblk): Likewise.
(ialloccg): Likewise.
(blkfree): Likewise.
(diskfs_free_node): Likewise.
* hyper.c (diskfs_set_hypermetadata): Likewise.
* alloc.c (fragextend): Set csum_dirty after changi csum.
(alloccg): Likewise.
(alloccgblk): Likewise.
(ialloccg): Likewise.
(blkfree): Likewise.
(diskfs_free_node): Likewise.
* hyper.c (diskfs_set_hypermetadata): Acquire alloclock while
writing hypermetadata. Only write csum and sblock if
csum_dirty or sblock_dirty, respectively, is set, and then
clear it after starting the write.
* main.c (main): Likewise.
* sizes.c (diskfs_truncate): Don't turn off caching; the new
light reference system takes care of this.
* pager.c (diskfs_get_filemap): No longer necessary to turn
on caching here, because truncate no longer turns it off.
* inode.c (diskfs_lost_hardrefs, diskfs_new_hardrefs): New functions.
* pager.c (drop_pager_softrefs, allow_pager_softrefs): New functions.
(sin_map): Use diskfs_nref_light, not diskfs_nref.
(diskfs_get_filemap): Use diskfs_nref_light, not diskfs_nref.
(pager_clear_user_data): Use diskfs_nrele_light, not diskfs_nrele.
* ufs.h (drop_pager_softrefs, allow_pager_softrefs): New
declarations.
Wed Jun 1 13:35:11 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* sizes.c (diskfs_truncate): After calling sin_unmap, turn
off caching on the sininfo pager so that it gets freed promptly
(there's generally no value in keeping it around because there
is no live fileinfo pager).
* pager.c (diskfs_get_filemap): Make sure we turn caching back on
here, however, if we start using the file pager.
* pager.c (sin_map): When np->dn->sininfo is set, we have
to insert a valid send right after fetching the receive name.
* pager.c (sin_unmap, din_unmap): New functions.
(pager_clear_user_data): Call sin_unmap and din_unmap
instead of doing it right here.
* sizes.c (diskfs_truncate): Call sin_unmap instead of
doing it right here.
(sindir_drop): Call din_unmap instead of doing it right
here. Also, call it always, not just when wo do dindir_drop.
* sizes.c (diskfs_grow): After alloc into sindir area,
unmap it if we don't have an active data pager.
* ufs.h (sin_unmap, din_unmap): New declarations.
* sizes.c (diskfs_grow): In computing OSIZE in the realloc
case of lbn < NDADDR, deal correctly with the case where
np->allocsize is already an integral number of blocks.
* sizes.c (diskfs_grow): Compute SIZE correctly.
* alloc.c (alloc, realloccg, blkfree): When checking validity
of size arguments, also make sure the size isn't zero.
* alloc.c (diskfs_alloc_node): Lock ALLOCLOCK before checking
sblock->fs_cstotal.cs_nifree.
Tue May 31 18:47:42 1994 Roland McGrath (roland@geech.gnu.ai.mit.edu)
* ufs.h (DONT_CACHE_MEMORY_OBJECTS): Define it.
* dir.c (diskfs_direnter: case TAKE): Assert that OLD->d_reclen >=
NEEDED, not that it is strictly >.
Tue May 31 11:10:28 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* sizes.c (diskfs_grow): Call diskfs_node_update (but don't wait)
after successful completion to prevent old data from hanging around
too long and getting flushed all at once from the kernel.
* sizes.c (diskfs_grow): Change SIZE to be the size of the last
block allocated. Delete variable NSIZE; use SIZE instead.
Fri May 27 13:15:26 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
* sizes.c (diskfs_truncate): Set NP->dn_stat_dirty after each
modification of NP->dn_stat.
* sizes.c (diskfs_truncate): Compute new value of NP->allocsize
correctly.
* inode.c (iget): Set NP->allocsize to be the *actual* allocsize.
Thu May 26 11:51:45 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* sizes.c (diskfs_truncate): In blkfree loop of blocks past
NDADDR, subtract NDADDR from idx to index correctly into
sinloc array. Start this loop with idx not less than NDADDR.
(diskfs_truncate): If olastblock == NDADDR, then we also
need to truncate blocks (one) mapped by single indirect blocks.
(diskfs_truncate): New variable `first2free'. Use in place
of older losing calculations involving lastblock.
(sindir_drop): Rename parameters to be FIRST and LAST. Change
interpretation of FIRST by one to correspond with changed call
in diskfs_truncate.
* pager.c (sin_remap): When computing NEWSIZE, round up to
a page boundary, thus mimicing the SINDIR computation in
pager_report_extent properly.
* pager.c (pager_unlock_page) [case SINDIR; vblkno == 0]: Read
from ....di_ib[INDIR_SINGLE] rather than invalid data before
NP->dn->dinloc.
* alloc.c (alloc) [nospace]: Unlock alloclock.
(realloccg): Unlock alloclock before jumping to nospace.
(blkpref) [!(lbn < NDADDR)]: Unlock alloclock before returning
success.
* sizes.c (diskfs_grow): When allocing a block past NDADDR, the
tbl arg to blkpref is the table of direct block pointers
NP->dn->sinloc, not the table of indirect block pointers
...->di_ib.
* sizes.c (diskfs_grow): When writing into the SINDIR area, call
sin_map instead of sin_remap if the sindir isn't already mapped.
Also set np->allocsize *before* calling sin_map, but *after*
calling sin_remap, to meet the requirements of those separate
routines.
* sizes.c (diskfs_grow): If END isn't bigger than NP->allocsize,
then don't try and do anything. In computation of LBN and the
first use of NB, round up to block boundary correctly. Don't
attempt to realloc an old block if the size is 0 (in which case
NB is -1 and unsigned comparison rules might foul things up).
Mon May 23 13:18:33 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* Makefile (ufs): Give -n in the proper order to rsh.
* main.c: Include <hurd/startup.h>.
* ufs.h (DONT_CACHE_MEMORY_OBJECTS): New compilation flag.
* pager.c (pager_report_attributes): Deleted function.
(MAY_CACHE): New macro; more useful form for using
DONT_CACHE_MEMORY_OBJECTS.
(sin_map, pager_init, diskfs_get_filemap): Provide new
args in calls to pager_create.
* sizes.c (MAY_CACHE): New macro; more useful form for
using DONT_CACHE_MEMORY_OBJECTS.
(diskfs_truncate): Use MAY_CACHE in calls to pager_change_attributes.
Fri May 20 18:52:41 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
* sizes.c (diskfs_truncate): Force any delayed copies of the
vanishing region to be taken immediately before stopping, and
prevent any new delayed copies from being made until we are done
manipulating things.
(poke_pages): New function.
* pager.c (pager_report_attributes): New function.
Wed May 18 15:51:40 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* alloc.c (alloc, realloccg, diskfs_alloc_node, alloccgblk,
blkfree, diskfs_free_node, mapsearch): Added helpful strings to
asserts.
(realloccg): Split up assert.
Tue May 17 13:26:22 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* main.c (main): Delete unused variable PROC.
Mon May 16 15:32:07 1994 Michael I Bushnell (mib@churchy.gnu.ai.mit.edu)
* alloc.c (realloccg): When fragextend succeeds, bother to set
*PBN.
* sizes.c (diskfs_grow): In fragment growth case, NSIZE should
not be the amount to hold SIZE (SIZE is the amount the file is
growing by), but rather the old size of the fragment plus the
SIZE.
* dir.c (diskfs_direnter case COMPRESS): Rewrite loop to deal
properly with the case where from and to overlap.
Mon May 9 16:51:44 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
* main.c (ufs_version): New variable.
(save_argv): New variable.
(main): Set save_argv.
(diskfs_init_completed): New function.
Thu May 5 19:06:54 1994 Michael I Bushnell (mib@geech.gnu.ai.mit.edu)
* Makefile (exec_server_image.o): Use -n when calling rsh.
Thu May 5 07:39:38 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* Makefile ($(OBJS)): Use $(includedir) instead of $(headers) in deps.
|