summaryrefslogtreecommitdiff
path: root/ext2fs/ChangeLog
blob: b6fe57b9866b728b8e9c1cc87660c527e585e933 (plain)
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
2005-07-12  Marcus Brinkmann  <marcus@gnu.org>

	* pager.c (diskfs_get_filemap): Initialize upi->max_prot to PROT.

2004-11-08  Ognyan Kulev  <ogi@fmi.uni-sofia.bg>

	* storeinfo.c (diskfs_S_file_get_storage_info): Cast -1 to
	store_offset_t in conditional operator, instead of implicitly cast
	to uint32_t.

2004-01-10  Roberto Reale  <rreale@iol.it>

	* ext2fs.h (ext2_getblk): Fix typo in comment.
	* getblk.c (ext2_getblk): Likewise.
	* dir.c (diskfs_get_directs): Likewise.

2002-10-08  Roland McGrath  <roland@frob.com>

	* ext2fs.h (struct disknode): New member `info_i_translator'.
	* inode.c (diskfs_set_translator): Update NP->dn->info_i_translator.
	* ialloc.c (diskfs_alloc_node): Clear a nonzero translator block in
	the on-disk inode just as we do for data blocks.

2002-07-31  Roland McGrath  <roland@frob.com>

	* dir.c (diskfs_direnter_hard): Fix test in last change.

2002-06-08  Roland McGrath  <roland@frob.com>

	* inode.c (diskfs_cached_lookup): Use ino_t for argument.

	* ialloc.c (diskfs_free_node): Use %Ld format for ino_t/off_t values.
	* pager.c (diskfs_grow, pager_unlock_page): Likewise.
	* inode.c (read_node): Likewise.
	* dir.c (diskfs_get_directs): Likewise.

	* dir.c (diskfs_direnter_hard): Use size_t for OLDSIZE.
	Fail with EOVERFLOW when it would exceed that width.

2002-04-05  Neal H Walfield  <neal@cs.uml.edu>

	* pager.c (diskfs_grow): Correctly recalculate NEW_SIZE.

2002-05-29  Roland McGrath  <roland@frob.com>

	* dir.c (dirscanblock): Use %z format.
	(diskfs_get_directs): Likewise.
	* ext2fs.c (main): Likewise.
	* hyper.c (get_hypermetadata): Likewise.
	* pager.c (pager_unlock_page): Likewise.

2002-05-28  Roland McGrath  <roland@frob.com>

	* ext2fs.c (diskfs_append_args): unsigned -> size_t
	* dir.c (count_dirents): int -> size_t
	(diskfs_get_directs): u_int -> size_t

2001-11-20  Neal H Walfield  <neal@cs.uml.edu>

	* ext2fs.c (diskfs_synchronous): Removing superfluous zero initializer.
	(store): Likewise.
	(store_parsed): Likewise.
	(diskfs_disk_name): Likewise.
	(ext2_debug_flag): Likewise.

2002-04-01  Neal H Walfield  <neal@cs.uml.edu>

	* pager.c (diskfs_grow): Fix inverted logic.

2001-11-20  Neal H Walfield  <neal@cs.uml.edu>

        * pager.c (MAX_FREE_PAGE_BUFS): Remove obsolete macro.
        (FREE_PAGE_BUFS): New macro.

        (free_page_bufs_lock): Make this global variable local to
        get_page_buf.
        (free_page_bufs): Likewise.
        (num_free_page_bufs): Likewise.

        (get_page_buf): Reimplement using a new caching algorithm
        based on preallocation of COW zero pages.
        (free_page_buf): Likewise.

        (find_block): Documentation fixes.

2002-03-11  Roland McGrath  <roland@frob.com>

	* Makefile (ext2fs.static): Depend on
	$(boot-store-types:%=../libstore/libstore_%.a).

2002-01-03  Roland McGrath  <roland@frob.com>

	* inode.c (write_node): Never clear i_translator here.
	That is only done by diskfs_set_translator.

2001-11-21  Roland McGrath  <roland@frob.com>

	* inode.c (read_node): Just always call getpid for the fsid value.

2001-08-17  Marcus Brinkmann  <marcus@gnu.org>

	* ialloc.c (diskfs_alloc_node): Remove warnings about stale
	nonzero st_blocks or st_size.

2001-08-16  Roland McGrath  <roland@frob.com>

	* inode.c (write_node): Leave i_size, i_blocks, i_translator unchanged
	when the inode has been deleted.  Suggested by Marcus Brinkmann.

	* dir.c (diskfs_dirremove_hard): Remove redundant DP->dn_set_mtime set.
	Noticed by Marcus Brinkmann.

2001-08-09  Roland McGrath  <roland@frob.com>

	* inode.c (diskfs_get_translator): Fail with EFTYPE if the length
	field stored on disk is unreasonable.  Don't crash on ENOMEM.
	Use memcpy instead of bcopy.

2001-06-09  Mark Kettenis  <kettenis@gnu.org>

	* inode.c (diskfs_set_statfs): If number of free blocks is less
	than the number of reserved blocks, set the number of available
	blocks to 0.

2001-03-03  Roland McGrath  <roland@frob.com>

	* hyper.c (zeroblock, modified_global_blocks): Remove superfluous
	zero initializers.
	(allocate_mod_map): Likewise for static here.
	(get_hypermetadata): Don't munmap old ZEROBLOCK, just keep it.
	Allocate ZEROBLOCK with PROT_READ.

2001-02-28  Roland McGrath  <roland@frob.com>

	* dir.c (count_dirents): Check for bogus rec_len having pushed us past
	the end.

2001-01-08  Marcus Brinkmann  <marcus@gnu.org>

	* ext2fs.c (main): Use %Ld instead %ld to print store->size.
	* hyper.c (get_hypermetadata): Likewise.

2001-01-07  Marcus Brinkmann  <marcus@gnu.org>

	* dir.c: Make diskfs_dirstat_size const.

2000-12-21  Marcus Brinkmann  <marcus@gnu.org>

	* pager.c: Include <errno.h>.
	(create_disk_pager): Panic if malloc fails.
	Reported by Igor Khavkine <i_khavki@alcor.concordia.ca>.

	* inode.c (diskfs_get_translator): If malloc fails, set err to ENOMEM.
	Initialize err with 0, and return it at the end of the function.
	Reported by Igor Khavkine <i_khavki@alcor.concordia.ca>.

2000-12-02  Roland McGrath  <roland@frob.com>

	* inode.c (write_all_disknodes): Call diskfs_set_node_times after
	pokel_sync, since it might delay a little.
	(write_node): Remove assert that dn_set_mtime et al are clear.
	It is ok if they are set in parallel, because the latter setting
	will be carried out eventually.

2000-10-01  Roland McGrath  <roland@frob.com>

	* truncate.c (diskfs_truncate): Use & instead of %.

2000-11-30  Marcus Brinkmann  <marcus@gnu.org>

	* dir.c (diskfs_lookup_hard): If name is too long, clear
	DS before returning ENAMETOOLONG.

2000-10-01  Roland McGrath  <roland@frob.com>

	* inode.c (write_node): Use memcpy instead of a loop.

2000-07-26  Mark Kettenis  <kettenis@gnu.org>

	* Makefile (HURDLIBS): Reorder libs such that the threads lib
	comes before the ports lib.  This makes sure the functions in
	libthreads properly override the stubs in libports with the new
	dynamic linker semantics in glibc 2.2.

2000-07-26  Marcus Brinkmann  <marcus@gnu.org>

	* truncate.c (trunc_indirect): Add missing argument to
	pager_flush_some.

2000-07-25  Thomas Bushnell, BSG  <tb@mit.edu>

	* truncate.c (trunc_indirect): Before freeing an indirect block,
	remove it from the disk pager's kernel cache.

2000-03-09  Roland McGrath  <roland@baalperazim.frob.com>

	* balloc.c (ext2_free_blocks, ext2_new_block): Fix formats to avoid
	-Wformat warnings.
	* getblk.c (ext2_alloc_block, inode_getblk, ext2_getblk): Likewise.
	* ialloc.c (ext2_count_free_inodes): Likewise.
	* truncate.c (trunc_direct): Likewise.
	* pager.c (pending_blocks_write, diskfs_grow): Likewise.

2000-03-03  Roland McGrath  <roland@baalperazim.frob.com>

	* dir.c (diskfs_get_directs): Don't allocate buffer for *DATA until
	after scanning for ENTRY and possibly returning EOF.

2000-02-05  Roland McGrath  <roland@baalperazim.frob.com>

	* ext2_fs.h: Update from Linux 2.3.42 version (ext2_fs_i.h unchanged).
	* inode.c (check_high_bits): In accordance with Linux 2.3.42 behavior,
	permit 32-bit uids on non-hurd filesystems unless i_dtime is zero
	(which indicates an extra old Linux ext2 implementation I guess).

2000-01-16  Mark Kettenis  <kettenis@gnu.org>

	* pager.c (file_pager_write_page): Lock NODE->dn->alloc_lock
	before accessing NODE->allocsize.  Fixes Debian bug #40302.

1999-10-13  Roland McGrath  <roland@baalperazim.frob.com>

	* ext2fs.c (diskfs_name_max): New variable.

1999-10-06  Roland McGrath  <roland@baalperazim.frob.com>

	* hyper.c (get_hypermetadata): Avoid overflow in calculation of disk
	size vs superblock-specified requirement.
	Add a warning for wasted disk blocks after last filesystem block.

1999-10-03  Roland McGrath  <roland@baalperazim.frob.com>

	* dir.c (ext2_file_type): #if 0 out this variable.
	(diskfs_get_directs): #if 0 out code to interpret file_type field
	and set d_type.  Instead, always return DT_UNKNOWN for now.

	* dir.c (file_type_ext2): #if 0 out.
	(diskfs_direnter_hard): #if 0 out code to set file_type field in
	directory entries.  Instead, always set it to zero.

1999-10-03  Roland McGrath  <roland@baalperazim.frob.com>

	* bitmap.c (ffz): Subtract one from (1-origin) result of ffs to get
	our (0-origin) result.

	* Makefile (LCLHDRS): bitmap.h -> bitmap.c

	* ext2fs.h (test_bit, set_bit, clear_bit): Rewritten to operate on
	32-bit words instead of bytes.

	* truncate.c (diskfs_truncate): Add missing call to
	diskfs_end_catch_exception.

	* ext2fs.h (group_desc): Inline function replaced with macro.
	(group_desc_image): New variable.
	* hyper.c (get_hypermetadata): Initialize it.

	* ext2fs.h (sblock_block): Declare new variable.
	(SBLOCK_LBLOCK): Macro removed.
	(SBLOCK_OFFS): Define in terms of sblock_block.
	* ext2fs.c (options): Add --sblock/-S.
	(parse_opt): Parse it to set sblock_block.
	* hyper.c (sblock_block): New variable.
	(get_hypermetadata): Use sblock_block instead of constant SBLOCK_BLOCK.

	* ext2fs.c (options): List --debug/-D unconditionally, adding to help
	text #ifndef EXT2FS_DEBUG
	(parse_opt): Always grok -D.  #ifndef EXT2FS_DEBUG, reject it with
	message saying debugging support not compiled in.

	* hyper.c (get_hypermetadata): Use EXT2_MAX_BLOCK_SIZE instead of
	hard-wired 8192.  Don't use ffs to compute log2_block_size, and don't
	check for the impossible case of non-power-of-two block size (the
	block size specification we start with is given as a power of two!).
	* ext2fs.h (block_size): Change type to unsigned int.
	(BLOCKSIZE_SCALE): Just use SBLOCK->s_log_block_size directly.
	* hyper.c (get_hypermetadata): Fix printf formats to silence warning.
	* dir.c (dirscanblock): Likewise.

	* dir.c (file_type_ext2): New const variable, map DT_* -> EXT2_FT_*.
	(diskfs_direnter_hard): Move initialization of directory entry content
	fields out of switch; use memcpy or memmove as appropriate, instead of
	bcopy.  Set file_type field in new directory entry to appropriate
	type for the node, or to zero if the filesystem doesn't have the
	EXT2_FEATURE_INCOMPAT_FILETYPE flag set.

1999-10-02  Roland McGrath  <roland@baalperazim.frob.com>

	* ext2fs.h (SBLOCK_LBLOCK): New macro, filesystem block number of sb.
	(BLOCKSIZE_SCALE): New macro for converting min-blocks to fs blocks.
	(group_desc): Fix calculation of offset from superblock, so it works
	properly with block_size != EXT2_MIN_BLOCK_SIZE.

	* ext2fs.h (EXT2FS_EI): New macro, use it for all extern inlines.

	* bitmap.c (count_free, find_next_zero_bit, find_first_zero_bit):
	Make these all static inline.
	(ffz, ffz_nibble_map): Function and variable removed.
	(ffz): Replace decl with macro defined in terms of ffs.
	* ext2fs.h (count_free, find_next_zero_bit, find_first_zero_bit, ffz):
	Remove these declarations.
	* Makefile (SRCS): Remove bitmap.c.
	(LCLHDRS): Add bitmap.c here instead.
	* balloc.c, ialloc.c: #include "bitmap.c" here.

1999-10-01  Roland McGrath  <roland@baalperazim.frob.com>

	* bitmap.c (memscan): Function removed.
	* ext2fs.h: Removed its decl.
	* balloc.c (memscan): New static function, defined using memchr.

1999-09-13  Roland McGrath  <roland@baalperazim.frob.com>

	* dir.c, truncate.c, pager.c: Reverted changes related to
	io_map_segment.

1999-09-09  Roland McGrath  <roland@baalperazim.frob.com>

	* Makefile (makemode): server -> servers.
	(targets): Replaced with target; remove ext2fs.static.
	(ext2fs.static-LDFLAGS): Variable removed.
	(ext2fs, ext2fs.static): Remove deps.

1999-09-07  Thomas Bushnell, BSG  <tb@mit.edu>

	* dir.c (diskfs_lookup_hard): Pass additional parameter to
	diskfs_get_filemap.
	(diskfs_dirempty): Likewise.
	* truncate.c (force_delayed_copies): Likewise.
	* pager.c (diskfs_get_filemap): Accept additional parameter.

1999-09-04  Thomas Bushnell, BSG  <tb@mit.edu>

	* pager.c (file_pager_write_page): Don't report errors on writes
	that extend past NODE->allocsize.  This avoids a race between sync
	and truncate.  Reported by Mark Kettenis <kettenis@wins.uva.nl>.

1999-08-23  Roland McGrath  <roland@baalperazim.frob.com>

	* ext2_fs.h, ext2_fs_i.h: Replaced with Linux 2.3.14 versions.
	* ext2fs.h (i_mode_high): New macro, missing from ext2_fs.h.

	* inode.c (read_node): Don't set INFO->i_version.
	Extract INFO->i_dir_acl value only for a directory;
	otherwise use zero and instead extract INFO->i_high_size.
	Fail with EFBIG if INFO->i_high_size is nonzero.

	* ialloc.c (diskfs_alloc_node): Propagate initial value of i_flags
	from directory, as Linux 2.3.14 does.

	* inode.c (write_node): Get i_flags from NP->dn->info instead of from
	the disk inode, so we can have modified the in-core version.
	* dir.c (diskfs_direnter_hard, diskfs_dirremove_hard,
	diskfs_dirrewrite_hard): Clear EXT2_BTREE_FL flag bit from
	DP->dn->info.i_flags after modifying the directory (this is what
	Linux 2.3.14 does).

	* inode.c (read_node): i_version -> i_generation
	* inode.c (write_node): Likewise.

	* balloc.c (ext2_free_blocks): Handle freeing across group boundary,
	as Linux 2.3.14 does.

	* balloc.c (ext2_check_blocks_bitmap): If RO_COMPAT_SPARSE_SUPER
	feature flag is set, or if group number is not a power of 3, 5, or 7
	(I don't know why; this is what Linux 2.3.14 does), skip tests for
	superblocks and descriptor blocks being free in bitmap.

	* dir.c: Replace `struct ext2_dir_entry' with `struct ext2_dir_entry_2'
	in all uses.
	(ext2_file_type): New static const variable.
	(diskfs_get_directs): Set d_type member based on file_type field in
	directory entry.

	* balloc.c (ext2_new_block): Take new arg PREALLOC_GOAL.
	Use that instead of hard-coded 8 as maximum of blocks to preallocate.
	Also test that instead of PREALLOC_COUNT to decide whether to
	try any preallocation at all.
	* getblk.c (ext2_alloc_block): Pass new arg to ext2_new_block.
	Use EXT2_DEFAULT_PREALLOC_BLOCKS as default (replaces hard-coded 8);
	For a regular file, use SBLOCK->s_prealloc_blocks before default.
	For a directory, use SBLOCK->s_dir_prealloc_blocks if the
	EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is set, otherwise zero.
	* inode.c (diskfs_set_translator): Pass new arg (zero).

1999-07-11  Roland McGrath  <roland@baalperazim.frob.com>

	* dir.c (diskfs_get_directs): Fix sloppy bugs in last change.
	* hyper.c (allocate_mod_map): Likewise.
	* pager.c (get_page_buf): Likewise.

1999-07-10  Roland McGrath  <roland@baalperazim.frob.com>

	* ext2fs.h: Add #include <sys/mman.h> for munmap decl.

1999-07-06  Thomas Bushnell, BSG  <tb@mit.edu>

	* dir.c (diskfs_get_directs): Use mmap instead of vm_allocate.
	* hyper.c (allocate_mod_map): Likewise.
	(get_hypermetadata): Likewise.
	* pager.c (get_page_buf): Likewise.

	* hyper.c (diskfs_readonly_changed): Use mprotect instead of
	vm_protect.

1999-07-03  Thomas Bushnell, BSG  <tb@mit.edu>

	* dir.c (diskfs_lookup_hard): Use munmap instead of vm_deallocate.
	(diskfs_direnter_hard): Likewise.
	(diskfs_dirremove_hard): Likewise.
	(diskfs_dirrewrite_hard): Likewise.
	(diskfs_dirempty): Likewise.
	(diskfs_drop_dirstat): Likewise.
	(diskfs_get_directs): Likewise.
	* hyper.c (allocate_mod_map): Likewise.
	(get_hypermetadata): Likewise.
	* pager.c (free_page_buf): Likewise.
	* truncate.c (poke_pages): Likewise.

1999-06-29  Thomas Bushnell, BSG  <tb@mit.edu>

	* hyper.c (diskfs_readonly_changed): Adjust whether the store
	should permit writes too.

1999-06-19  Roland McGrath  <roland@baalperazim.frob.com>

	* pager.c (free_page_buf): Fix type cast.

Tue Jun 15 21:51:58 1999  Thomas Bushnell, BSG  <tb@mit.edu>

	* pager.c: Clamp the number of free pages we keep around to some
	reasonably small value.  Patch from Mark Kettenis
	<kettenis@wins.uva.nl>.

1999-06-15  Thomas Bushnell, BSG  <tb@mit.edu>

	* inode.c (diskfs_validate_flags_change): Invert sense of test wrt
	bits that haven't yet been defined.  Reported by Kalle Olavi
	Niemitalo <tosi@ees2.oulu.fi>.

1999-05-23  Roland McGrath  <roland@baalperazim.frob.com>

	* ialloc.c (diskfs_alloc_node): Frob printf format to suppress warning.
	* getblk.c (ext2_getblk): Likewise.
	* balloc.c (ext2_free_blocks): Likewise.
	* hyper.c (get_hypermetadata): Likewise.

	* ialloc.c (diskfs_alloc_node): If creator_os is not EXT2_OS_HURD,
	suppress warnings about stale nonzero st_blocks or st_size.

1999-05-19  Roland McGrath  <roland@baalperazim.frob.com>

	* ext2fs.c (main): Include store size in panic msg when it's too small.

1999-01-23  Roland McGrath  <roland@baalperazim.frob.com>

	* ext2fs.c (main): Use diskfs_init_main.

1998-12-27  Roland McGrath  <roland@baalperazim.frob.com>

	* inode.c (diskfs_set_statfs): Remove __ from struct members.

1998-12-21  Mark Kettenis  <kettenis@phys.uva.nl>

	* inode.c (diskfs_set_statfs): Fill in statfs members that are
	used to implement statvfs.

1998-12-27  Roland McGrath  <roland@baalperazim.frob.com>

	* ext2fs.c (main): Pass ARGP_IN_ORDER flag to argp_parse because
	diskfs options need it.

1998-12-20  Roland McGrath  <roland@baalperazim.frob.com>

	* inode.c (diskfs_write_disknode): Add braces to silence warning.
	* pager.c (file_pager_read_page): Likewise.

	* storeinfo.c: Don't include <netinet/in.h>.

1998-09-04  Roland McGrath  <roland@baalperazim.frob.com>

	* dir.c (dirscanblock): Fix defn with `const'.
	(diskfs_direnter_hard): Likewise.
	* inode.c (diskfs_create_symlink_hook): Likewise.
	(write_symlink): Likewise.

	* pager.c: strings.h -> string.h; gets strerror decl.

	* ext2fs.c (main): Fix return type to int.

	* dir.c (diskfs_lookup_hard): Fix defn with `const'.
	* inode.c (diskfs_set_translator): Likewise.

Wed Aug 20 14:28:00 1997  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* dir.c (diskfs_lookup_hard): Cope with error return from
	diskfs_get_filemap.
	(diskfs_dirempty): Cope (poorly) with error return from
	diskfs_get_filemap.
	* truncate.c (force_delayed_copies): Likewise.

	* pager.c (diskfs_get_filemap): If pager_create fails, return
	error to caller.

Mon Jun 30 17:34:27 1997  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* ext2fs.c (diskfs_readonly): Delete variable definition.
	(main): If the store cannot be made writable, then set
	diskfs_hard_readonly and diskfs_readonly.

1997-06-20  Miles Bader  <miles@gnu.ai.mit.edu>

	* pager.c (disk_pager_read_page): Initialize READ to 0 to force
	store_read to allocate a buffer.

1997-06-18  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (main): Get rid of device-block-size-is-power-of-2 check.

Tue Jun  3 17:18:35 1997  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (read_node): Don't assert that st_blocks is zero for
	non-dir/file/long-symlink inodes.

Tue Nov 19 18:30:37 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (read_node): If SBLOCK->s_creator_os != EXT2_OS_HURD,
	set NP->author_tracks_uid to true.

Mon Nov 18 17:14:31 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ialloc.c (diskfs_alloc_node): Clear S_IPTRANS bit in ST->st_mode
	instead of NP->istranslated.
	* inode.c (read_node): Set S_IPTRANS bit in ST->st_mode (and clear
	S_ITRANS) rather than NP->istranslated.
	(write_node): Don't write S_IPTRANS to disk.
	(diskfs_set_translator): Frob S_IPTRANS bit rather than
	istranslated field.

Sat Nov 16 17:26:20 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): diskfs_isuid ->
 	idvec_contains.

Tue Nov 12 17:53:08 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (diskfs_validate_flags_change): New function.
  	(write_node): Convert generic flags in ST->st_flags to ext2-
 	specific flags in DI->i_flags.
	(read_node): Renamed from read_disknode; all callers changed.
	Convert ext2-specific flags on disk to generic flags in ST.
	[!UF_APPEND] (UF_APPEND): New macro (temporary).
	[!UF_NODUMP] (UF_NODUMP): New macro (temporary).
	[!UF_IMMUTABLE] (UF_IMMUTABLE): New macro (temporary).
	<sys/stat.h>: New include.

Thu Oct 24 16:24:05 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.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.

Wed Oct  9 13:30:15 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): Return ports with
	MACH_MSG_TYPE_COPY_SEND, not MACH_MSG_TYPE_MAKE_SEND.

Tue Oct  8 23:25:53 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): If st_size
 	indicates a lower value for NUM_FS_BLOCK, use it instead of the
 	value derived from st_blocks.

Mon Oct  7 15:48:49 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): Typo.

Fri Oct  4 23:51:05 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): Add security
	check, and deactivate FILE_STORE if necessary.

Mon Sep 30 15:40:53 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): Set *PORTS_TYPE.

Thu Sep 19 17:57:07 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* Makefile (HURDLIBS): Add store.

Wed Sep 18 15:28:32 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (main): Remove CLASSES argument to store_parsed_open.
	Use STORE_PARAMS variable to get result from parsing STORE_ARGP.
	(diskfs_extra_version): Put `GNU Hurd' in here.

Fri Sep 13 00:15:56 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (diskfs_append_args): Renamed from diskfs_get_options.
	Don't initialize *ARGZ & *ARGZ_LEN anymore, or deallocate on errors.
	Append store args too.

	* pager.c (file_pager_read_page:do_pending_reads, pager_unlock_page,
 	pending_blocks_write, diskfs_grow, find_block): Use filesystem blocks,
 	not device blocks, in block<->offset/size conversions.

	* Makefile (ext2fs ext2fs.static): Add ../libstore/libstore.a.

1996-09-12  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (diskfs_disk_name): Renamed from STORE_NAME.

Wed Sep 11 12:59:28 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* pager.c (create_disk_pager): Create PAGER_BUCKET.  Pass in new
	args to diskfs_pager_setup (renamed from disk_pager_setup).
	(disk_image): New variable.
	(service_paging_request): Function removed.
	(diskfs_shutdown_pager): Use DISKFS_DISK_PAGER instead of DISK_PAGER.
	* ext2fs.h (disk_image): New declaration.
	(sync_global_ptr): Use DISKFS_DISK_PAGER instead of DISK_PAGER.
	* ext2fs.c (main, diskfs_reload_global_state): Use
	DISKFS_DISK_PAGER instead of DISK_PAGER.

	* ext2fs.c (main): Change store_parsed_get_name to store_parsed_name.

	* storeinfo.c (diskfs_S_file_get_storage_info): Clone STORE before
	remapping it.

Tue Sep 10 17:12:16 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): Rewritten to use
	store functions.

Mon Sep  9 11:10:11 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (main): Use store fields instead of diskfs variables.
	(store, store_parsed, store_name): New variables.
	(free_page_bufs, free_page_bufs_lock): Variables removed.
	(get_page_buf, free_page_buf): Functions removed.
	<argp.h>, <hurd/store.h>: New includes.
	* ext2fs.h (store_parsed, store_name): New declarations.
	(get_page_buf, free_page_buf): Declarations removed.
	* hyper.c <hurd/store.h>: New include.
	* pager.c <hurd/store.h>: New include.
	(file_pager_write_pager): Make BUF void *.
	(file_pager_read_page): Make BUF void **, NEW_BUF void *, and
	LENGTH size_t.  Pass &LENGTH to store_read, not LENGTH.
	(pending_blocks_write): Make PAGE_BUF void *, and LENGTH size_t.
	Check amount written, and return EIO if it's wrong.
	(disk_pager_read_page): Make BUF void **, and LENGTH size_t.
	Check amount read, and return EIO if it's wrong.
	(disk_pager_write_page): Make BUF void *, and LENGTH size_t.
	Check amount written, and return EIO if it's wrong.
	(pager_read_page, pager_read_page): Convert BUF to a pointer when
	calling work functions.
	(struct pending_blocks): Make BUF void *.
	(free_page_bufs, free_page_bufs_lock): New variables.
	(get_page_buf, free_page_buf): New functions.

Sun Sep  8 18:47:10 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hyper.c (diskfs_readonly_changed): Use STORE->size.
	(get_hypermetadata): Use STORE->size & STORE->block_size.

	* pager.c (file_pager_read_page, pending_blocks_write,
 	disk_pager_read_page, disk_pager_read_page, disk_pager_write_page,
 	pager_report_extent, find_block, pager_unlock_page, diskfs_grow):
	Use store_ operations instead of the old device ones, and some
	store fields instead of globals.
	* inode.c (read_disknode): Use STORE->log2_block_size instead of
	LOG2_BLOCK_SIZE.
	* ext2fs.h (store): New declaration.
	* ext2fs.c (startup_parents): Use diskfs_store_startup_argp
	instead of diskfs_std_device_startup_argp.
	(startup_parents, startup_argp, runtime_parents, runtime_argp,
	options, parse_opt, diskfs_get_options):
	Define always, not just when EXT2FS_DEBUG is defined.
	(parse_opt): Propagate our input to the first child argp.
	(parse_opt, diskfs_get_options): Guard debug-specific bits with
	#ifdef EXT2FS_DEBUG.

Thu Sep 12 16:41:20 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* Makefile (HURDLIBS): New variable.
	(ext2fs ext2fs.static): Depend on $(library_deps) instead of
	explicit list.

Fri Sep  6 16:03:11 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* ext2fs.c: Include <version.h>.
	(diskfs_major_version, diskfs_minor_version, diskfs_edit_version):
	Deleted variables.
	(diskfs_server_version): New variable.

Thu Aug 29 16:59:51 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	Changes from ufs/dir.c:
	* dir.c (diskfs_lookup_hard): When setting ds->stat to EXTEND, set
 	ds->idx by looking at the size of the file.  After successful
 	dirscanblock, record index where we finished in DP->dn->dir_idx.
  	Start searches at that index.
	(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.
	* ext2fs.h (struct disknode): New member `dir_idx'.
	* inode.c (diskfs_cached_lookup): Initialize DN->dir_idx.

	* dir.c (diskfs_direnter_hard): Initialize OLDSIZE to quiet gcc.

Sun Aug 18 01:45:42 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* pager.c (file_pager_read_page): Use get_page_buf to get a free page.
	(file_pager_read_page): Use free_page_buf to deallocate pages.
	* ext2fs.c (get_page_buf): Return 0 if we can't allocate.

Thu Aug 15 14:55:01 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (diskfs_edit_version): Change to `1'.
	(diskfs_version_extra): New variable.
	* inode.c (read_disknode): Change assertion to allow non-zero
	st_size for anything, but assert that st_blocks == 0 for any case
	where we set allocsize to 0.
	* truncate.c (diskfs_truncate): Allow any sort of node to have a
	size without any blocks (as linux apparently does this sometimes
	with devices).

Wed Aug 14 14:03:33 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (diskfs_minor_version): Change to `2'.

Tue Aug 13 15:11:42 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2_fs.h: Update to version from linux-2.0.12.
	* ialloc.c (ext2_alloc_inode, diskfs_free_node): Pass SBLOCK as a
	parameter to EXT2_FIRST_INO (v2.x change).
	* hyper.c (get_hypermetadata): Use EXT2_INODE_SIZE instead of
	sizeof (struct ext2_inode).
	Deal with various version 2.x features.
	* ext2fs.h (dino): Dont recalculate INODES_PER_BLOCK here.
	(ext2_debug): redefine macro after including ext2_fs.h.

Mon Aug 12 13:48:17 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (diskfs_minor_version): Changed to `1'.

	* inode.c (read_disknode): Don't set allocsize for in-inode symlinks.
	(MAX_INODE_SYMLINK): New macro.
	(write_symlink, read_symlink): New functions.
	(diskfs_create_symlink_hook, diskfs_read_symlink_hook): New variables.
	* truncate.c (diskfs_truncate): For in-inode symlinks, just frob
	the size.

	* ext2fs.h (__u32, __u16, __u8, __s32, __s16, __s8): New types.
	* ext2_fs.h (u32, u16, u8, s32, s16, s8): All uses of these types
	changed to have a leading `__', and the definitions removed.
	* ext2_fs_i.h (u32, u16, u8, s32, s16, s8): All uses of these types
	changed to have a leading `__'.

Mon Aug 12 11:18:37 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* hyper.c (diskfs_set_hypermetadata): Return an error code now.

Fri Aug  2 12:10:40 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (diskfs_write_disknode): If WAIT is false, still record
 	the write for later, using record_global_poke.

Thu Aug  1 16:18:59 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2_fs.h (ext2_debug_flag): New decl.
	(ext2_debug): Pay attention to EXT2_DEBUG_FLAG.
	* ext2fs.c [EXT2FS_DEBUG] (options, ext2_debug_flag): New variables.
	[EXT2FS_DEBUG] (parse_opt, diskfs_get_options): New functions.
	[EXT2FS_DEBUG] (startup_parents, startup_argp, runtime_parents,
	diskfs_runtime_argp): New variables.
	[!EXT2FS_DEBUG] (startup_argp): New macro.
	(main): Use STARTUP_ARGP instead of DISKFS_STD_DEVICE_STARTUP_ARGP.
	* pager.c (diskfs_grow): Fix ext2_debug format strings.
	* truncate.c (trunc_direct): Fix ext2_debug call.

Sat Jul 20 00:58:44 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.h (struct disknode): Remove debugging info.
	(RECORD_LAST): Function removed.
	(LAST_BUFSZ): Macro removed.
	(enum last_act): Type removed.
	* inode.c (diskfs_cached_lookup): Don't initialize debugging info.
	* pager.c (file_pager_read_page, file_pager_write_page,
	pager_unlock_page, diskfs_grow): Don't record debugging info.
	* truncate.c (diskfs_truncate): Likewise.

	* pager.c (file_pager_read_page): Set
	NODE->dn->last_page_partially_writable if we return such a page.

Fri Jul 19 15:02:24 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* pager.c (diskfs_grow): Rename OLD_END_BLOCK to END_BLOCK.
	Correctly determine whether to set DN->last_page_partially_writable
	after allocating new blocks.

	* pager.c (file_pager_read_page, file_pager_write_page): Pass
	NODE->dn, not &NODE->dn to RECORD_LAST.

Mon Jul 15 18:00:26 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.h (struct disknode): Add debugging info.
	(RECORD_LAST): New function.
	(LAST_BUFSZ): New macro.
	(enum last_act): New type.
	* pager.c (pager_unlock_page, diskfs_grow, file_pager_read_page,
	file_pager_write_page): Record debugging info.
	* truncate.c (diskfs_truncate): Likewise.
	* inode.c (diskfs_cached_lookup): Initialize debugging info.

	* pager.c (file_pager_read_page): Initialize *WRITELOCK to 0.

Tue Jun 25 12:22:21 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.h (sync_global): Renamed from sync_global_data.  Add WAIT
 	flag.  Don't call diskfs_set_hypermetadata.
	(alloc_sync): Call diskfs_set_hypermetadata instead of sync_global_data.
	(sync_super_block): Function removed.
	* hyper.c (diskfs_readonly_changed): No longer clear the clean bit.
	(diskfs_set_hypermetadata): Work correctly.
	* truncate.c (diskfs_truncate): Add call diskfs_check_readonly to
	clear clean bit.
	* inode.c (diskfs_cached_lookup): Use diskfs_check_readonly
	instead of diskfs_readonly.
	* dir.c (diskfs_lookup_hard, diskfs_dirempty): Likewise.
	* pager.c (diskfs_shutdown_pager): Don't shutdown the disk pager,
	just sync it.
	(diskfs_sync_everything): Call sync_global instead of pokel_sync.
	(final_sblock): Variable removed.
	(diskfs_grow): Add call diskfs_check_readonly to clear clean bit.

Mon Jun 24 17:14:25 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (check_high_bits, diskfs_validate_owner_change,
	diskfs_validate_group_change, diskfs_validate_mode_change,
	diskfs_validate_author_change): New functions.
	(write_node): For non-hurd filesystems, assert that no hurd
	extensions should be used.

Thu Jun 20 22:36:23 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (main): Rename diskfs_device_startup_argp to
	diskfs_std_device_startup_argp.

Sat Jun 15 15:56:01 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (read_disknode, write_inode): Use hurd-specific fields
	only on a hurd filesystem.

Fri May 10 09:32:43 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:52:20 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* inode.c (diskfs_set_statfs): Expect and fill in new format
 	statfs buffer.

	* Makefile (ext2fs ext2fs.static): s/ioserver/iohelp/g.
	* ext2fs.h: ioserver.h -> iohelp.h.

Tue May  7 16:22:56 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): Rewrite for new
	interface.

Tue Apr 30 12:51:09 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* Makefile (targets): Renamed from `target'.

Fri Apr 26 16:10:19 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* Makefile (makemode): Now `servers'.
	(targets): Renamed from `target'; now include ext2fs.static.
	(ext2fs.static-LDFLAGS): Renamed from `LDFLAGS'.
	(ext2fs.static): Depend on same things as `ext2fs'.
	(include ../Makeconf): Must come before dependency information.

Wed Apr 17 13:30:49 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (diskfs_write_disknode): Only sync DI if WAIT.

	* 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.

Thu Apr  4 18:51:19 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (diskfs_cached_lookup): Renamed from iget; all uses updated.
	Initialize the CACHE_ID field in the new node.
	* ext2fs.h (struct disknode): Get rid of NUMBER field; all references
	replaced by references to the CACHE_ID field in the corresponding node.

Fri Mar 29 11:03:58 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* dir.c (diskfs_null_dirstat): New function.
	(diskfs_lookup_hard, diskfs_direnter, diskfs_dirremove_hard,
	diskfs_dirrewrite_hard): Renamed from versions without `_hard' suffix.
	Get rid of stuff now done by diskfs.

	* ext2fs.c (main): Pass new argument to argp_parse.

Tue Mar 19 17:52:04 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* pager.c (pager_unlock_page, diskfs_grow): Try to make the logic
	a bit simpler and more robust.

Fri Feb 16 17:05:01 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (main): Check error return from diskfs_init_diskfs.

Tue Feb  6 14:49:40 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.h (ext2_warning): Make a declaration, not a macro.
	* msg.c (ext2_warning): Rename from _ext2_warning; don't take (or
	print) a function argument any more.

	* dir.c (diskfs_get_directs): When BUFSIZ is 0, allocate enough
	extra space over the directory size to account for the worst case
	difference between the ext2 and canonical formats.

Sat Feb  3 11:27:07 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hyper.c (get_hypermetadata, diskfs_readonly_changed): Use
	ext2_warning to print warnings instead of error().
	* msg.c (_ext2_warning): Include `warning:' in message.

Sat Feb  3 06:10:43 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* hyper.c: Fixed handling of the filesystem `clean bit'.
	(ext2fs_clean): New boolean variable.
	(get_hypermetadata): Set it iff the clean bit is set on entry.
	If not clean, complain and force read-only.
	(diskfs_set_hypermetadata): Set clean bit only if ext2fs_clean is set.
	(diskfs_readonly_changed): Complain if going writable and clean
	bit clear.

	* ext2fs.c: Include string.h for strerror decl.

Tue Jan 30 22:25:19 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hyper.c (get_hypermetadata): Don't return any error value, just
	panic if we can't read the superblock.
	* ext2fs.c (main): Move warp_inode() inline.  Make sure root inode
	is really there.  Don't check return value from get_hypermetadata.
	(warp_inode): Function removed.
	* ext2fs.h (get_hypermetadata): Returns void now.

Tue Jan 30 17:04:41 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* pager.c (file_pager_read_page, file_pager_write_page): Check for
	a page offset beyond the allocsize and return EIO.

Wed Jan 17 15:11:55 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): Calculate the
	right value for *RUNS_LEN.

Tue Jan 16 17:37:00 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* pager.c (diskfs_file_update): Ext2fs doesn't require that the
	last block in the file always be allocated, so don't.
	(diskfs_grow, pager_unlock_page): Don't set last_block_allocated.
	* ext2fs.h (struct disknode): Get rid of last_block_allocated field.
	* inode.c (read_disknode): Don't set last_block_allocated.
	* truncate.c (diskfs_truncate): Likewise.

	* Makefile (LDFLAGS): Add -static.

Mon Jan 15 10:25:19 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* pager.c (pager_unlock_page, diskfs_grow): Leave things in a
	slightly more consistent state when block allocation errors happen.

	* dir.c (diskfs_direnter): Don't include the terminating '\0' in
	on-disk directory entry names.

	* inode.c (diskfs_node_norefs): When losing our in-core copy of an
	inode, remember which indirect blocks still have to be written.
	* pokel.c (pokel_inherit, pokel_finalize): New functions.
	* ext2fs.h (pokel_inherit, pokel_finalize): New declarations.

	* dir.c (diskfs_lookup): Patch from ufs/dir.c: If we are returning
 	an error, then set the dirstat to be ignored by drop_dirstat.

Sun Jan 14 13:17:33 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* ialloc.c (diskfs_alloc_node): Set NP->istranslated to 0.
	* inode.c (write_node): If NP isn't translated, force
	DI->i_translator to 0.

	* getblk.c (inode_getblk, block_getblk): Set dn_set_mtime too.

Sat Jan  6 11:57:26 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* pager.c (pager_bucket): Made global.
	(create_disk_pager): Pass MAY_CACHE to disk_pager_setup.
	* ext2fs.c (main): Don't map in disk image here; create_disk_pager
	now does it.

Fri Jan  5 16:57:54 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* ext2fs.h: Declare create_disk_pager.

Thu Jan  4 18:46:40 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* ext2fs.h (disk_pager, disk_pager_port, disk_image,
	create_disk_pager): Decls removed.
	Include hurd/diskfs-pager.h instead.

	* pager.c (create_disk_pager): Use disk_pager_setup.

Tue Nov 14 14:59:32 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* dir.c (dirscanblock): Apply mib's changes to ufs/dir.c.

Sat Nov  4 20:01:01 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): Add FLAGS argument.

Wed Nov  1 20:09:59 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (main): Add FLAGS arg to diskfs_startup_diskfs call.

Mon Oct 23 17:49:16 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (diskfs_get_translator, diskfs_set_translator): Only
	support these if the filesystem's creator-os is `hurd'.
	(read_disknode): Only check the i_translator field if the
	filesystem's creator-os is `hurd'.

Fri Oct 20 19:18:16 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.h (MS_RDONLY, MS_NOSUID, MS_NODEV, MS_NOEXEC,
	MS_SYNCHRONOUS, MS_REMOUNT, S_APPEND, S_IMMUTABLE, IS_APPEND,
	IS_IMMUTABLE): Macros deleted.

Thu Oct 19 19:15:15 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* pager.c (create_disk_pager, diskfs_get_filemap,
	pager_clear_user_data): Don't use the p field in a upi.
	(diskfs_get_filemap): Update/initialize the max_prot field.
	Add the prot arg.

	* ext2fs.h (struct user_pager_info): Add max_prot field, remove p.
	* pager.c (drop_pager_softrefs): Declare PAGER, not UPI.
	(enable_caching): The disk node is upi->node, not upi->np.
	(diskfs_enable_pagers): Function removed.
	* inode.c (read_disknode): Add DN and OFFSET variables.  Use
	log2_block_size to mask instead of doing a modulo with block_size.
	* hyper.c (diskfs_readonly_changed): Typo.
	(allocate_mod_map): Declare ERR; OLD_MOD_MAP_SIZE --> MOD_MAP_SIZE.
	* dir.c (diskfs_lookup, diskfs_dirempty): Give diskfs_get_filemap
	a protection arg.
	* truncate.c (force_delayed_copies): Ditto.

Wed Oct 18 21:00:28 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.h (struct disknode): Replace fileinfo field with pager.
	* inode.c (diskfs_node_norefs, iget): Use pager field, not fileinfo.
	* pager.c (diskfs_get_filemap_pager_struct, flush_node_pager,
	diskfs_file_update, pager_clear_user_data, drop_pager_softrefs): Ditto.
	* truncate.c (enable_delayed_copies, force_delayed_copies): Ditto.

	* ext2fs.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.
	* pager.c (diskfs_enable_pagers): New function.

Tue Oct 17 21:16:04 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* pokel.c (_pokel_exec, pokel_flush): New functions.
	(pokel_sync): Use _pokel_exec to do the work.
	* pager.c (flush_node_pager): New function.
	* ext2fs.h (pokel_flush, flush_node_pager): New declarations.

	* hyper.c (allocate_mod_map): New function (from get_hypermetadata).
	(zeroblock, modified_global_blocks): Define (were common).
	(get_hypermetadata): Deallocate ZEROBLOCK if necessary.  Use
	allocate_mod_map to allocate MODIFIED_GLOBAL_BLOCKS.
	(diskfs_readonly_changed): New function.
	* main.c (main): Move stuff into get_hypermetadata.
	Writable init code moved to diskfs_readonly_changed.

	* inode.c (diskfs_node_reload): New function.
	(iget, read_disknode): Code to set allocsize and the last_* fields
	moved from iget to read_disknode.

	* ext2fs.h (disk_pager): Type changed to struct pager.
	(sync_global_ptr): Use DISK_PAGER, not DISK_PAGER->p.
	* pager.c (create_disk_pager): Store the actual pager into DISK_PAGER.
	* ext2fs.c (main): Use DISK_PAGER directly, not ->p.
	* inode.c (iget): Ditto.
	* pager.c (diskfs_shutdown_pager, diskfs_sync_everything): Ditto.

Mon Oct 16 15:23:25 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (diskfs_lost_hardrefs): #ifdef'd out contents removed.

Fri Oct 13 17:50:23 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (main): Use argp for parsing.
	(usage, USAGE, SHORT_OPTS, long_opts, console_stdio): Removed

Thu Oct 12 18:16:00 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* hyper.c (get_hypermetadata): Use diskfs device functions &
	variables instead of our own.
	* ext2fs.h (device_arg, device_name, device_port, device_start,
	device_size, device_block_size): Declarations removed.

	* ext2fs.c (printf, _ext2_error, _ext2_panic, _ext2_warning):
	Functions moved to msg.c
	* msg.c: New file.
	(printf, _ext2_error, _ext2_panic, _ext2_warning): Funcs from ext2fs.c.
	* Makefile (SRCS): Remove devio.c, add msg.c.

Sat Oct  7 20:47:19 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): run_elem_t --> off_t.

	* ext2fs.c (diskfs_init_completed): Func deleted (now in libdiskfs).

Fri Oct  6 17:24:57 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): Change type of
	ADDRESSES to off_t **, and add BLOCK_SIZE parameter.

Wed Oct  4 20:02:34 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.

Wed Sep 27 20:07:53 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* ext2fs.c (main): Use diskfs routines to open the device.
	Support both file and mach devices.  Move the parse function here.
	(parse_opt): Move into main (as a nested function).
	* ext2fs.h (device_arg, device_start): New declarations.
	* devio.c (dev_read_sync, dev_write_sync): Offset the address to
	which we're doing i/o with DEVICE_START.

Tue Sep 26 18:39:58 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* storeinfo.c (diskfs_S_file_get_storage_info): New function.
	* Makefile (SRCS): Add storeinfo.c.

Fri Sep 15 14:21:18 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* truncate.c (trunc_indirect): Only record an indirect block as
	being modified when it actually is.

	* truncate.c (diskfs_truncate): Use the new truncate functions.
	(poke_pages): Gratuitous cosmetic changes.
	(trunc_direct): Rewritten, new args.
	(trunc_indirect): Rewritten, new args, now more general to support
	all the various indirection levels.
	(trunc_triple_indirect, trunc_double_indirect,
	trunc_single_indirect): New functions.
	(struct free_block_run): New structure.
	(free_block_run_finish, free_block_run_free_ptr,
	free_block_run_add, free_block_run_init, _free_block_run_flush):
	New functions.
	(trunc_dindirect, trunc_tindirect): Functions deleted.
	(DIRECT_BLOCK, INDIRECT_BLOCK, DINDIRECT_BLOCK, TINDIRECT_BLOCK):
	Macros deleted.

	* getblk.c (block_getblk, ext2_getblk): u32 --> block_t.
	* balloc.c (ext2_new_block): Ditto.
	* hyper.c (get_hypermetadata): Ditto.
	* pager.c (file_pager_write_page): Ditto.

Wed Sep 13 12:30:23 1995  Michael I. Bushnell, p/BSG  <mib@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.

Tue Sep 12 11:03:19 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* pokel.c (pokel_init): Initialize the free_pokes field.
	(pokel_add): Assert that this malloc should succeed.
	(pokel_sync): Don't hold POKEL's spin lock while syncing.

	* ialloc.c (diskfs_alloc_node): Check for a non-zero ALLOCSIZE.

Tue Sep  5 16:59:40 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.
	(diskfs_shutdown_pager): shutdown_one gets passed a pager, not a upi.
	(diskfs_sync_everything): sync_one gets passed a pager, not a upi.

Sun Sep  3 17:28:13 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* ext2fs.c (thread_cancel): Removed.

Fri Aug 25 14:37:32 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* Makefile (ext2fs): Put libports in the right place in the
	linking order.

Thu Aug 24 10:34:15 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* Makefile (ext2fs): Put all dependencies here.
	(HURDLIBS): Removed.

Tue Aug 22 19:39:06 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* Makefile (HURDLIBS): Add libshouldbeinlibc.
	Remove rules for error.o.

Fri Jul 21 17:51:33 1995  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* pager.c (diskfs_get_filemap): Free 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.

Thu Jul  6 15:33:24 1995  Michael I Bushnell  <mib@duality.gnu.ai.mit.edu>

	* Makefile: Removed dependencies that are now automatically
 	generated.

Thu Jul  6 13:36:25 1995  Miles Bader  <miles@geech.gnu.ai.mit.edu>

	* pager.c (diskfs_pager_users): New function.

Tue Jun 27 13:08:33 1995  Michael I Bushnell  <mib@duality.gnu.ai.mit.edu>

	* pager.c (pager_unlock_page): Declare BLOCK volatile.

Sat Jun 24 17:59:36 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* Makefile (HURDLIBS): Add libihash.

	* ext2fs.c (thread_cancel): Dummy function.

	* dir.c (diskfs_direnter): Move assignment out of test.
	(diskfs_get_directs): Fix print-format types.
	* ialloc.c (diskfs_free_node): Fix print-format types.

	* pager.c (thread_function): New function.
	(create_disk_pager): Make a new thread to service paging requests.
	* ext2fs.c (main): Have the initial thread die when it's done, leaving
	other thread to do the work.

	* pager.c (pager_bucket): New variable.
	(pager_list_lock, file_pager_list): Variables deleted.
	(create_disk_pager): Create pager_bucket.
	(create_disk_pager, diskfs_get_filemap): Pass pager_bucket to
	pager_create.
	(pager_traverse): Function deleted.
	(diskfs_get_filemap, pager_clear_user_data): Don't add/remove UPI
	to/from the pager list, as there isn't any.
	(diskfs_shutdown_pager, diskfs_sync_everything): Use
	ports_bucket_iterate on pager_bucket to go through all the pagers,
	instead of pager_traverse.
	(diskfs_file_update, pager_traverse, allow_pager_softrefs,
	drop_pager_softrefs): Change pager [un]ref calls to use the new ports
	ref calls directly instead.
	(pager_dropweak): New function (does nothing).
	* ext2fs.h (struct user_pager_info): Remove the next & prevp fields.

	* truncate.c (force_delayed_copies, enable_delayed_copies): Change
	pager [un]ref calls to use the new ports ref calls directly instead.
	* inode.c (diskfs_lost_hardrefs): Ditto.

	* inode.c (diskfs_node_iterate): New function.
	(write_all_disknodes): Re-implemented using diskfs_node_iterate.

Wed Jun 14 16:19:49 1995  Michael I Bushnell  <mib@duality.gnu.ai.mit.edu>

	* inode.c (diskfs_get_translator): Conform to new memory usage
        semantic.

Fri May 19 20:56:51 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* ext2fs.c (main): Use options_parse & diskfs_standard_startup_options
	to do command line options parsing.
	(long_opts): Was `options'.  Most things removed, as
	they're now handled by libdiskfs.
	(parse_opt): New routine to deal with our few meagre remaining
	options in the approved options_parse manner.

Mon May 15 15:55:49 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* ext2fs.c (main, usage, options): Add --writable & --nosync options.

Sat May 13 20:04:55 1995  Miles Bader  <miles@duality.gnu.ai.mit.edu>

	* inode.c (diskfs_set_statfs): Set st->fsys_stb_bsize, not _fsize,
	to the block size.

Sat May 13 05:02:59 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* Makefile (OBJS): Remove exec_server_image.o.
	(exec_server_image.o): Rule removed.

Fri May 12 15:23:02 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* ext2fs.c (main): Add an optional argument to the --sync option
	that lets the user specify an initial sync interval.

Thu May 11 13:30:06 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* pager.c (pager_unlock_page): Give an explanation of why the file
	system will shortly crash.

	* balloc.c (ext2_free_blocks, ext2_new_block): Get rid of the
	CHECK_STRICT variable, and just always do the tests it controlled.
	* ext2fs.h: Get rid of the CHECK_STRICT variable.

	* ext2fs.h (ext2_error, ext2_warning, ext2_panic, all callers changed):
	Make these into macros that automagically supply the caller's
	function name, and rename the original functions (which these
	macros call) to have an underline prefix.
	* ext2fs.c (ext2_error, ext2_warning, ext2_panic): Rename to add
	the underline prefix.  Also rearrange a bit to hold the lock
	around the use of the global message buffer.

	* ext2fs.c (main): Enable the bootstrap code.

	* inode.c (read_disknode): Make st_blksize larger: 2 * pagesize.

Wed May 10 14:03:34 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* getblk.c (block_getblk, inode_getblk): Return ENOSPC instead of
	EIO when we can't allocate a new block.

	* bitmap.c (find_next_zero_bit): Fix stupid typos (present in the
	original linux source I copied this function from!) which were
	causing occasional garbage results.

Tue May  9 18:08:41 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* ext2fs.h (DONT_CACHE_MEMORY_OBJECTS): Don't define this any
	more, as the bugs we were using it to catch are supposedly gone :-|