TODO revision 1.2
1# $NetBSD: TODO,v 1.2 1994/06/29 06:46:45 cgd Exp $ 2 3# @(#)TODO 8.1 (Berkeley) 6/11/93 4 5NOTE: Changed the lookup on a page of inodes to search from the back 6in case the same inode gets written twice on the same page. 7 8Make sure that if you are writing a file, but not all the blocks 9make it into a single segment, that you do not write the inode in 10that segment. 11 12Keith: 13 Why not delete the lfs_bmapv call, just mark everything dirty 14 that isn't deleted/truncated? Get some numbers about 15 what percentage of the stuff that the cleaner thinks 16 might be live is live. If it's high, get rid of lfs_bmapv. 17 18 There is a nasty problem in that it may take *more* room to write 19 the data to clean a segment than is returned by the new segment 20 because of indirect blocks in segment 2 being dirtied by the data 21 being copied into the log from segment 1. The suggested solution 22 at this point is to detect it when we have no space left on the 23 filesystem, write the extra data into the last segment (leaving 24 no clean ones), make it a checkpoint and shut down the file system 25 for fixing by a utility reading the raw partition. Argument is 26 that this should never happen and is practically impossible to fix 27 since the cleaner would have to theoretically build a model of the 28 entire filesystem in memory to detect the condition occurring. 29 A file coalescing cleaner will help avoid the problem, and one 30 that reads/writes from the raw disk could fix it. 31 32DONE Currently, inodes are being flushed to disk synchronously upon 33 creation -- see ufs_makeinode. However, only the inode 34 is flushed, the directory "name" is written using VOP_BWRITE, 35 so it's not synchronous. Possible solutions: 1: get some 36 ordering in the writes so that inode/directory entries get 37 stuffed into the same segment. 2: do both synchronously 38 3: add Mendel's information into the stream so we log 39 creation/deletion of inodes. 4: do some form of partial 40 segment when changing the inode (creation/deletion/rename). 41DONE Fix i_block increment for indirect blocks. 42 If the file system is tar'd, extracted on top of another LFS, the 43 IFILE ain't worth diddly. Is the cleaner writing the IFILE? 44 If not, let's make it read-only. 45DONE Delete unnecessary source from utils in main-line source tree. 46DONE Make sure that we're counting meta blocks in the inode i_block count. 47 Overlap the version and nextfree fields in the IFILE 48DONE Vinvalbuf (Kirk): 49 Why writing blocks that are no longer useful? 50 Are the semantics of close such that blocks have to be flushed? 51 How specify in the buf chain the blocks that don't need 52 to be written? (Different numbering of indirect blocks.) 53 54Margo: 55 Change so that only search one sector of inode block file for the 56 inode by using sector addresses in the ifile instead of 57 logical disk addresses. 58 Fix the use of the ifile version field to use the generation 59 number instead. 60DONE Unmount; not doing a bgetvp (VHOLD) in lfs_newbuf call. 61DONE Document in the README file where the checkpoint information is 62 on disk. 63 Variable block sizes (Margo/Keith). 64 Switch the byte accounting to sector accounting. 65DONE Check lfs.h and make sure that the #defines/structures are all 66 actually needed. 67DONE Add a check in lfs_segment.c so that if the segment is empty, 68 we don't write it. 69 Need to keep vnode v_numoutput up to date for pending writes? 70DONE USENIX paper (Carl/Margo). 71 72 73Evelyn: 74 lfsck: If delete a file that's being executed, the version number 75 isn't updated, and lfsck has to figure this out; case is the same as if have an inode that no directory references, 76 so the file should be reattached into lost+found. 77 Recovery/fsck. 78 79Carl: 80 Investigate: clustering of reads (if blocks in the segment are ordered, 81 should read them all) and writes (McVoy paper). 82 Investigate: should the access time be part of the IFILE: 83 pro: theoretically, saves disk writes 84 con: cacheing inodes should obviate this advantage 85 the IFILE is already humongous 86 Cleaner. 87 Port to OSF/1 (Carl/Keith). 88 Currently there's no notion of write error checking. 89 + Failed data/inode writes should be rescheduled (kernel level 90 bad blocking). 91 + Failed superblock writes should cause selection of new 92 superblock for checkpointing. 93 94FUTURE FANTASIES: ============ 95 96+ unrm, versioning 97+ transactions 98+ extended cleaner policies (hot/cold data, data placement) 99 100============================== 101Problem with the concept of multiple buffer headers referencing the segment: 102Positives: 103 Don't lock down 1 segment per file system of physical memory. 104 Don't copy from buffers to segment memory. 105 Don't tie down the bus to transfer 1M. 106 Works on controllers supporting less than large transfers. 107 Disk can start writing immediately instead of waiting 1/2 rotation 108 and the full transfer. 109Negatives: 110 Have to do segment write then segment summary write, since the latter 111 is what verifies that the segment is okay. (Is there another way 112 to do this?) 113============================== 114 115The algorithm for selecting the disk addresses of the super-blocks 116has to be available to the user program which checks the file system. 117 118(Currently in newfs, becomes a common subroutine.) 119