Home | History | Annotate | Line # | Download | only in lfs
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 
      5 NOTE: Changed the lookup on a page of inodes to search from the back
      6 in case the same inode gets written twice on the same page.
      7 
      8 Make sure that if you are writing a file, but not all the blocks
      9 make it into a single segment, that you do not write the inode in
     10 that segment.
     11 
     12 Keith:
     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 
     32 DONE	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).
     41 DONE	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.
     45 DONE	Delete unnecessary source from utils in main-line source tree.
     46 DONE	Make sure that we're counting meta blocks in the inode i_block count.
     47 	Overlap the version and nextfree fields in the IFILE
     48 DONE	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 
     54 Margo:
     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.
     60 DONE	Unmount; not doing a bgetvp (VHOLD) in lfs_newbuf call.
     61 DONE	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.
     65 DONE	Check lfs.h and make sure that the #defines/structures are all
     66 		actually needed.
     67 DONE	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?
     70 DONE	USENIX paper (Carl/Margo).
     71 
     72 
     73 Evelyn:
     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 
     79 Carl:
     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 
     94 FUTURE FANTASIES: ============
     95 
     96 + unrm, versioning
     97 + transactions
     98 + extended cleaner policies (hot/cold data, data placement)
     99 
    100 ==============================
    101 Problem with the concept of multiple buffer headers referencing the segment:
    102 Positives:
    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.
    109 Negatives:
    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 
    115 The algorithm for selecting the disk addresses of the super-blocks
    116 has to be available to the user program which checks the file system.
    117 
    118 (Currently in newfs, becomes a common subroutine.)
    119