Fri Aug 2 12:10:40 1996 Miles Bader * inode.c (diskfs_write_disknode): If WAIT is false, still record the write for later, using record_global_poke. Thu Aug 1 16:18:59 1996 Miles Bader * ext2_fs.h (ext2_debug_flag): New decl. (ext2_debug): Pay attention to EXT2_DEBUG_FLAG. * ext2fs.c [EXT2FS_DEBUG] (options, ext2_debug_flag): New variables. [EXT2FS_DEBUG] (parse_opt, diskfs_get_options): New functions. [EXT2FS_DEBUG] (startup_parents, startup_argp, runtime_parents, diskfs_runtime_argp): New variables. [!EXT2FS_DEBUG] (startup_argp): New macro. (main): Use STARTUP_ARGP instead of DISKFS_STD_DEVICE_STARTUP_ARGP. * pager.c (diskfs_grow): Fix ext2_debug format strings. * truncate.c (trunc_direct): Fix ext2_debug call. Sat Jul 20 00:58:44 1996 Miles Bader * ext2fs.h (struct disknode): Remove debugging info. (RECORD_LAST): Function removed. (LAST_BUFSZ): Macro removed. (enum last_act): Type removed. * inode.c (diskfs_cached_lookup): Don't initialize debugging info. * pager.c (file_pager_read_page, file_pager_write_page, pager_unlock_page, diskfs_grow): Don't record debugging info. * truncate.c (diskfs_truncate): Likewise. * pager.c (file_pager_read_page): Set NODE->dn->last_page_partially_writable if we return such a page. Fri Jul 19 15:02:24 1996 Miles Bader * pager.c (diskfs_grow): Rename OLD_END_BLOCK to END_BLOCK. Correctly determine whether to set DN->last_page_partially_writable after allocating new blocks. * pager.c (file_pager_read_page, file_pager_write_page): Pass NODE->dn, not &NODE->dn to RECORD_LAST. Mon Jul 15 18:00:26 1996 Miles Bader * ext2fs.h (struct disknode): Add debugging info. (RECORD_LAST): New function. (LAST_BUFSZ): New macro. (enum last_act): New type. * pager.c (pager_unlock_page, diskfs_grow, file_pager_read_page, file_pager_write_page): Record debugging info. * truncate.c (diskfs_truncate): Likewise. * inode.c (diskfs_cached_lookup): Initialize debugging info. * pager.c (file_pager_read_page): Initialize *WRITELOCK to 0. Tue Jun 25 12:22:21 1996 Miles Bader * ext2fs.h (sync_global): Renamed from sync_global_data. Add WAIT flag. Don't call diskfs_set_hypermetadata. (alloc_sync): Call diskfs_set_hypermetadata instead of sync_global_data. (sync_super_block): Function removed. * hyper.c (diskfs_readonly_changed): No longer clear the clean bit. (diskfs_set_hypermetadata): Work correctly. * truncate.c (diskfs_truncate): Add call diskfs_check_readonly to clear clean bit. * inode.c (diskfs_cached_lookup): Use diskfs_check_readonly instead of diskfs_readonly. * dir.c (diskfs_lookup_hard, diskfs_dirempty): Likewise. * pager.c (diskfs_shutdown_pager): Don't shutdown the disk pager, just sync it. (diskfs_sync_everything): Call sync_global instead of pokel_sync. (final_sblock): Variable removed. (diskfs_grow): Add call diskfs_check_readonly to clear clean bit. Mon Jun 24 17:14:25 1996 Miles Bader * inode.c (check_high_bits, diskfs_validate_owner_change, diskfs_validate_group_change, diskfs_validate_mode_change, diskfs_validate_author_change): New functions. (write_node): For non-hurd filesystems, assert that no hurd extensions should be used. Thu Jun 20 22:36:23 1996 Miles Bader * ext2fs.c (main): Rename diskfs_device_startup_argp to diskfs_std_device_startup_argp. Sat Jun 15 15:56:01 1996 Miles Bader * inode.c (read_disknode, write_inode): Use hurd-specific fields only on a hurd filesystem. Fri May 10 09:32:43 1996 Michael I. Bushnell, p/BSG * inode.c (diskfs_set_statfs): Fix one reference to old name of ST member. Thu May 9 11:52:20 1996 Michael I. Bushnell, p/BSG * inode.c (diskfs_set_statfs): Expect and fill in new format statfs buffer. * Makefile (ext2fs ext2fs.static): s/ioserver/iohelp/g. * ext2fs.h: ioserver.h -> iohelp.h. Tue May 7 16:22:56 1996 Miles Bader * storeinfo.c (diskfs_S_file_get_storage_info): Rewrite for new interface. Tue Apr 30 12:51:09 1996 Michael I. Bushnell, p/BSG * Makefile (targets): Renamed from `target'. Fri Apr 26 16:10:19 1996 Michael I. Bushnell, p/BSG * Makefile (makemode): Now `servers'. (targets): Renamed from `target'; now include ext2fs.static. (ext2fs.static-LDFLAGS): Renamed from `LDFLAGS'. (ext2fs.static): Depend on same things as `ext2fs'. (include ../Makeconf): Must come before dependency information. Wed Apr 17 13:30:49 1996 Miles Bader * inode.c (diskfs_write_disknode): Only sync DI if WAIT. * 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. Thu Apr 4 18:51:19 1996 Miles Bader * inode.c (diskfs_cached_lookup): Renamed from iget; all uses updated. Initialize the CACHE_ID field in the new node. * ext2fs.h (struct disknode): Get rid of NUMBER field; all references replaced by references to the CACHE_ID field in the corresponding node. Fri Mar 29 11:03:58 1996 Miles Bader * dir.c (diskfs_null_dirstat): New function. (diskfs_lookup_hard, diskfs_direnter, diskfs_dirremove_hard, diskfs_dirrewrite_hard): Renamed from versions without `_hard' suffix. Get rid of stuff now done by diskfs. * ext2fs.c (main): Pass new argument to argp_parse. Tue Mar 19 17:52:04 1996 Miles Bader * pager.c (pager_unlock_page, diskfs_grow): Try to make the logic a bit simpler and more robust. Fri Feb 16 17:05:01 1996 Miles Bader * ext2fs.c (main): Check error return from diskfs_init_diskfs. Tue Feb 6 14:49:40 1996 Miles Bader * ext2fs.h (ext2_warning): Make a declaration, not a macro. * msg.c (ext2_warning): Rename from _ext2_warning; don't take (or print) a function argument any more. * dir.c (diskfs_get_directs): When BUFSIZ is 0, allocate enough extra space over the directory size to account for the worst case difference between the ext2 and canonical formats. Sat Feb 3 11:27:07 1996 Miles Bader * hyper.c (get_hypermetadata, diskfs_readonly_changed): Use ext2_warning to print warnings instead of error(). * msg.c (_ext2_warning): Include `warning:' in message. Sat Feb 3 06:10:43 1996 Roland McGrath * hyper.c: Fixed handling of the filesystem `clean bit'. (ext2fs_clean): New boolean variable. (get_hypermetadata): Set it iff the clean bit is set on entry. If not clean, complain and force read-only. (diskfs_set_hypermetadata): Set clean bit only if ext2fs_clean is set. (diskfs_readonly_changed): Complain if going writable and clean bit clear. * ext2fs.c: Include string.h for strerror decl. Tue Jan 30 22:25:19 1996 Miles Bader * hyper.c (get_hypermetadata): Don't return any error value, just panic if we can't read the superblock. * ext2fs.c (main): Move warp_inode() inline. Make sure root inode is really there. Don't check return value from get_hypermetadata. (warp_inode): Function removed. * ext2fs.h (get_hypermetadata): Returns void now. Tue Jan 30 17:04:41 1996 Roland McGrath * pager.c (file_pager_read_page, file_pager_write_page): Check for a page offset beyond the allocsize and return EIO. Wed Jan 17 15:11:55 1996 Miles Bader * storeinfo.c (diskfs_S_file_get_storage_info): Calculate the right value for *RUNS_LEN. Tue Jan 16 17:37:00 1996 Miles Bader * pager.c (diskfs_file_update): Ext2fs doesn't require that the last block in the file always be allocated, so don't. (diskfs_grow, pager_unlock_page): Don't set last_block_allocated. * ext2fs.h (struct disknode): Get rid of last_block_allocated field. * inode.c (read_disknode): Don't set last_block_allocated. * truncate.c (diskfs_truncate): Likewise. * Makefile (LDFLAGS): Add -static. Mon Jan 15 10:25:19 1996 Miles Bader * pager.c (pager_unlock_page, diskfs_grow): Leave things in a slightly more consistent state when block allocation errors happen. * dir.c (diskfs_direnter): Don't include the terminating '\0' in on-disk directory entry names. * inode.c (diskfs_node_norefs): When losing our in-core copy of an inode, remember which indirect blocks still have to be written. * pokel.c (pokel_inherit, pokel_finalize): New functions. * ext2fs.h (pokel_inherit, pokel_finalize): New declarations. * dir.c (diskfs_lookup): Patch from ufs/dir.c: If we are returning an error, then set the dirstat to be ignored by drop_dirstat. Sun Jan 14 13:17:33 1996 Miles Bader * ialloc.c (diskfs_alloc_node): Set NP->istranslated to 0. * inode.c (write_node): If NP isn't translated, force DI->i_translator to 0. * getblk.c (inode_getblk, block_getblk): Set dn_set_mtime too. Sat Jan 6 11:57:26 1996 Roland McGrath * pager.c (pager_bucket): Made global. (create_disk_pager): Pass MAY_CACHE to disk_pager_setup. * ext2fs.c (main): Don't map in disk image here; create_disk_pager now does it. Fri Jan 5 16:57:54 1996 Roland McGrath * ext2fs.h: Declare create_disk_pager. Thu Jan 4 18:46:40 1996 Roland McGrath * ext2fs.h (disk_pager, disk_pager_port, disk_image, create_disk_pager): Decls removed. Include hurd/diskfs-pager.h instead. * pager.c (create_disk_pager): Use disk_pager_setup. Tue Nov 14 14:59:32 1995 Miles Bader * dir.c (dirscanblock): Apply mib's changes to ufs/dir.c. Sat Nov 4 20:01:01 1995 Miles Bader * storeinfo.c (diskfs_S_file_get_storage_info): Add FLAGS argument. Wed Nov 1 20:09:59 1995 Miles Bader * ext2fs.c (main): Add FLAGS arg to diskfs_startup_diskfs call. Mon Oct 23 17:49:16 1995 Miles Bader * inode.c (diskfs_get_translator, diskfs_set_translator): Only support these if the filesystem's creator-os is `hurd'. (read_disknode): Only check the i_translator field if the filesystem's creator-os is `hurd'. Fri Oct 20 19:18:16 1995 Miles Bader * ext2fs.h (MS_RDONLY, MS_NOSUID, MS_NODEV, MS_NOEXEC, MS_SYNCHRONOUS, MS_REMOUNT, S_APPEND, S_IMMUTABLE, IS_APPEND, IS_IMMUTABLE): Macros deleted. Thu Oct 19 19:15:15 1995 Miles Bader * pager.c (create_disk_pager, diskfs_get_filemap, pager_clear_user_data): Don't use the p field in a upi. (diskfs_get_filemap): Update/initialize the max_prot field. Add the prot arg. * ext2fs.h (struct user_pager_info): Add max_prot field, remove p. * pager.c (drop_pager_softrefs): Declare PAGER, not UPI. (enable_caching): The disk node is upi->node, not upi->np. (diskfs_enable_pagers): Function removed. * inode.c (read_disknode): Add DN and OFFSET variables. Use log2_block_size to mask instead of doing a modulo with block_size. * hyper.c (diskfs_readonly_changed): Typo. (allocate_mod_map): Declare ERR; OLD_MOD_MAP_SIZE --> MOD_MAP_SIZE. * dir.c (diskfs_lookup, diskfs_dirempty): Give diskfs_get_filemap a protection arg. * truncate.c (force_delayed_copies): Ditto. Wed Oct 18 21:00:28 1995 Miles Bader * ext2fs.h (struct disknode): Replace fileinfo field with pager. * inode.c (diskfs_node_norefs, iget): Use pager field, not fileinfo. * pager.c (diskfs_get_filemap_pager_struct, flush_node_pager, diskfs_file_update, pager_clear_user_data, drop_pager_softrefs): Ditto. * truncate.c (enable_delayed_copies, force_delayed_copies): Ditto. * ext2fs.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. * pager.c (diskfs_enable_pagers): New function. Tue Oct 17 21:16:04 1995 Miles Bader * pokel.c (_pokel_exec, pokel_flush): New functions. (pokel_sync): Use _pokel_exec to do the work. * pager.c (flush_node_pager): New function. * ext2fs.h (pokel_flush, flush_node_pager): New declarations. * hyper.c (allocate_mod_map): New function (from get_hypermetadata). (zeroblock, modified_global_blocks): Define (were common). (get_hypermetadata): Deallocate ZEROBLOCK if necessary. Use allocate_mod_map to allocate MODIFIED_GLOBAL_BLOCKS. (diskfs_readonly_changed): New function. * main.c (main): Move stuff into get_hypermetadata. Writable init code moved to diskfs_readonly_changed. * inode.c (diskfs_node_reload): New function. (iget, read_disknode): Code to set allocsize and the last_* fields moved from iget to read_disknode. * ext2fs.h (disk_pager): Type changed to struct pager. (sync_global_ptr): Use DISK_PAGER, not DISK_PAGER->p. * pager.c (create_disk_pager): Store the actual pager into DISK_PAGER. * ext2fs.c (main): Use DISK_PAGER directly, not ->p. * inode.c (iget): Ditto. * pager.c (diskfs_shutdown_pager, diskfs_sync_everything): Ditto. Mon Oct 16 15:23:25 1995 Miles Bader * inode.c (diskfs_lost_hardrefs): #ifdef'd out contents removed. Fri Oct 13 17:50:23 1995 Miles Bader * ext2fs.c (main): Use argp for parsing. (usage, USAGE, SHORT_OPTS, long_opts, console_stdio): Removed Thu Oct 12 18:16:00 1995 Miles Bader * hyper.c (get_hypermetadata): Use diskfs device functions & variables instead of our own. * ext2fs.h (device_arg, device_name, device_port, device_start, device_size, device_block_size): Declarations removed. * ext2fs.c (printf, _ext2_error, _ext2_panic, _ext2_warning): Functions moved to msg.c * msg.c: New file. (printf, _ext2_error, _ext2_panic, _ext2_warning): Funcs from ext2fs.c. * Makefile (SRCS): Remove devio.c, add msg.c. Sat Oct 7 20:47:19 1995 Miles Bader * storeinfo.c (diskfs_S_file_get_storage_info): run_elem_t --> off_t. * ext2fs.c (diskfs_init_completed): Func deleted (now in libdiskfs). Fri Oct 6 17:24:57 1995 Miles Bader * storeinfo.c (diskfs_S_file_get_storage_info): Change type of ADDRESSES to off_t **, and add BLOCK_SIZE parameter. Wed Oct 4 20:02:34 1995 Miles Bader * inode.c (diskfs_set_statfs): fsys_stb_bsize -> fsys_stb_iosize. fsys_stb_fsize -> fsys_stb_bsize. Wed Sep 27 20:07:53 1995 Miles Bader * ext2fs.c (main): Use diskfs routines to open the device. Support both file and mach devices. Move the parse function here. (parse_opt): Move into main (as a nested function). * ext2fs.h (device_arg, device_start): New declarations. * devio.c (dev_read_sync, dev_write_sync): Offset the address to which we're doing i/o with DEVICE_START. Tue Sep 26 18:39:58 1995 Miles Bader * storeinfo.c (diskfs_S_file_get_storage_info): New function. * Makefile (SRCS): Add storeinfo.c. Fri Sep 15 14:21:18 1995 Miles Bader * truncate.c (trunc_indirect): Only record an indirect block as being modified when it actually is. * truncate.c (diskfs_truncate): Use the new truncate functions. (poke_pages): Gratuitous cosmetic changes. (trunc_direct): Rewritten, new args. (trunc_indirect): Rewritten, new args, now more general to support all the various indirection levels. (trunc_triple_indirect, trunc_double_indirect, trunc_single_indirect): New functions. (struct free_block_run): New structure. (free_block_run_finish, free_block_run_free_ptr, free_block_run_add, free_block_run_init, _free_block_run_flush): New functions. (trunc_dindirect, trunc_tindirect): Functions deleted. (DIRECT_BLOCK, INDIRECT_BLOCK, DINDIRECT_BLOCK, TINDIRECT_BLOCK): Macros deleted. * getblk.c (block_getblk, ext2_getblk): u32 --> block_t. * balloc.c (ext2_new_block): Ditto. * hyper.c (get_hypermetadata): Ditto. * pager.c (file_pager_write_page): Ditto. Wed Sep 13 12:30:23 1995 Michael I. Bushnell, p/BSG * 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. Tue Sep 12 11:03:19 1995 Miles Bader * pokel.c (pokel_init): Initialize the free_pokes field. (pokel_add): Assert that this malloc should succeed. (pokel_sync): Don't hold POKEL's spin lock while syncing. * ialloc.c (diskfs_alloc_node): Check for a non-zero ALLOCSIZE. Tue Sep 5 16:59:40 1995 Miles Bader * pager.c (diskfs_pager_users): Ignore the disk pager when seeing if there are any active pagers. (diskfs_shutdown_pager): shutdown_one gets passed a pager, not a upi. (diskfs_sync_everything): sync_one gets passed a pager, not a upi. Sun Sep 3 17:28:13 1995 Miles Bader * ext2fs.c (thread_cancel): Removed. Fri Aug 25 14:37:32 1995 Miles Bader * Makefile (ext2fs): Put libports in the right place in the linking order. Thu Aug 24 10:34:15 1995 Miles Bader * Makefile (ext2fs): Put all dependencies here. (HURDLIBS): Removed. Tue Aug 22 19:39:06 1995 Miles Bader * Makefile (HURDLIBS): Add libshouldbeinlibc. Remove rules for error.o. Fri Jul 21 17:51:33 1995 Michael I Bushnell * pager.c (diskfs_get_filemap): Free 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. Thu Jul 6 15:33:24 1995 Michael I Bushnell * Makefile: Removed dependencies that are now automatically generated. Thu Jul 6 13:36:25 1995 Miles Bader * pager.c (diskfs_pager_users): New function. Tue Jun 27 13:08:33 1995 Michael I Bushnell * pager.c (pager_unlock_page): Declare BLOCK volatile. Sat Jun 24 17:59:36 1995 Miles Bader * Makefile (HURDLIBS): Add libihash. * ext2fs.c (thread_cancel): Dummy function. * dir.c (diskfs_direnter): Move assignment out of test. (diskfs_get_directs): Fix print-format types. * ialloc.c (diskfs_free_node): Fix print-format types. * pager.c (thread_function): New function. (create_disk_pager): Make a new thread to service paging requests. * ext2fs.c (main): Have the initial thread die when it's done, leaving other thread to do the work. * pager.c (pager_bucket): New variable. (pager_list_lock, file_pager_list): Variables deleted. (create_disk_pager): Create pager_bucket. (create_disk_pager, diskfs_get_filemap): Pass pager_bucket to pager_create. (pager_traverse): Function deleted. (diskfs_get_filemap, pager_clear_user_data): Don't add/remove UPI to/from the pager list, as there isn't any. (diskfs_shutdown_pager, diskfs_sync_everything): Use ports_bucket_iterate on pager_bucket to go through all the pagers, instead of pager_traverse. (diskfs_file_update, pager_traverse, allow_pager_softrefs, drop_pager_softrefs): Change pager [un]ref calls to use the new ports ref calls directly instead. (pager_dropweak): New function (does nothing). * ext2fs.h (struct user_pager_info): Remove the next & prevp fields. * truncate.c (force_delayed_copies, enable_delayed_copies): Change pager [un]ref calls to use the new ports ref calls directly instead. * inode.c (diskfs_lost_hardrefs): Ditto. * inode.c (diskfs_node_iterate): New function. (write_all_disknodes): Re-implemented using diskfs_node_iterate. Wed Jun 14 16:19:49 1995 Michael I Bushnell * inode.c (diskfs_get_translator): Conform to new memory usage semantic. Fri May 19 20:56:51 1995 Miles Bader * ext2fs.c (main): Use options_parse & diskfs_standard_startup_options to do command line options parsing. (long_opts): Was `options'. Most things removed, as they're now handled by libdiskfs. (parse_opt): New routine to deal with our few meagre remaining options in the approved options_parse manner. Mon May 15 15:55:49 1995 Miles Bader * ext2fs.c (main, usage, options): Add --writable & --nosync options. Sat May 13 20:04:55 1995 Miles Bader * inode.c (diskfs_set_statfs): Set st->fsys_stb_bsize, not _fsize, to the block size. Sat May 13 05:02:59 1995 Roland McGrath * Makefile (OBJS): Remove exec_server_image.o. (exec_server_image.o): Rule removed. Fri May 12 15:23:02 1995 Miles Bader * ext2fs.c (main): Add an optional argument to the --sync option that lets the user specify an initial sync interval. Thu May 11 13:30:06 1995 Miles Bader * pager.c (pager_unlock_page): Give an explanation of why the file system will shortly crash. * balloc.c (ext2_free_blocks, ext2_new_block): Get rid of the CHECK_STRICT variable, and just always do the tests it controlled. * ext2fs.h: Get rid of the CHECK_STRICT variable. * ext2fs.h (ext2_error, ext2_warning, ext2_panic, all callers changed): Make these into macros that automagically supply the caller's function name, and rename the original functions (which these macros call) to have an underline prefix. * ext2fs.c (ext2_error, ext2_warning, ext2_panic): Rename to add the underline prefix. Also rearrange a bit to hold the lock around the use of the global message buffer. * ext2fs.c (main): Enable the bootstrap code. * inode.c (read_disknode): Make st_blksize larger: 2 * pagesize. Wed May 10 14:03:34 1995 Miles Bader * getblk.c (block_getblk, inode_getblk): Return ENOSPC instead of EIO when we can't allocate a new block. * bitmap.c (find_next_zero_bit): Fix stupid typos (present in the original linux source I copied this function from!) which were causing occasional garbage results. Tue May 9 18:08:41 1995 Miles Bader * ext2fs.h (DONT_CACHE_MEMORY_OBJECTS): Don't define this any more, as the bugs we were using it to catch are supposedly gone :-|