TODO revision 1.2
11.2Scgd# $NetBSD: TODO,v 1.2 1994/06/29 06:46:45 cgd Exp $ 21.2Scgd 31.2Scgd# @(#)TODO 8.1 (Berkeley) 6/11/93 41.1Smycroft 51.1SmycroftNOTE: Changed the lookup on a page of inodes to search from the back 61.1Smycroftin case the same inode gets written twice on the same page. 71.1Smycroft 81.1SmycroftMake sure that if you are writing a file, but not all the blocks 91.1Smycroftmake it into a single segment, that you do not write the inode in 101.1Smycroftthat segment. 111.1Smycroft 121.1SmycroftKeith: 131.1Smycroft Why not delete the lfs_bmapv call, just mark everything dirty 141.1Smycroft that isn't deleted/truncated? Get some numbers about 151.1Smycroft what percentage of the stuff that the cleaner thinks 161.1Smycroft might be live is live. If it's high, get rid of lfs_bmapv. 171.1Smycroft 181.1Smycroft There is a nasty problem in that it may take *more* room to write 191.1Smycroft the data to clean a segment than is returned by the new segment 201.1Smycroft because of indirect blocks in segment 2 being dirtied by the data 211.1Smycroft being copied into the log from segment 1. The suggested solution 221.1Smycroft at this point is to detect it when we have no space left on the 231.1Smycroft filesystem, write the extra data into the last segment (leaving 241.1Smycroft no clean ones), make it a checkpoint and shut down the file system 251.1Smycroft for fixing by a utility reading the raw partition. Argument is 261.1Smycroft that this should never happen and is practically impossible to fix 271.1Smycroft since the cleaner would have to theoretically build a model of the 281.1Smycroft entire filesystem in memory to detect the condition occurring. 291.1Smycroft A file coalescing cleaner will help avoid the problem, and one 301.1Smycroft that reads/writes from the raw disk could fix it. 311.1Smycroft 321.1SmycroftDONE Currently, inodes are being flushed to disk synchronously upon 331.1Smycroft creation -- see ufs_makeinode. However, only the inode 341.1Smycroft is flushed, the directory "name" is written using VOP_BWRITE, 351.1Smycroft so it's not synchronous. Possible solutions: 1: get some 361.1Smycroft ordering in the writes so that inode/directory entries get 371.1Smycroft stuffed into the same segment. 2: do both synchronously 381.1Smycroft 3: add Mendel's information into the stream so we log 391.1Smycroft creation/deletion of inodes. 4: do some form of partial 401.1Smycroft segment when changing the inode (creation/deletion/rename). 411.1SmycroftDONE Fix i_block increment for indirect blocks. 421.1Smycroft If the file system is tar'd, extracted on top of another LFS, the 431.1Smycroft IFILE ain't worth diddly. Is the cleaner writing the IFILE? 441.1Smycroft If not, let's make it read-only. 451.1SmycroftDONE Delete unnecessary source from utils in main-line source tree. 461.1SmycroftDONE Make sure that we're counting meta blocks in the inode i_block count. 471.1Smycroft Overlap the version and nextfree fields in the IFILE 481.1SmycroftDONE Vinvalbuf (Kirk): 491.1Smycroft Why writing blocks that are no longer useful? 501.1Smycroft Are the semantics of close such that blocks have to be flushed? 511.1Smycroft How specify in the buf chain the blocks that don't need 521.1Smycroft to be written? (Different numbering of indirect blocks.) 531.1Smycroft 541.1SmycroftMargo: 551.1Smycroft Change so that only search one sector of inode block file for the 561.1Smycroft inode by using sector addresses in the ifile instead of 571.1Smycroft logical disk addresses. 581.1Smycroft Fix the use of the ifile version field to use the generation 591.1Smycroft number instead. 601.1SmycroftDONE Unmount; not doing a bgetvp (VHOLD) in lfs_newbuf call. 611.1SmycroftDONE Document in the README file where the checkpoint information is 621.1Smycroft on disk. 631.1Smycroft Variable block sizes (Margo/Keith). 641.1Smycroft Switch the byte accounting to sector accounting. 651.1SmycroftDONE Check lfs.h and make sure that the #defines/structures are all 661.1Smycroft actually needed. 671.1SmycroftDONE Add a check in lfs_segment.c so that if the segment is empty, 681.1Smycroft we don't write it. 691.1Smycroft Need to keep vnode v_numoutput up to date for pending writes? 701.1SmycroftDONE USENIX paper (Carl/Margo). 711.1Smycroft 721.1Smycroft 731.1SmycroftEvelyn: 741.1Smycroft lfsck: If delete a file that's being executed, the version number 751.1Smycroft isn't updated, and lfsck has to figure this out; case is the same as if have an inode that no directory references, 761.1Smycroft so the file should be reattached into lost+found. 771.1Smycroft Recovery/fsck. 781.1Smycroft 791.1SmycroftCarl: 801.1Smycroft Investigate: clustering of reads (if blocks in the segment are ordered, 811.1Smycroft should read them all) and writes (McVoy paper). 821.1Smycroft Investigate: should the access time be part of the IFILE: 831.1Smycroft pro: theoretically, saves disk writes 841.1Smycroft con: cacheing inodes should obviate this advantage 851.1Smycroft the IFILE is already humongous 861.1Smycroft Cleaner. 871.1Smycroft Port to OSF/1 (Carl/Keith). 881.1Smycroft Currently there's no notion of write error checking. 891.1Smycroft + Failed data/inode writes should be rescheduled (kernel level 901.1Smycroft bad blocking). 911.1Smycroft + Failed superblock writes should cause selection of new 921.1Smycroft superblock for checkpointing. 931.1Smycroft 941.1SmycroftFUTURE FANTASIES: ============ 951.1Smycroft 961.1Smycroft+ unrm, versioning 971.1Smycroft+ transactions 981.1Smycroft+ extended cleaner policies (hot/cold data, data placement) 991.1Smycroft 1001.1Smycroft============================== 1011.1SmycroftProblem with the concept of multiple buffer headers referencing the segment: 1021.1SmycroftPositives: 1031.1Smycroft Don't lock down 1 segment per file system of physical memory. 1041.1Smycroft Don't copy from buffers to segment memory. 1051.1Smycroft Don't tie down the bus to transfer 1M. 1061.1Smycroft Works on controllers supporting less than large transfers. 1071.1Smycroft Disk can start writing immediately instead of waiting 1/2 rotation 1081.1Smycroft and the full transfer. 1091.1SmycroftNegatives: 1101.1Smycroft Have to do segment write then segment summary write, since the latter 1111.1Smycroft is what verifies that the segment is okay. (Is there another way 1121.1Smycroft to do this?) 1131.1Smycroft============================== 1141.1Smycroft 1151.1SmycroftThe algorithm for selecting the disk addresses of the super-blocks 1161.1Smycrofthas to be available to the user program which checks the file system. 1171.1Smycroft 1181.1Smycroft(Currently in newfs, becomes a common subroutine.) 119