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