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

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

Thu Aug 29 16:07:07 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* dir.c (diskfs_lookup_hard): When setting ds->stat to EXTEND, set
	ds->idx by looking at the size of the file.  (IDX itself is no
	longer at the end because of the change on Aug 16 1996.) 

Wed Aug 28 12:15:15 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* dir.c (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.   

Fri Aug 16 18:51:31 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* ufs.h (struct disknode): New member `dir_idx'.
	* inode.c (diskfs_cached_lookup): Initialize DN->dir_idx.
	* dir.c (diskfs_lookup_hard): 	After successful dirscanblock,
	record index where we finished in DP->dn->dir_idx.  Start searches
	at that index.

Mon Aug 12 13:43:46 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* hyper.c (diskfs_set_hypermetadata): Bother to return 0 at end of
	function.

Wed Aug  7 13:00:30 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* inode.c (diskfs_set_statfs): Compute st->f_blocks correctly; set
	bsize to be fs_fsize, not fs_bsize.

	* hyper.c (diskfs_set_hypermetadata): Return an error as
	appropriate. 
	
	* inode.c (struct ufs_fhandle): Layout filehandle more like Unixy
	NFSD. 
 	(diskfs_S_file_getfh): Bother to clear unused parts of a
	file handle so that they always compare equal.

Tue Aug  6 12:19:38 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* inode.c: Include <fcntl.h>.
	(struct ufs_fhandle): New type.
	(diskfs_S_fsys_getfile, diskfs_S_file_getfh): New functions.

Tue Jul 23 15:58:28 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (write_node, read_disknode): `struct timespec' now uses
	a field prefix of `tv_'.

Sat Jul  6 16:14:10 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* main.c (ufs_version): Variable removed.

Sat Jul  6 12:45:36 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* inode.c (read_disknode): Don't set allocsize based on st->size
 	for kludged symlinks.

	* sizes.c (diskfs_truncate): Call record_poke after truncating a
 	kludged symlink.

Wed Jul  3 13:27:04 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* main.c: Include <argz.h>.
	(startup_parents, runtime_parents): Declare const.

Tue Jun 25 14:02:02 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* main.c (diskfs_get_options): Include `--compat=' in options.

Mon Jun 24 16:59:12 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* dir.c (diskfs_lookup_hard): Use diskfs_check_readonly instead of
 	diskfs_readonly.
	(diskfs_dirempty): Likewise.

	* dir.c (diskfs_lookup_hard): Use diskfs_check_readonly instead of
	diskfs_readonly.
	(diskfs_dirempty): Likewise.
	* inode.c (diskfs_cached_lookup): Likewise.
	(read_symlink_hook): Likewise.
	* sizes.c (diskfs_truncate): Call diskfs_check_readonly.
	(diskfs_grow): Likewise.
	* hyper.c (diskfs_set_hypermetadata): If CLEAN is not set, make
	sure we clear the clean bit on disk.  Always call sync_disk (with
	appropriate WAIT).
	(diskfs_readonly_changed): Don't do set_hypermetadata here.
	(copy_sblock): Don't track clean state here.

	* pager.c (diskfs_shutdown_pager): Don't shutdown DISKPAGER ever,
 	just sync it instead.

Sat Jun 22 17:45:34 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* main.c (diskfs_get_options): New function.
	(options): Make const.

Fri Jun 21 01:32:09 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* main.c (parse_opt): Handle runtime invalid selection of 4.2 mode.
	Save select mode until we're done to correctly deal with external
	errors at runtime.
	(startup_parents, startup_argp, runtime_parents, runtime_argp):
	New variables.
	(main): Argp vars made global.
	(argp_parents): diskfs_device_startup_argp -->
	&diskfs_std_device_startup_argp.

Sat Jun 15 13:57:27 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* main.c (options): New variable.
	(parse_opt): New function.
	(main): Parse ufs-specific options too.
	<string.h>: New include.

Fri May 10 09:29:03 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:54:13 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

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

	* inode.c (diskfs_set_statfs): Use and fill in new statfs
 	structure.

Mon May  6 14:23:54 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* main.c (ufs_version): Upgrade to 0.0.

Fri May  3 09:15:33 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* sizes.c (block_extended): Rewrite code that moves pages
	to be more efficient, and not deadlock too, using unlocked 
	pagein permission feature (read "hack").  Return value 
	now indicates whether we expect a sync.
	(diskfs_grow): If a call to block_extended returns nonzero,
	then sync the file before returning.
	* pager.c (diskfs_get_filemap): Initialize
	UPI->allow_unlocked_pagein and UPI->unlocked_pagein_length.
	(unlocked_pagein_lock): New variable.
	(find_address): New parameter `isread'; all callers changed.
	If ISREAD and we are in the unlocked pagein region, don't
	attempt to acquire NP->dn->allocptrlock.
	* ufs.h (struct user_pager_info): New members
 	`allow_unlocked_pagein' and `unlocked_pagein_length'.
	(unlocked_pagein_lock): New variable.

Thu May  2 10:56:10 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* sizes.c (offer_data): Offer pages at ADDR each time through the
 	loop, not the same page over and over.
	(block_extended): When moving data, sync in-core pager both before
	reading from disk and after providing data to kernel.
	(diskfs_grow): Always call block_extended or offer_data before
	adjusting block pointer.

Tue Apr 30 13:38:42 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* sizes.c (diskfs_grow): In last offer_data, don't offer a block
 	number as an address.

Fri Apr 26 15:35:53 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

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

Wed Apr 24 14:05:48 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* dir.h (DIRECT_NAMLEN) [! LITTLE_ENDIAN]: Deal correctly with the
 	case where it was written on a little endian machine without the
 	extension.
	(DIRECT_NAMLEN) [LITTLE_ENDIAN]: Deal with case correctly where it
	was written without the extension on a big endian machine. 
	* dir.c (dirscanblock): Use read/write_disk_entry when reading or
 	writing fields from directory entries.  
	(diskfs_direnter_hard): Likewise.
	(diskfs_dirremove_hard): Likewise.
	(diskfs_dirrewrite_hard): Likewise.
	(diskfs_get_directs): Likewise.
	(diskfs_dirempty): Likewise.
	(count_dirents): Likewise.

Tue Apr 23 11:28:42 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* dir.c (diskfs_dirempty): node_update -> diskfs_node_update.

	* hyper.c (swab_sblock, swab_csums): New functions.
	(get_hypermetadata): If this is a swapped filesystem, set swab_disk.
	Also swap csum and sblock after reading them.
	(diskfs_set_hypermetadata): If swab_disk, swap the csums back before
	writing them.
	(copy_sblock): If swab_disk, swap the sblock before writing it.
	* ufs.h (swab_disk): New variable.
	(swab_short, swab_long, swab_long_long): New functions.
	(read_disk_entry, write_disk_entry): New macros.
	* alloc.c (ffs_realloccg): Use read/write_disk_entry when
 	reading/writing on-disk inode fields.  
	* bmap.c (fetch_indir_spec): Likewise.  
	* inode.c (read_disknode): Likewise.
	(write_node): Likewise.
	(diskfs_set_translator): Likewise.
	(diskfs_get_translator): Likewise.
	(diskfs_S_file_get_storage_info): Likewise.
	* sizes.c (diskfs_truncate): Likewise.
	(diskfs_grow): Likewise.
	* pager.c (pager_unlock_page): Likewise.
	* bmap.c (fetch_indir_spec): Use read/write_disk_entry when
	reading/writing on-disk indirect blocks.
	* sizes.c (diskfs_truncate): Likewise.
	(indir_release): Likewise.
	(diskfs_grow): Likewise.
	* pager.c (pager_unlock_page): Likewise.
	* alloc.c: Include <string.h>
	(ffs_blkpref): Use read_disk_entry when reading from BAP array. 
	(swab_cg, read_cg, release_cg): New functions.
	(ffs_fragextend, ffs_alloccg, ffs_nodealloccg, ffs_blkfree,
	diskfs_free_node): Use new cg access functions. 
	
Thu Apr 18 14:50:30 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* sizes.c (diskfs_grow): New variable `pagerpt'.
	(offer_zeroes, block_extended): New functions.
	(diskfs_grow): In initializing newly allocated data disk blocks with
	zeroes, use less aggressive offer_zeroes instead of immediate
 	synchronous writes.  After ffs_realloccg succeeds, use
 	block_extended to handle the magic.  Get rid of old poke calls.
	* alloc.c (ffs_realloccg): If we are allocating a new block, don't
	actually free the old one here.
	* sizes.c (diskfs_grow): New variable `pagerpt'.
	(offer_zeroes, block_extended): New functions.
	(diskfs_grow): In initializing newly allocated data disk blocks
	with zeroes, use less aggressive offer_zeroes instead of immediate
	synchronous writes.   After ffs_realloccg succeeds, use
	block_extended to handle the magic.  Get rid of old poke calls.

Tue Apr 16 15:20:07 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

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

	* inode.c (diskfs_write_disknode): Only do sync if WAIT is set.

Thu Apr  4 16:39:22 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (diskfs_cached_lookup): Intialize NP->cache_id *after*
	NP exists.

Wed Apr  3 16:03:51 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* inode.c (diskfs_cached_lookup): Renamed from `iget'.  All
 	callers changed.  Initialize NP->cache_id.

Fri Mar 29 16:52:31 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* sizes.c (diskfs_truncate): Cast DI->di_shortlink to correct type
 	before adding a character count to it.

Mon Mar 25 13:08:10 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* dir.c (diskfs_null_dirstat): New function.

Fri Mar 22 23:43:53 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (read_symlink_hook): Only set NP's atime if !readonly.

Wed Mar 20 14:36:31 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* dir.c (diskfs_lookup_hard): Don't do initial or final permission
	checking here. 
	* dir.c (diskfs_dirrewrite_hard): Renamed from diskfs_dirrewrite.
  	No longer call modification tracking routines.
	(diskfs_dirremove_hard): Renamed from diskfs_dirremove.  No longer call
	modification tracking routines.
	(diskfs_direnter_hard): Renamed from diskfs_direnter.  No longer call
	modification tracking routines.
	(diskfs_lookup_hard): Renamed from diskfs_lookup.

Mon Mar 18 19:50:41 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* main.c (main): Pass new arg to argp_parse.

Mon Mar 18 12:33:06 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* pager.c (diskfs_max_user_pager_prot) [add_pager_max_prot]: 
	(a == b) ? 1 : 0   ====>   (a == b).

Fri Feb 23 15:27:05 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* hyper.c (get_hypermetadata): Use diskfs_device_arg in unclean msgs.

Wed Feb 21 05:57:12 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* hyper.c: Implement proper handling of the filesystem `clean bit'.
	(ufs_clean): New variable.
	(get_hypermetadata): Set it from the fs_clean flag.  If not clean,
 	complain and force read-only.  Complain when ignoring COMPAT_BSD42.
	(diskfs_set_hypermetadata): Set the clean flag in the superblock
 	when CLEAN and fs was clean to start with.
	(copy_sblock): Remove bogus clean flag frobnication.

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

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

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

	* ufs.h (diskpager, diskpagerport, disk_image): Variables removed.
	Include <hurd/diskfs-pager.h> instead.
	(sync_disk_blocks): Use `disk_pager' in place of `diskpager->p'.
	* pager.c (diskfs_shutdown_pager, diskfs_sync_everything): Use
	`disk_pager' in place of `diskpager->p'.
	(create_disk_pager): Rewritten using disk_pager_setup.
	* pokeloc.c (sync_disk): Use `disk_pager' in place of `diskpager->p'.
	* sizes.c (indir_release): Likewise.
	* main.c (diskfs_reload_global_state): Likewise.

Thu Jan  4 19:10:11 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* main.c (main): Don't map disk image here; create_disk_pager now
	does it.

	* hyper.c (get_hypermetadata, copy_sblock): Don't put
 	diskfs_catch_exception () inside assert, bonehead!  Use
 	assert_perror on a variable of its result.

Mon Jan  1 16:38:14 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* pager.c (pager_unlock_page): When allocating block in direct
 	array, clear it synchronously just like we do when it goes in the
 	indirect array.

Thu Nov  9 14:01:30 1995  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* dir.c (struct dirstat): New member `nbytes'.
	(dirscanblock): If DS->type is COMPRESS, still look
	for TAKE/SHRINK possibilities.  Also, if it's COMPRESS,
	still look to see if the current block can be compressed
	with fewer byte copies.

Sun Nov  5 02:08:38 1995  Miles Bader  <miles@gnu.ai.mit.edu>

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

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

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

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

	* pager.c (diskfs_max_user_pager_prot): Return what we discovered,
	instead of 1.

	* dir.c (diskfs_lookup, diskfs_dirempty): Give diskfs_get_filemap
	a protection arg.
	* sizes.c (diskfs_truncate, diskfs_grow): Ditto.

	* hyper.c (diskfs_readonly_changed): Give the 2nd arg to
 	vm_protect an appropiate type.

	* pager.c (diskfs_max_user_pager_prot): Stop iterating early if poss.

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

	* ufs.h (struct user_pager_info): Add max_prot field.
	* pager.c (diskfs_get_filemap): Add PROT parameter, & use it.
	(diskfs_pager_users): Split out block_caching & enable_caching.
	(block_caching, enable_caching): New function.
	(diskfs_max_user_pager_prot): New function.

	* main.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.  Clear SBLOCK_DIRTY if readonly.

	* inode.c (read_disknode): Bother to set the allocsize field.

	* ufs.h (struct rwlock): Structure deleted.
	(rwlock_init, rwlock_reader_unlock, rwlock_reader_lock,
 	rwlock_writer_lock, rwlock_writer_unlock): Functions deleted.


Tue Oct 17 14:49:43 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* inode.c (diskfs_node_reload): New function.
	(iget): Move allocsize setting into read_disknode.
	* pager.c (flush_node_pager): New function.
	* ufs.h (zeroblock, sblock, csum): Declare extern.
	(flush_node_pager, flush_pokes): New declarations.
	* pokeloc.c (flush_pokes): New function.
	* hyper.c (diskfs_readonly_changed): New function.
	(get_hypermetadata): Move compat_mode futzing & disk size
	validation here from main.
	(zeroblock, sblock, csum): Define (were common).
	(get_hypermetadata): Only allocate SBLOCK if not already done.
	Deallocate any old ZEROBLOCK and CSUM storage.
	(diskfs_readonly_changed): New function.
	* main.c (main): Move stuff into get_hypermetadata.
	Writable init code moved to diskfs_readonly_changed.
	(diskfs_reload_global_state): New function.

Fri Oct 13 15:03:37 1995  Miles Bader  <miles@gnu.ai.mit.edu>

	* main.c (main): Use new handy diskfs routines and get rid of
	tons of junk.  Main should be almost all ufs-specific now.
	(USAGE, usage, SHORT_OPTS, long_opts, parse_opt, trans_parse_arg): RIP.
	(printf_lock): Initialize.

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

	* pager.c (pager_unlock_page, pager_write_page, pager_read_page):
	Use diskfs_device_{read,write}_sync instead of dev_{read,write}_sync.
	* hyper.c (diskfs_set_hypermetadata): Ditto.
	* sizes.c (diskfs_grow): Ditto.
	* pager.c (pager_report_extent): Calculate the pager size.
	* ufs.h (dev_read_sync, dev_write_sync, dev_write, diskpagersize):
	Decls removed.

	* Makefile (SRCS): Remove devio.c.
	* ufs.h (ufs_device, ufs_device_name): Variables removed.
	* inode.c (diskfs_S_file_get_storage_info): Use DISKFS_DEVICE
	instead of UFS_DEVICE, and DISKFS_DEVICE_NAME instead of
	UFS_DEVICE_NAME.

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

	* main.c (diskfs_init_completed): Function deleted (now in libdiskfs).
	(thread_cancel): Function deleted.

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

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

Wed Oct  4 17:21:33 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.

	* main.c (parse_opt): Rearrange slightly.

Tue Sep 26 11:54:35 1995  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* inode.c: Include <netinet/in.h>.
	(diskfs_S_file_get_storage_info): New function.
	* main.c (main): Delete var `devname'.  Use `ufs_device_name'
 	throughout instead.
	* ufs.h (ufs_device_name): New var.

Fri Sep 22 13:22:42 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* hyper.c (get_hypermetadata): Use %Zd format for result of sizeof.

Tue Sep 19 13:41:46 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* Makefile (LDFLAGS): New variable.

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

Wed Sep  6 11:01:50 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.

Mon Aug 28 17:07:36 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* Makefile (ufs): Depend on ../libshouldbeinlibc/libshouldbeinlibc.a.

Fri Aug 25 17:14:09 1995  Michael I. Bushnell, p/BSG  <mib@duality.gnu.ai.mit.edu>

	* sizes.c (diskfs_truncate): When freeing direct blocks mentioned
	in a single indirect block, or single indirect blocks mentioned in
	a double, only call the free routine (ffs_blkfree or
	indir_release, respectively) if the block is actually allocated.

Wed Aug 23 12:24:07 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* Makefile (ufs): Add explicit dependencies.
	(HURDLIBS, LDFLAGS, REMHDRS): Removed.
	Rules associated with ../lib removed.

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

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

Mon Jul 17 14:35:25 1995  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* pager.c (thread_function): Don't have any global timeout here;
 	we don't use it anyhow.

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

	* Makefile: Removed dependencies that are now automatically
 	generated.

Mon Jun 26 20:17:42 1995  Michael I Bushnell  <mib@duality.gnu.ai.mit.edu>

	* pager.c: Include <unistd.h>.
	(diskfs_pager_users): New function.

Thu Jun 22 11:41:04 1995  Michael I Bushnell  <mib@duality.gnu.ai.mit.edu>

	* pager.c (thread_function): Move thread_function to be non-local,
	of course, because it needs to live even after create_disk_pager
	returns.

	* main.c (thread_cancel): New function (HACK).

	* Makefile (HURDLIBS): Add libihash.

	* main.c (main): Have main thread exit when done instead of
	calling a diskfs function.

Wed Jun 21 12:20:01 1995  Michael I Bushnell  <mib@duality.gnu.ai.mit.edu>

	* ufs.h (user_pager_info): Removed members next and prevp.
	* pager.c (pager_clear_user_data): Don't maintain pager linked
	list.
	(diskfs_get_filemap): Don't maintain pager linked list.
	(pager_dropweak): New function.
	(pager_traverse): Delete function.
	(diskfs_shutdown_pager): Use ports_bucket_iterate instead of
	pager_traverse.
	(diskfs_sync_everything): Likewise.

	* pager.c (pager_bucket): New variable.
	(create_disk_pager): Provide pager_bucket in call to pager_create.
	(diskfs_get_filemap): Likewise.
	(diskfs_file_update): Use ports reference calls directly instead
	of pager wrappers.
	(drop_pager_softrefs): Likewise.
	(allow_pager_softrefs): Likewise.
	(pager_traverse): Likewise.
	(create_disk_pager): Initialize pager_bucket here and fork off
	service thread for pager ports.

	* sizes.c (diskfs_truncate): Likewise.

	* dir.c (diskfs_lookup): Provide initialization for BUFLEN.
	(diskfs_direnter): Move assignment out of if test.

Tue Jun 20 11:48:06 1995  Michael I Bushnell  <mib@duality.gnu.ai.mit.edu>

	* sizes.c (diskfs_grow): Provide initialization of POKE_OFF.
	* alloc.c (ffs_realloccg): Remove assignment from if tests.
	* sizes.c (diskfs_truncate): Likewise.
	* bmap.c (fetch_indir_spec): Likewise.

Mon Jun 19 21:17:21 1995  Michael I Bushnell  <mib@duality.gnu.ai.mit.edu>

	* inode.c (diskfs_node_iterate): New function.
	(write_all_disknodes): Use it.

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

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

Sat May 20 00:17:30 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* main.c (trans_parse_args): Use options_parse &
	diskfs_standard_startup_options to parse our translator options.
	(usage): New function.
	(parse_opt): New function.

	* Makefile (CPPFLAGS): Add -I../lib, to get include lib include files,
	and $(CPPFLAGS-$(notdir $<)) to get file-specific cpp options.
	Add a vpath for %.c to ../lib, so we can use source files from there.

Mon May 15 13:14:48 1995  Michael I Bushnell  <mib@duality.gnu.ai.mit.edu>

	* pager.c (pager_clear_user_data): Doc fix.

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

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

Mon May  8 08:43:43 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* dir.c (diskfs_lookup): When looping back to try_again: because
	we're looking up "..", be sure and trash the mapping we made of
	the directory's pager -- otherwise the reference to the pager
	never gets dropped and we can never free the node.

	* dir.c (diskfs_lookup): ds->type was being compared to LOOKING, which
	value it can never have.  Compare ds->stat against LOOKING instead.

	* pager.c (pager_clear_user_data): Don't die when called on the
	disk pager.

	* inode.c (write_all_disknodes): Fix typo `alloc' --> `alloca'.

Tue May  2 11:59:09 1995  Michael I Bushnell  <mib@duality.gnu.ai.mit.edu>

	* pager.c (pager_clear_user_data): Acquire pagerlistlock around
	modifications to UPI->next/prevp list structure.

Fri Apr 28 19:02:05 1995  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* inode.c (write_all_disknodes): We have to really lock the nodes
	around the calls to diskfs_set_node_times and write_node; this in
	turn forces us to have real refereces.

Thu Apr 13 16:36:57 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* main.c (main): Don't abort if a std file descriptor is already open.

Tue Apr  4 20:08:25 1995  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* inode.c (diskfs_set_translator): When freeing passive
	translator, account for blocks freed in NP->dn_stat.st_blocks.

Fri Mar 31 13:43:27 1995  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* sizes.c (diskfs_truncate): Don't acquire writer lock on
	NP->dn->allocptrlock until after forcing delayed copies through;
	otherwise the pageins will deadlock attempting to get a reader
	lock to service them.  This is safe, because we only need
	NP->allocsize here, and that can't change as long as we hold
	NP->lock.

Mon Mar 20 13:58:44 1995  Michael I Bushnell  <mib@duality.gnu.ai.mit.edu>

	* consts.c (diskfs_synchronous): New variable.

Fri Mar 17 14:31:04 1995  Michael I Bushnell  <mib@duality.gnu.ai.mit.edu>

	* alloc.c (ffs_clusteracct): Make static.
	(alloc_sync): New function.
	(ffs_alloc): Call alloc_sync.
	(ffs_realloccg): Likewise.
	(diskfs_alloc_node): Likewise.
	(ffs_blkfree): Likewise.
	(diskfs_free_node): Likewise.

Sat Jan 28 14:59:26 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* Makefile (OBJS): Remove reference to libc's devstream.o.

Fri Nov 11 11:45:38 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* hyper.c (diskfs_set_hypermetadata): Always use dev_write_sync to
	avoid device_write bug that says you can't modify the buffer until
	device_write returns.  Also remember to deallocate BUF.

Thu Nov 10 13:27:09 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* main.c (main): Issue decent prompt.

	* hyper.c (diskfs_set_hypermetadata): Copy CSUM into a
	page-aligned page-sized buffer for disk write to avoid inane
	kernel bug.

Wed Nov  9 05:43:14 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* main.c (main): Behave more reasonably if we can't open DEVNAME.

Tue Nov  8 00:03:20 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* pager.c (pager_write_page): Use %p for printing PAGER.

	* ufs.h: Declare copy_sblock.

Wed Nov  2 16:06:10 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* hyper.c (copy_sblock): Don't copy csum here.
	(diskfs_set_hypermetadata): Write csum directly to disk here.

Thu Oct 27 20:58:08 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* dir.c (diskfs_lookup): diskfs_get_filemap returns a send right,
	so don't create an additional one here.
	(diskfs_dirempty): Likewise.
	* sizes.c (diskfs_truncate): Likewise.
	(diskfs_grow): Likewise.

Tue Oct 25 12:49:41 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* hyper.c (copy_sblock): Call record_poke for csum and superblock
	after modifying them.

	* pager.c (diskfs_shutdown_pager): Call copy_sblock.
	(diskfs_sync_everything): Likewise.

	* alloc.c (ffs_fragextend): Call record_poke for CG after
	modifying it.  Also set CSUM_DIRTY and SBLOCK_DIRTY.
	(ffs_alloccg): Likewise.
	(ffs_alloccgblk): Likewise.
	(ffs_nodealloccg): Likewise.
	(ffs_blkfree): Likewise.
	(diskfs_free_node): Likewise.

Fri Oct  7 01:32:56 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* main.c (diskfs_init_completed): Don't call _hurd_proc_init.
	(saved_argv): Variable removed.
	(main): Don't set saved_argv.  Pass ARGV to diskfs_start_bootstrap.

Wed Oct  5 22:18:46 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* inode.c (read_disknode): If we are the bootstrap filesystem,
	then getpid changes once proc starts up.  So only call getpid
	once, thus not allowing st_dev values to mysteriously change.

Wed Oct  5 12:56:53 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* alloc.c (diskfs_alloc_node): Abort if free inode has
	translator attached.

Tue Oct  4 18:33:35 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* pager.c (pager_unlock_page): Call diskfs_catch_exception.

Tue Oct  4 00:16:04 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* inode.c (diskfs_lost_hardrefs): Comment out body.
	* ufs.h (node2pagelock): New variable.
	* pager.c (node2pagelock): Initialize.
	(diskfs_get_filemap): Don't let node hold a reference to the pager.
	(pager_clear_user_data): Acquire node2pagelock and clear
	the node's reference to the pager.
	(diskfs_file_update): Hold node2pagelock for reference
	of NP->dn->fileinfo.
	(drop_pager_softrefs): Likewise.
	(allow_pager_softrefs): Likewise.
	(diskfs_get_filemap): Likewise.
	* sizes.c (diskfs_truncate): Likewise.

	* Makefile (SRCS): Added pokeloc.c.

Mon Oct  3 15:03:38 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* sizes.c (diskfs_truncate): Rewritten.

	* bmap.c (fetch_indir_spec): Initialize OFFSET values to -2,
	meaning that the entry is not needed.  If LBN is negative,
	then don't set values for the data block.

	* inode.c (write_node): Call record_poke after writing
	dinode.
	(create_symlink_hook): Likewise.
	(diskfs_set_translator): Likewise.
	* pager.c (pager_unlock_page): Likewise.
	* sizes.c (diskfs_truncate): Likewise.
	* pager.c (pager_unlock_page): Call record_poke after writing
	indirect block.
	* sizes.c (diskfs_grow): Likewise.
	(diskfs_grow): Likewise.
	* pager.c (diskfs_sync_everything) [sync_one]: If this is the
	disk pager, call sync_disk instead.
	* pokeloc.c: New file.

Fri Sep 30 11:25:36 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* dir.h: Delete DT_* definitions; they are now in <dirent.h>.
	* dir.c (diskfs_get_directs): Set USERP->d_type as DT_UNKNOWN.
	When the bugs in the type fields are fixed (dealing with
	multiple links and mode changes) then this can actually return
	the value.

Thu Sep 29 17:16:58 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* main.c (main): Test getpid()>0 to decide we are a normal
	translator instead of the boot fs.  Fetch bootstrap port after
	possibly calling diskfs_parse_bootargs, not before.

Tue Sep 27 15:24:58 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* sizes.c (diskfs_grow) [computation of newallocsize]: Last block
	number is one less than the total number of blocks.

Tue Sep 27 11:58:44 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* bmap.c (fetch_indir_spec): Single indirect block pointer is
	in the INDIR_SINGLE slot, not the INDIR_DOUBLE slot.

Mon Sep 26 20:47:30 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* Makefile (SRCS): Added bmap.c.

	* main.c (main): Don't call pager_init.

	* inode.c (diskfs_get_translator): Repair to read translator
	correctly.

	* sizes.c (diskfs_grow): Compute block numbers in a more clean
	(and confidently correct) fashion.
	(diskfs_truncate): Set NP->allocsize from a properly rounded
	value.

Mon Sep 26 12:50:38 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* inode.c (diskfs_lost_hardrefs): "Know" that a pager starts
	with a portinfo; we don't actually have access to the pager
	struct here.

Fri Sep 23 14:21:55 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	[ Continuing yesterday's changes. ]
	* ufs.h (struct dirty_indir): New type.
	(struct disknode): New member `dirty'.
	* inode.c (iget): Initialize DN->dirty.
	* bmap.c (mark_indir_dirty): New function.
	* pager.c (pager_unlock_page): Call mark_indir_dirty before
	writing into indirect blocks.
	(diskfs_file_update): Sync indirect blocks here.
	(pager_traverse): Simplify; do FILE_DATA and diskpager.
	(pager_init): Removed function.
	(create_disk_pager): New function.
	* sizes.c: Completely rewritten.
	* main.c (main): Spawn first thread sooner so we can
	map and look at the disk image.
	* hyper.c (get_hypermetadata): Moved firewall asserts
	here from pager_init.

Thu Sep 22 11:28:46 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	[This long series of changes deletes the DINODE, CG, SINDIR,
	and DINDIR pagers and adds a new pager type DISK.]
	* ufs.h (struct disknode) Removed DINLOCK, SINLOCK, and
        SININFO members.  New member ALLOCPTRLOCK renamed from DATALOCK.
	Removed SINLOC, DINLOC, SINLOCLEN, and DINLOCLEN.
	(struct user_pager_info) [enum pager_type]: Removed types
	DINODE, CG, SINDIR and DINDIR; added type DISK.
	(dinpager, dinodepager, cgpager): Deleted vars.
	(diskpager): New var.
	(dinmaplock, sinmaplock, pagernplock): Deleted vars.
	(sblock_dirty, csum_dirty, cgs, dinodes): Deleted vars.
	(fsaddr): New macro.
	(dino, indir_block, cg_locate): New inline functions.
	(sync_disk_blocks, sync_dinode): New inline functions.
	(struct iblock_spec): New type.
	* pager.c (dinport, dinodeport, cgport, sinlist): Deleted vars.
	(filepagerlist): Renamed from filelist.
	(pagernplock): Deleted variable.
	(find_address): Removed switch; support only DISK and FILE_DATA.
	(pager_report_extent): Likewise.
	(pager_unlock_page): Removed switch.  Return without comment for
	DISK; allocate indirect blocks as necessary right here for
	FILE_DATA.
	(sin_map, sin_remap, sin_unmap, din_map, din_unmap): Deleted
	functions.
	(indir_alloc, sync_dinode): Deleted functions.
	(enqueue_pager, dequeue_pager): Deleted functions.
	(diskfs_file_update): No longer lock pagernplock; nothing
	to do with sininfo.
	(drop_pager_softrefs): Likewise.
	(allow_pager_softrefs): Likewise.
	(diskfs_get_filemap): Put pager on filepagerlist right here
	instead of through pager_enqueue.
	(pager_clear_user_data): Likewise, mutatis mutandis.
	* main.c (main): Call create_disk_pager and then map the
	entire disk into disk_image.
	* hyper.c (get_hypermetadata): Use bcopy instead of dev_read_sync.
	(diskfs_set_hypermetadata): NOP out function.
	(copy_sblock): New function, substance of code is from old
	diskfs_set_hypermetadata.
	* inode.c (iget): Don't initialize deleted disknode fields.
	(diskfs_node_norefs): Don't verify that deleted disknode
	fields are not set.
	(read_disknode): Get dinode from DINO, not DINODES array.
	(write_node): Likewise.
	(create_symlink_hook): Likewise.
	(read_symlink_hook): Likewise.
	(diskfs_set_translator): Likewise.
	(diskfs_get_translator): Likewise.
	(diskfs_node_translated): Likewise.
	* alloc.c (ffs_realloccg): Likewise.
	(ffs_fragextend): Use cg_locate instead of cgs array.
	(ffs_alloccg): Likewise.
	(ffs_nodealloccg): Likewise.
	(ffs_blkfree): Likewise.
	(diskfs_free_node): Likewise.
	* inode.c (diskfs_set_translator): Use bcopy and sync_disk_blocks
	instead of dev_write_sync.
	(diskfs_get_translator): Likewise, mutatis mutandis.
	(read_disknode): Initialize NP->istranslated.
	(diskfs_set_translator): Set/clear NP->istranslated as appropriate.
	(diskfs_node_translated): Removed function.
	* bmap.c: New file.

	[This improves the RWLOCK mechanism and makes it more
	orthogonal.  It should probably be moved into a library.]
	* ufs.h (struct rwlock): Added MASTER and WAKEUP members.
	(struct disknode): Removed RWLOCK_MASTER and RWLOCK_WAKEUP
	fields.
	(rwlock_reader_lock): Ommitted arg DN; use new MASTER and WAKEUP
	members inside LOCK instead.
	(rwlock_writer_lock): Likewise.
	(rwlock_reader_unlock): Likewise.
	(rwlock_init): Initialize new MASTER and WAKEUP fields.
	* inode.c (iget): Don't deal with RWLOCK_MASTER and RWLOCK_WAKEUP.
	* pager.c (find_address): Deleted arg DNP.  Only pass one
	arg to rwlock functions.
	(pager_read_page): Deleted var DN; only pass one arg to rwlock
	functions.
	(pager_write_page): Likewise.

Wed Sep 21 00:26:25 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* pager.c (allow_pager_softrefs): Unlock PAGERNPLOCK when
	we're done with it.
	(sin_map): Hold PAGERNPLOCK all the way until we're done
	with the sininfo pointer.
	(pagernplock): No longer static.
	* ufs.h (pagernplock): Declare here.

	* sizes.c (diskfs_grow): Don't call diskfs_file_update here.
	This was done to prevent too much dirty data from accumulating
	and then overwhelming the pager later.  But that's really the
	pager's responsibility.

	* ufs.h (struct disknode): New members `dinloclen' and `sinloclen'.
	* inode.c (iget): Initialize DN->dinloclen and DN->sinloclen.
	(diskfs_node_norefs): Verify that DN->dinloclen and DN->sinloclen
	are both zero.
	* pager.c (find_address) [SINDIR]: Verify that reference is
	within bounds of NP->dn->dinloc.
	(pager_unlock_page) [SINDIR]: Likewise.
	(din_map): Set NP->dn->dinloclen.
	(din_unmap): Clear NP->dn->dinloclen.
	(find_address) [FILE_DATA]: Verify that reference is within
	bounds of NP->dn->sinloc.
	(pager_unlock_page) [FILE_DATE]: Likewise.
	(sin_map): Set NP->dn->sinloclen.
	(sin_remap): Reset NP->dn->sinloclen.
	(sin_unmap): Clean NP->dn->sinloclen.

	* pager.c (pager_write_page): Flush stdout after printf.
	(pager_unlock_page) [FILE_DATA]: Likewise.

	* sizes.c (diskfs_truncate): In all references to sinloc and
	dinloc arrays, verify that references are within allocated bounds.
	(diskfs_grow): Likewise.
	(sindir_drop): Likewise.

	* pager.c: Create new mapping with extent NEWSIZE, not SIZE (which
	was the old size of the mapping).

Tue Sep 20 15:51:35 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* pager.c (pager_report_extent) [SINDIR]: Remove erroneous extra
	division by block size.
	(sin_remap): Likewise.

Mon Sep 19 17:34:11 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* inode.c (create_symlink_hook): Write assert test correctly.

	* dir.c (diskfs_direnter) [EXTEND]: Reference file size only
	*once*; don't rely on the behavior if diskfs_grow vis a vis
	file size.

Fri Sep 16 10:29:42 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* dir.c (dirscanblock): Compute offset correctly for mangled
	entry notice.

	* dir.c (diskfs_direnter) [EXTEND]: Reference file size only
	once before calling diskfs_grow in case diskfs_grow actually
	increases the size.

	* inode.c (diskfs_set_statfs): Set fsid from getpid.
	(read_disknode): Likewise.

	* dir.h (struct directory_entry): Renamed from struct direct.
	* dir.c: All uses of struct direct changed to use
	struct directory_entry.
	(diskfs_get_directs): New var `userp'.  Copy from *ENTRYP into
	it (set at DATAP) more cleanly.

Mon Sep 12 11:30:48 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* hyper.c (diskfs_set_hypermetadata): Don't frob clean and dirty
	bits if we are readonly.

Sat Sep 10 11:41:06 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* main.c (main): When started up as a passive translator,
	open fds 0, 1, and 2 on /dev/console for debugging messages.
	Call diskfs_init_diskfs with no args; after warp_root, call
	diskfs_startup_diskfs on BOOTSTRAP.  Compare BOOTSTRAP to
	MACH_PORT_NULL instead of zero.

Fri Sep  9 13:02:33 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* main.c (trans_parse_args): Fix and enable.

Tue Sep  6 11:29:55 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* inode.c (iget): Remove old assert test that checked for bad
	inode block allocations.

Thu Sep  1 11:39:12 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* tables.c: Don't include "ufs.h"; include <sys/types.h>.  Then
	this file can be used unmodified by fsck.

Tue Aug 30 13:36:37 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* inode.c (diskfs_set_translator): ffs_blkfree doesn't have
	a return value.

Mon Aug 29 12:49:17 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* inode.c (diskfs_set_translator): If NAMELEN is zero, then
	make the node have no translator.

Fri Aug 26 12:28:20 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* inode.c (read_disknode): 4.4 fsck sometimes sets the author
	field to -1 to mean "ignore old uid location"; take that to mean
	"author == uid".
	(diskfs_set_translator): If we are allocating a new block for
	the translator, then account for it in st_blocks.

Thu Aug 18 12:41:12 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* Makefile (HURDLIBS): Use short version.

	* alloc.c (diskfs_alloc_node): Bother to set *NPP before
	returning.

Tue Aug 16 10:48:04 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* Makefile (LDFLAGS): New variable.

Fri Aug  5 15:51:09 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* dir.c (diskfs_direnter) [EXTEND]: Crash if the entry won't
	fit in the new block.
	(diskfs_lookup): Return ENAMETOOLONG if the name is bigger than
	MAXNAMLEN.

	* dir.c (diskfs_get_directs): Set USERD->d_reclen correctly.

Fri Jul 22 15:12:35 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* Makefile: Rewritten in accord with new scheme.

Wed Jul 20 13:28:38 1994  Michael I Bushnell  <mib@geech.gnu.ai.mit.edu>

	* main.c (main): Don't set diskfs_dotdot_file.

Tue Jul 19 21:51:54 1994  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* ufs.h: Removed defns of u_quad_t, quad_t; now in <sys/types.h>.
	Removed defn of struct timespec; now in <sys/time.h>.

Tue Jul 19 12:47:31 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* main.c (main): Deleted var `diskfs_dotdot_file'.
	(trans_parse_args): Don't set diskfs_dotdot_file; don't expect
	dotdot from fsys_getroot.

	* Makefile (LDFLAGS): Moved to rule for `ufs' and commented out.
	(ufs): Don't use variable $(link) anymore.

Mon Jul 18 14:55:17 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* dir.c (diskfs_get_directs): Return data to user in old format.
	Add new code for new format, maintaining compatibility correctly,
	but comment it out until the library is ready.

	* hyper.c (diskfs_set_hypermetadata): If we presumed to
	set new values of fs_maxfilesize, fs_qbmask, and fs_qfmask,
	then restore the originals before writing out the superblock.

	* pager.c (diskfs_get_filemap): Test should be S_ISLNK, not
	S_ISSOCK.

	* hyper.c (get_hypermetadata): Set new constants in filesystems
	which don't have them yet.
	(get_hypermetadata): Cast MAXSYMLINKLEN to long to avoid
	converting sblock->fs_maxsymlinklen into an unsigned.

	* subr.c (scanc, skipc): New functions.
	(ffs_setblock): Use assert instead of panic.

	* inode.c (read_disknode): Set old stat structure until the header
	file gets changed.

Fri Jul 15 12:07:15 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* sizes.c: Include <string.h> for bzero.
	* fs.h (blksize): Comment out dblksize macro.  In blksize
	macro, use NP->allocsize instead of IP->i_size.

	* dinode.h (INDIR_SINGLE, INDIR_DOUBLE, INDIR_TRIPLE): New macros.

	* inode.c (read_disknode, write_node): Use new stat and dinode
	fields for times.

	* ufs.h: Change `nextgennumber' to be `u_long' instead of int.
	Change prototypes of some alloc.c functions.
	* alloc.c (ffs_alloc): Declare to return error_t.
	(ffs_realloccg): Likewise.
	(ffs_hashalloc, ffs_alloccg, ffs_fragextend, ffs_alloccg,
	ffs_dirpref, ffs_nodealloccg, ffs_allccgblk, ffs_mapsearch,
	ffs_clusteracct): Provide forward declarations.
	(ffs_realloccg): Use printf instead of log.
	Make BPREF volatile for setjmp safety.
	(diskfs_alloc_node): Use diskfs global variable instead of TIME.
	(ffs_nodealloccg): Likewise.
	(ffs_blkfree): Likewise.
	(diskfs_free_node): Likewise.
	(ffs_blkfree, ffs_clusteracct): Declare as void.
	(ffs_alloccg, ffs_nodealloccg): Declare as u_long.

	* ufs.h: Change prototypes of some subr.c functions.
	* subr.c (ffs_isblock): Use assert instead of panic.
	(ffs_clrblock): Likewise.

	* hyper.c: Include "dinode.h".

	* dinode.h (LINK_MAX): New macro, from BSD sys/sys/syslimits.h.
	* fs.h (MAXBSIZE, MAXFRAG): New macros, from BSD sys/sys/param.h.

	* hyper.c (get_hypermetadata): Provide first arg in call to
	fsbtodb.
	(diskfs_set_hypermetadata): Likewise.
	* inode.c (diskfs_set_translator): Likewise.
	(diskfs_get_translator): Likewise.
	* pager.c (find_address): Likewise.
	(indir_alloc): Likewise.
	* inode.c (iget): Provide first arg in call to lblkno.
	* sizes.c (diskfs_truncate): Likewise.
	* pager.c (find_address): Likewise.
	* sizes.c (diskfs_grow): Likewise.
	* inode.c (iget): Provide first arg in call to fragroundup.
	* sizes.c (diskfs_trucate): Likewise.
	* sizes.c (diskfs_grow): Likewise.
	* inode.c (iget): Provide first arg in call to blkroundup.
	* pager.c (pager_unlock_page): Likewise.
	* sizes.c (diskfs_truncate): Likewise.
	* sizes.c (diskfs_grow): Likewise.
	* pager.c (find_address): Provide first arg in call to cgtod.
	* pager.c (find_address): Provide first arg in call to cgimin.
	* pager.c (find_address): Provide first arg in call to blktofrags.
	* pager.c (find_address): Provide first arg in call to blkoff.
	* sizes.c (diskfs_truncate): Likewise.
	* sizes.c (diskfs_grow): Likewise.
	* sizes.c (diskfs_truncate): Provide first arg in call to blksize.
	* sizes.c (diskfs_grow): Likewise.
	* sizes.c (diskfs_truncate): Provide first arg in call to numfrags.

	* ufs.h: Added temporary declarations of `u_quad_t', `quad_t', and
	`struct timespec'.

	* pager.c (diskfs_get_filemap): Make sure that this is
	a kind of node that can be validly read.

	* inode.c (create_symlink_hook): Renamed from symlink_hook.
	(read_symlink_hook): New function.
	(diskfs_read_symlink_hook): Initialize.

Thu Jul 14 12:23:45 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* alloc.c: New from 4.4 BSD; BSD version `8.8  2/21/94'.
	Remove old includes; include "ufs.h", "fs.h", "dinode.h",
	and <stdio.h>.  Replace panics with asserts and comment out
	uprintfs.  Use prototypes throughout.  Replace calls
	to ffs_fserr with printf.
	(alloclock): New variable.
	(ffs_alloc): Variable struct inode *IP is now struct node *NP;
	refer to it appropriately.  Initialize FS to sblock.
	Lock alloclock around actual allocation steps.  Reverse order
	of BNP and CRED arguments; declare CRED as a protid and use
	accordingly.  Permit CRED to be null.
	(ffs_realloccg): Variable struct inode *IP is now struct node *NP;
	refer to it accordingly.  Comment out U*x buffer management code.
	Lock alloclock around actual allocation steps.  Initialize FS
	from sblock.  Declare CRED as a protid and use it accordingly.
	Change BUF arg to PBN (physical block number); return new block
	there.
	(ffs_reallocblks): Comment out.
	(diskfs_alloc_node): Renamed from ialloc. Initialize FS from
	sblock.  Use calling sequence from <hurd/diskfs.h>.  Acquire
	alloclock aroud actual allocation steps.  Deleted vars
	`pip', `pvp' (use dir instead).  Use iget instead of VFS_VGET.
	Var struct inode *IP now struct node *NP.  Lock gennumberlock
	around frobbing of nextgennumber.
	(ffs_blkpref): Arg struct inode *ip is now struct node *np;
	refer to it accordingly.  Initialize FS to sblock.  Lock
	alloclock during actual work.  Use csum instead of fs_cs macro.
	(ffs_hashalloc): Arg struct inode *IP is now struct node *NP;
	use it accordingly.  Initialize FS from sblock.
	(ffs_fragextend): Arg struct inode *IP is now struct node *NP;
	use it accordingly.  Initialize FS from sblock.  Initialize
	CGP from cgs array; don't use bread.  Comment out calls to brelse
	and bdwrite.  Set CGP->time from diskfs global var.  Use csum
	instead of fs_cs macro.
	(ffs_alloccg): Arg struct inode *IP is now struct node *NP.
	Initialize FS from sblock.  Initialize CGP from cgs array;
	don't use bread.  Comment out calls to brelse and bdwrite.
	Set CGP->time from diskfs global var.  Use csum instead of
	fs_cs macro.
	(ffs_nodealloccg): Arg struct inode *IP is now struct node *NP.
	Initialize FS from sblock.  Initialize CGP from cgs array;
	don't use bread.  Comment out calls to brelse and bdwrite.  Use
	csum instead of fs_cs macro.
	(ffs_blkfree): Arg struct inode *IP is now struct node *NP.
	Initialize FS from sblock.  Initialize CGP from cgs array;
	don't use bread.  Comment out calls to brelse and bdwrite.  Use
	csum instead of fs_cs macro.
	(diskfs_free_node): Renamed from ffs_vfree.  Use calling
	sequence from <hurd/diskfs.h>.  Initialize FS from sblock.
	Deleted vars pip,pvp (use NP instead).  Initialize CGP from
	cgs array; don't use bread.  Comment out calls to brelse and
	bdwrite.  Use csum instead of fs_cs macro.
	(ffs_fserr): Commented out.
	(ffs_dirpref): Use csum instead of fs_cs macro.

	* ufs.h (ffs_alloc): Renamed from alloc; all callers changed.
	(ffs_blkfree): New arg NP; renamed from blkfree; all callers changed.
	(ffs_blkpref): Renamed from blkpref; all callers changed.
	(ffs_realloocg): Rename from realloccg; all callers changed.

	* fs.h: New from 4.4 BSD; BSD version `8.7  4/19/94'.
	(fs_cs): Don't use fs_csp; use global csum instead.

	* subr.c: New from 4.4 BSD; BSD version `8.2  9/21/93'.
	Remove old includes.  Include "ufs.h" and "fs.h".
	(ffs_blkatoff, ffs_checkoverlap): Comment out.

	* tables.c: New from 4.4 BSD; BSD version `8.1  6/11/93'.
	Don't include <param.h>; do include "ufs.h" and "fs.h".

	* dinode.h: New from 4.4 BSD; BSD version `8.3  1/21/94'.
	Remove oldids/inum union; replace with author.
	Renamed di_mode to be di_model; allocated di_modeh from spare.
	Allocate di_trans from spare.
	(di_inumber): Remove macro.
	* inode.c (read_disknode): Fetch uid and gid from new (long)
	fields in dinode unless we are the old inode format, in which
	case fetch them from the old fields.
	(write_node): Only set new uid and gid fields if we are not
	COMPAT_BSD4.  Set old fields if the superblock says to.
	(symlink_hook): New function.
	(diskfs_create_symlink_hook): Initialize.
	* sizes.c (diskfs_truncate): Deal with truncation of short
	symlink properly.

	* dir.h: New from 4.4 BSD; BSD version `8.2  1/21/94'.
	Substitute our version of DIRSIZ which uses the namelen.
	Comment out declarations of struct dirtemplate and struct
	odirtemplate.
	(DIRECT_TYPE, DIRECT_NAMLEN): New macros.
	* ufs.h (direct_symlink_extension): New variable.
	* hyper.c (get_hypermetadata): Set direct_symlink_extension.
	* dir.c (dirscanblock): Use DIRECT_NAMLEN instead of d_namlen.
	(diskfs_direnter): Likewise.
	(diskfs_dirempty): Likewise.
	(diskfs_get_directs): Likewise.
	(diskfs_direnter): Set d_type field of new slot if
	direct_symlink_extension is set.
	(diskfs_dirrewrite): Likewise.

	* ufs.h (compat_mode): New variable.
	* main.c (main): Set compat_mode to zero if we are the bootstrap
	filesystem.
	* inode.c (diskfs_set_translator): Return error if compat_mode
	is set.
	(write_node): Don't set GNU dinode field extensions unless
	compat_mode is COMPAT_GNU.

Mon Jul 11 18:14:26 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* dir.c (diskfs_get_directs): When copying entries into DATAP,
	set the d_reclen parameter of the copy to the minimum length
	(because that's all we use) rather than the size that it had
	in the directory itself.

Wed Jul  6 14:41:48 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* dir.c (dirscanblock): In main loop, initialize PREVOFF
	to zero, not BLOCKADDR.  Otherwise, the wrong value is
	stored into DS->prevoff and then diskfs_dirremove crashes.

Tue Jul  5 14:07:38 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* dinode.h: Include <endian.h> before test of BYTE_ORDER.

	* Makefile (TAGSLIBS): New variable.

Tue Jun 21 13:45:04 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* dir.c (diskfs_direnter): Update dirents of DP, not NP.

Mon Jun 20 16:43:48 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* dir.c (diskfs_direnter) [case SHRINK]: NEW should be set to
	OLDNEEDED past DS->entry, not to the start of the next entry.

	* dir.c (diskfs_direnter) [case EXTEND]: Cast in assignment
	to NEW needs proper scope.

	* inode.c (diskfs_node_norefs): Free dirents list of structure
	being deallocated.  Also add assert checks to make sure other
	state is already clean.

Thu Jun 16 11:38:17 1994  Michael I Bushnell  (mib@geech.gnu.ai.mit.edu)

	* dir.c (diskfs_dirempty): Map directory contents ourselves
	instead of using diskfs_node_rdwr.
	(struct dirstat): New structure to cache mapping between
	lookup and commit operation and avoid use of diskfs_node_rdwr.
	(diskfs_lookup): Map directory ourselves.  Keep mapping in
	DS if DS is nonzero and we might use it in direnter, dirremove,
	or dirrewrite.  Deallocate mapped buffer if we return some
	error (other than ENOENT), or if DS is zero, or if there is
	no possible commit operation to follow.  When setting DS->stat
	to EXTEND, do it the new way.
	(dirscanblock): Changed BLKOFF to be virtual address of mapped
	block and renamed it BLKADDR.  New arg IDX.  Use mapped block
	instead of calling diskfs_node_rdwr.  Set DS according to the new
	rules.
	(diskfs_direnter): Interpret new dirstat format.
	(diskfs_dirremove): Likewise.
	(diskfs_dirrewrite): Likewise.
	(diskfs_drop_dirstat): Deallocate cached mapping here.

	* dir.c (dirscanblock): When we find the node for type CREATE,
	invalidate DS by setting type to LOOKUP, not LOOKING.

	* dir.c (diskfs_direnter, diskfs_dirremove, diskfs_dirrewrite):
	Call diskfs_notice_dirchange when appropriate.

	* dir.c (diskfs_get_directs): Deal properly with case where
	BUFSIZ==0 and where NENTRIES==-1.

Wed Jun 15 16:40:12 1994  Michael I Bushnell  (mib@geech.gnu.ai.mit.edu)

	* main.c (main): Check device sector size and media size
	on startup.

Tue Jun 14 14:41:17 1994  Michael I Bushnell  (mib@geech.gnu.ai.mit.edu)

	* ufs.h (struct disknode) [dirents]: New member.
	* inode.c (iget): Initialize DN->dirents.
	* dir.c (diskfs_direnter, diskfs_dirremove): Keep track
	of dirents member.
	(dirscanblock): New var `nentries'; use it to count the
	number of directory entries in this block and set it if
	we end up scanning the entire block.
	(count_dirents): New function.
	(diskfs_get_directs): New function.

Mon Jun 13 13:50:00 1994  Michael I Bushnell  (mib@geech.gnu.ai.mit.edu)

	* ufs.h (sinmaplock, dinmaplock): New global vars.
	* inode.c (inode_init): Initialize sinmaplock and dinmaplock.
	* pager.c (find_address, pager_unlock_page): Protect use
	if dinloc array with dinmaplock.
	(din_map, din_unmap): Doc fix.
	(find_address, pager_unlock_page): Protect use of sinloc array
	with sinmaplock.
	(sin_map, sin_remap, sin_unmap): Doc fix.
	(pager_clear_user_data): Acquire sinmaplock and dinmaplock
	instead of NP->dn->datalock and NP->dn->sinlock respectively.

	* sizes.c (diskfs_truncate, diskfs_grow): Protect use of sinloc
	and sindir mapping functions with sinmaplock.
	(sindir_drop): Protect use of dinloc and dindir mapping functions
	with dinmaplock.

	* ufs.h (struct rwlock): New type.
	(struct disknode) [dinlock, sinlock, datalock]: Use read-write lock.
	Change comments so that these don't lock dinloc and sinloc anymore.
	[rwlock_master, rwlock_wakeup]: New members.
	(rwlock_reader_lock, rwlock_writer_lock, rwlock_reader_unlock,
	rwlock_writer_unlock, rwlock_init): New functions.
	* inode.c (iget): Initialize DN->rwlock_master and
	DN->rwlock_wakeup.  Change initialization of DN->dinlock,
	DN->sinlock, and DN->datalock to use rwlock_init.
	* pager.c (find_address): Lock NP->dn->dinlock, NP->dn->sinlock,
	and NP->dn->datalock with rwlock_reader_lock.  Change type of
	parameter NPLOCK to be a read-write lock.  New parm DNP.  Callers
	changed.
	(pager_read_page, pager_write_page): Change type of NPLOCK to be
	read-write lock; call rwlock_reader_unlock instead of
	mutex_unlock.  New variable DN.
	(pager_unlock_page): Use rwlock_writer_lock to lock
	NP->dn->dinlock, NP->dn->sinlock, and NP->dn->datalock.
	* sizes.c (diskfs_truncate, diskfs_grow): Change locks of DATALOCK
	field to use rwlock_writer_{un,}lock.
	(sindir_drop): Ditto for SINLOCK field.
	(dindir_drop): Ditto for DINLOCK field.

Mon Jun  6 19:23:26 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* sizes.c (diskfs_grow): After realloccg, zero new data (which I'm
	not sure is really necessary, but until I figure it out, this is
	safest).  Also poke old data (the latter only if the block has
	moved)--otherwise the kernel won't know to page it out to the new
	location.
	(poke_pages): When poking, be careful not to actually change the data.
	LEN should be end - start, not start - end.

Fri Jun  3 12:37:27 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* inode.c (iget): When we find the node in the table, acquire the
	mutex *after* incrementing NP->references and unlocking
	diskfs_node_refcnt_lock; otherwise we can deadlock against
	diskfs_nput.

Thu Jun  2 12:16:09 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* ufs.h (sblock_dirty, csum_dirty, alloclock): New global variables.
	* alloc.c (alloclock): Remove static keyword..
	* alloc.c (realloccg): Set sblock_dirty after changing sblock.
	(blkpref): Likewise.
	(fragextend): Likewise.
	(alloccg): Likewise.
	(alloccgblk): Likewise.
	(ialloccg): Likewise.
	(blkfree): Likewise.
	(diskfs_free_node): Likewise.
	* hyper.c (diskfs_set_hypermetadata): Likewise.
	* alloc.c (fragextend): Set csum_dirty after changi csum.
	(alloccg): Likewise.
	(alloccgblk): Likewise.
	(ialloccg): Likewise.
	(blkfree): Likewise.
	(diskfs_free_node): Likewise.
	* hyper.c (diskfs_set_hypermetadata): Acquire alloclock while
	writing hypermetadata.  Only write csum and sblock if
	csum_dirty or sblock_dirty, respectively, is set, and then
	clear it after starting the write.

	* main.c (main): Likewise.

	* sizes.c (diskfs_truncate): Don't turn off caching; the new
	light reference system takes care of this.
	* pager.c (diskfs_get_filemap): No longer necessary to turn
	on caching here, because truncate no longer turns it off.

	* inode.c (diskfs_lost_hardrefs, diskfs_new_hardrefs): New functions.
	* pager.c (drop_pager_softrefs, allow_pager_softrefs): New functions.
	(sin_map): Use diskfs_nref_light, not diskfs_nref.
	(diskfs_get_filemap): Use diskfs_nref_light, not diskfs_nref.
	(pager_clear_user_data): Use diskfs_nrele_light, not diskfs_nrele.
	* ufs.h (drop_pager_softrefs, allow_pager_softrefs): New
	declarations.

Wed Jun  1 13:35:11 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* sizes.c (diskfs_truncate): After calling sin_unmap, turn
	off caching on the sininfo pager so that it gets freed promptly
	(there's generally no value in keeping it around because there
	is no live fileinfo pager).
	* pager.c (diskfs_get_filemap): Make sure we turn caching back on
	here, however, if we start using the file pager.

	* pager.c (sin_map): When np->dn->sininfo is set, we have
	to insert a valid send right after fetching the receive name.

	* pager.c (sin_unmap, din_unmap): New functions.
	(pager_clear_user_data): Call sin_unmap and din_unmap
	instead of doing it right here.

	* sizes.c (diskfs_truncate): Call sin_unmap instead of
	doing it right here.
	(sindir_drop): Call din_unmap instead of doing it right
	here.  Also, call it always, not just when wo do dindir_drop.

	* sizes.c (diskfs_grow): After alloc into sindir area,
	unmap it if we don't have an active data pager.
	* ufs.h (sin_unmap, din_unmap): New declarations.

	* sizes.c (diskfs_grow): In computing OSIZE in the realloc
	case of lbn < NDADDR, deal correctly with the case where
	np->allocsize is already an integral number of blocks.

	* sizes.c (diskfs_grow): Compute SIZE correctly.

	* alloc.c (alloc, realloccg, blkfree): When checking validity
	of size arguments, also make sure the size isn't zero.

	* alloc.c (diskfs_alloc_node): Lock ALLOCLOCK before checking
	sblock->fs_cstotal.cs_nifree.

Tue May 31 18:47:42 1994  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* ufs.h (DONT_CACHE_MEMORY_OBJECTS): Define it.

	* dir.c (diskfs_direnter: case TAKE): Assert that OLD->d_reclen >=
	NEEDED, not that it is strictly >.

Tue May 31 11:10:28 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* sizes.c (diskfs_grow): Call diskfs_node_update (but don't wait)
	after successful completion to prevent old data from hanging around
	too long and getting flushed all at once from the kernel.

	* sizes.c (diskfs_grow): Change SIZE to be the size of the last
	block allocated.  Delete variable NSIZE; use SIZE instead.

Fri May 27 13:15:26 1994  Michael I Bushnell  (mib@geech.gnu.ai.mit.edu)

	* sizes.c (diskfs_truncate): Set NP->dn_stat_dirty after each
	modification of NP->dn_stat.

	* sizes.c (diskfs_truncate): Compute new value of NP->allocsize
	correctly.

	* inode.c (iget): Set NP->allocsize to be the *actual* allocsize.

Thu May 26 11:51:45 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* sizes.c (diskfs_truncate): In blkfree loop of blocks past
	NDADDR, subtract NDADDR from idx to index correctly into
	sinloc array.  Start this loop with idx not less than NDADDR.
	(diskfs_truncate): If olastblock == NDADDR, then we also
	need to truncate blocks (one) mapped by single indirect blocks.
	(diskfs_truncate): New variable `first2free'.  Use in place
	of older losing calculations involving lastblock.
	(sindir_drop): Rename parameters to be FIRST and LAST.  Change
	interpretation of FIRST by one to correspond with changed call
	in diskfs_truncate.

	* pager.c (sin_remap): When computing NEWSIZE, round up to
	a page boundary, thus mimicing the SINDIR computation in
	pager_report_extent properly.

	* pager.c (pager_unlock_page) [case SINDIR; vblkno == 0]: Read
	from ....di_ib[INDIR_SINGLE] rather than invalid data before
	NP->dn->dinloc.

	* alloc.c (alloc) [nospace]: Unlock alloclock.
	(realloccg): Unlock alloclock before jumping to nospace.
	(blkpref) [!(lbn < NDADDR)]: Unlock alloclock before returning
	success.

	* sizes.c (diskfs_grow): When allocing a block past NDADDR, the
	tbl arg to blkpref is the table of direct block pointers
	NP->dn->sinloc, not the table of indirect block pointers
	...->di_ib.

	* sizes.c (diskfs_grow): When writing into the SINDIR area, call
	sin_map instead of sin_remap if the sindir isn't already mapped.
	Also set np->allocsize *before* calling sin_map, but *after*
	calling sin_remap, to meet the requirements of those separate
	routines.

	* sizes.c (diskfs_grow): If END isn't bigger than NP->allocsize,
	then don't try and do anything.  In computation of LBN and the
	first use of NB, round up to block boundary correctly.  Don't
	attempt to realloc an old block if the size is 0 (in which case
	NB is -1 and unsigned comparison rules might foul things up).

Mon May 23 13:18:33 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* Makefile (ufs): Give -n in the proper order to rsh.

	* main.c: Include <hurd/startup.h>.

	* ufs.h (DONT_CACHE_MEMORY_OBJECTS): New compilation flag.
	* pager.c (pager_report_attributes): Deleted function.
	(MAY_CACHE): New macro; more useful form for using
	DONT_CACHE_MEMORY_OBJECTS.
	(sin_map, pager_init, diskfs_get_filemap): Provide new
	args in calls to pager_create.
	* sizes.c (MAY_CACHE): New macro; more useful form for
	using DONT_CACHE_MEMORY_OBJECTS.
	(diskfs_truncate): Use MAY_CACHE in calls to pager_change_attributes.

Fri May 20 18:52:41 1994  Michael I Bushnell  (mib@geech.gnu.ai.mit.edu)

	* sizes.c (diskfs_truncate): Force any delayed copies of the
	vanishing region to be taken immediately before stopping, and
	prevent any new delayed copies from being made until we are done
	manipulating things.
	(poke_pages): New function.
	* pager.c (pager_report_attributes): New function.

Wed May 18 15:51:40 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* alloc.c (alloc, realloccg, diskfs_alloc_node, alloccgblk,
	blkfree, diskfs_free_node, mapsearch): Added helpful strings to
	asserts.
	(realloccg): Split up assert.

Tue May 17 13:26:22 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* main.c (main): Delete unused variable PROC.

Mon May 16 15:32:07 1994  Michael I Bushnell  (mib@churchy.gnu.ai.mit.edu)

	* alloc.c (realloccg): When fragextend succeeds, bother to set
	*PBN.

	* sizes.c (diskfs_grow): In fragment growth case, NSIZE should
	not be the amount to hold SIZE (SIZE is the amount the file is
	growing by), but rather the old size of the fragment plus the
	SIZE.

	* dir.c (diskfs_direnter case COMPRESS): Rewrite loop to deal
	properly with the case where from and to overlap.

Mon May  9 16:51:44 1994  Michael I Bushnell  (mib@geech.gnu.ai.mit.edu)

	* main.c (ufs_version): New variable.
	(save_argv): New variable.
	(main): Set save_argv.
	(diskfs_init_completed): New function.

Thu May  5 19:06:54 1994  Michael I Bushnell  (mib@geech.gnu.ai.mit.edu)

	* Makefile (exec_server_image.o): Use -n when calling rsh.

Thu May  5 07:39:38 1994  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* Makefile ($(OBJS)): Use $(includedir) instead of $(headers) in deps.

