1999-09-07 Thomas Bushnell, BSG * dir.c (diskfs_lookup_hard): Pass additional parameter to diskfs_get_filemap. (diskfs_dirempty): Likewise. * truncate.c (force_delayed_copies): Likewise. * pager.c (diskfs_get_filemap): Accept additional parameter. 1999-09-04 Thomas Bushnell, BSG * pager.c (file_pager_write_page): Don't report errors on writes that extend past NODE->allocsize. This avoids a race between sync and truncate. Reported by Mark Kettenis . 1999-08-23 Roland McGrath * ext2_fs.h, ext2_fs_i.h: Replaced with Linux 2.3.14 versions. * ext2fs.h (i_mode_high): New macro, missing from ext2_fs.h. * inode.c (read_node): Don't set INFO->i_version. Extract INFO->i_dir_acl value only for a directory; otherwise use zero and instead extract INFO->i_high_size. Fail with EFBIG if INFO->i_high_size is nonzero. * ialloc.c (diskfs_alloc_node): Propagate initial value of i_flags from directory, as Linux 2.3.14 does. * inode.c (write_node): Get i_flags from NP->dn->info instead of from the disk inode, so we can have modified the in-core version. * dir.c (diskfs_direnter_hard, diskfs_dirremove_hard, diskfs_dirrewrite_hard): Clear EXT2_BTREE_FL flag bit from DP->dn->info.i_flags after modifying the directory (this is what Linux 2.3.14 does). * inode.c (read_node): i_version -> i_generation * inode.c (write_node): Likewise. * balloc.c (ext2_free_blocks): Handle freeing across group boundary, as Linux 2.3.14 does. * balloc.c (ext2_check_blocks_bitmap): If RO_COMPAT_SPARSE_SUPER feature flag is set, or if group number is not a power of 3, 5, or 7 (I don't know why; this is what Linux 2.3.14 does), skip tests for superblocks and descriptor blocks being free in bitmap. * dir.c: Replace `struct ext2_dir_entry' with `struct ext2_dir_entry_2' in all uses. (ext2_file_type): New static const variable. (diskfs_get_directs): Set d_type member based on file_type field in directory entry. * balloc.c (ext2_new_block): Take new arg PREALLOC_GOAL. Use that instead of hard-coded 8 as maximum of blocks to preallocate. Also test that instead of PREALLOC_COUNT to decide whether to try any preallocation at all. * getblk.c (ext2_alloc_block): Pass new arg to ext2_new_block. Use EXT2_DEFAULT_PREALLOC_BLOCKS as default (replaces hard-coded 8); For a regular file, use SBLOCK->s_prealloc_blocks before default. For a directory, use SBLOCK->s_dir_prealloc_blocks if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is set, otherwise zero. * inode.c (diskfs_set_translator): Pass new arg (zero). 1999-07-11 Roland McGrath * dir.c (diskfs_get_directs): Fix sloppy bugs in last change. * hyper.c (allocate_mod_map): Likewise. * pager.c (get_page_buf): Likewise. 1999-07-10 Roland McGrath * ext2fs.h: Add #include for munmap decl. 1999-07-06 Thomas Bushnell, BSG * dir.c (diskfs_get_directs): Use mmap instead of vm_allocate. * hyper.c (allocate_mod_map): Likewise. (get_hypermetadata): Likewise. * pager.c (get_page_buf): Likewise. * hyper.c (diskfs_readonly_changed): Use mprotect instead of vm_protect. 1999-07-03 Thomas Bushnell, BSG * dir.c (diskfs_lookup_hard): Use munmap instead of vm_deallocate. (diskfs_direnter_hard): Likewise. (diskfs_dirremove_hard): Likewise. (diskfs_dirrewrite_hard): Likewise. (diskfs_dirempty): Likewise. (diskfs_drop_dirstat): Likewise. (diskfs_get_directs): Likewise. * hyper.c (allocate_mod_map): Likewise. (get_hypermetadata): Likewise. * pager.c (free_page_buf): Likewise. * truncate.c (poke_pages): Likewise. 1999-06-29 Thomas Bushnell, BSG * hyper.c (diskfs_readonly_changed): Adjust whether the store should permit writes too. 1999-06-19 Roland McGrath * pager.c (free_page_buf): Fix type cast. Tue Jun 15 21:51:58 1999 Thomas Bushnell, BSG * pager.c: Clamp the number of free pages we keep around to some reasonably small value. Patch from Mark Kettenis . 1999-06-15 Thomas Bushnell, BSG * inode.c (diskfs_validate_flags_change): Invert sense of test wrt bits that haven't yet been defined. Reported by Kalle Olavi Niemitalo . 1999-05-23 Roland McGrath * ialloc.c (diskfs_alloc_node): Frob printf format to suppress warning. * getblk.c (ext2_getblk): Likewise. * balloc.c (ext2_free_blocks): Likewise. * hyper.c (get_hypermetadata): Likewise. * ialloc.c (diskfs_alloc_node): If creator_os is not EXT2_OS_HURD, suppress warnings about stale nonzero st_blocks or st_size. 1999-05-19 Roland McGrath * ext2fs.c (main): Include store size in panic msg when it's too small. 1999-01-23 Roland McGrath * ext2fs.c (main): Use diskfs_init_main. 1998-12-27 Roland McGrath * inode.c (diskfs_set_statfs): Remove __ from struct members. 1998-12-21 Mark Kettenis * inode.c (diskfs_set_statfs): Fill in statfs members that are used to implement statvfs. 1998-12-27 Roland McGrath * ext2fs.c (main): Pass ARGP_IN_ORDER flag to argp_parse because diskfs options need it. 1998-12-20 Roland McGrath * inode.c (diskfs_write_disknode): Add braces to silence warning. * pager.c (file_pager_read_page): Likewise. * storeinfo.c: Don't include . 1998-09-04 Roland McGrath * dir.c (dirscanblock): Fix defn with `const'. (diskfs_direnter_hard): Likewise. * inode.c (diskfs_create_symlink_hook): Likewise. (write_symlink): Likewise. * pager.c: strings.h -> string.h; gets strerror decl. * ext2fs.c (main): Fix return type to int. * dir.c (diskfs_lookup_hard): Fix defn with `const'. * inode.c (diskfs_set_translator): Likewise. Wed Aug 20 14:28:00 1997 Thomas Bushnell, n/BSG * dir.c (diskfs_lookup_hard): Cope with error return from diskfs_get_filemap. (diskfs_dirempty): Cope (poorly) with error return from diskfs_get_filemap. * truncate.c (force_delayed_copies): Likewise. * pager.c (diskfs_get_filemap): If pager_create fails, return error to caller. Mon Jun 30 17:34:27 1997 Thomas Bushnell, n/BSG * ext2fs.c (diskfs_readonly): Delete variable definition. (main): If the store cannot be made writable, then set diskfs_hard_readonly and diskfs_readonly. 1997-06-20 Miles Bader * pager.c (disk_pager_read_page): Initialize READ to 0 to force store_read to allocate a buffer. 1997-06-18 Miles Bader * ext2fs.c (main): Get rid of device-block-size-is-power-of-2 check. Tue Jun 3 17:18:35 1997 Miles Bader * inode.c (read_node): Don't assert that st_blocks is zero for non-dir/file/long-symlink inodes. Tue Nov 19 18:30:37 1996 Miles Bader * inode.c (read_node): If SBLOCK->s_creator_os != EXT2_OS_HURD, set NP->author_tracks_uid to true. Mon Nov 18 17:14:31 1996 Miles Bader * ialloc.c (diskfs_alloc_node): Clear S_IPTRANS bit in ST->st_mode instead of NP->istranslated. * inode.c (read_node): Set S_IPTRANS bit in ST->st_mode (and clear S_ITRANS) rather than NP->istranslated. (write_node): Don't write S_IPTRANS to disk. (diskfs_set_translator): Frob S_IPTRANS bit rather than istranslated field. Sat Nov 16 17:26:20 1996 Thomas Bushnell, n/BSG * storeinfo.c (diskfs_S_file_get_storage_info): diskfs_isuid -> idvec_contains. Tue Nov 12 17:53:08 1996 Miles Bader * inode.c (diskfs_validate_flags_change): New function. (write_node): Convert generic flags in ST->st_flags to ext2- specific flags in DI->i_flags. (read_node): Renamed from read_disknode; all callers changed. Convert ext2-specific flags on disk to generic flags in ST. [!UF_APPEND] (UF_APPEND): New macro (temporary). [!UF_NODUMP] (UF_NODUMP): New macro (temporary). [!UF_IMMUTABLE] (UF_IMMUTABLE): New macro (temporary). : New include. Thu Oct 24 16:24:05 1996 Miles Bader * ext2fs.c (startup_children, runtime_children): New variables. (startup_parents, runtime_parents): Variables removed. (startup_argp, runtime_argp): Use new *_CHILDREN variables instead of corresponding *_PARENT ones. Wed Oct 9 13:30:15 1996 Miles Bader * storeinfo.c (diskfs_S_file_get_storage_info): Return ports with MACH_MSG_TYPE_COPY_SEND, not MACH_MSG_TYPE_MAKE_SEND. Tue Oct 8 23:25:53 1996 Miles Bader * storeinfo.c (diskfs_S_file_get_storage_info): If st_size indicates a lower value for NUM_FS_BLOCK, use it instead of the value derived from st_blocks. Mon Oct 7 15:48:49 1996 Miles Bader * storeinfo.c (diskfs_S_file_get_storage_info): Typo. Fri Oct 4 23:51:05 1996 Miles Bader * storeinfo.c (diskfs_S_file_get_storage_info): Add security check, and deactivate FILE_STORE if necessary. Mon Sep 30 15:40:53 1996 Miles Bader * storeinfo.c (diskfs_S_file_get_storage_info): Set *PORTS_TYPE. Thu Sep 19 17:57:07 1996 Miles Bader * Makefile (HURDLIBS): Add store. Wed Sep 18 15:28:32 1996 Miles Bader * ext2fs.c (main): Remove CLASSES argument to store_parsed_open. Use STORE_PARAMS variable to get result from parsing STORE_ARGP. (diskfs_extra_version): Put `GNU Hurd' in here. Fri Sep 13 00:15:56 1996 Miles Bader * ext2fs.c (diskfs_append_args): Renamed from diskfs_get_options. Don't initialize *ARGZ & *ARGZ_LEN anymore, or deallocate on errors. Append store args too. * pager.c (file_pager_read_page:do_pending_reads, pager_unlock_page, pending_blocks_write, diskfs_grow, find_block): Use filesystem blocks, not device blocks, in block<->offset/size conversions. * Makefile (ext2fs ext2fs.static): Add ../libstore/libstore.a. 1996-09-12 Miles Bader * ext2fs.c (diskfs_disk_name): Renamed from STORE_NAME. Wed Sep 11 12:59:28 1996 Miles Bader * pager.c (create_disk_pager): Create PAGER_BUCKET. Pass in new args to diskfs_pager_setup (renamed from disk_pager_setup). (disk_image): New variable. (service_paging_request): Function removed. (diskfs_shutdown_pager): Use DISKFS_DISK_PAGER instead of DISK_PAGER. * ext2fs.h (disk_image): New declaration. (sync_global_ptr): Use DISKFS_DISK_PAGER instead of DISK_PAGER. * ext2fs.c (main, diskfs_reload_global_state): Use DISKFS_DISK_PAGER instead of DISK_PAGER. * ext2fs.c (main): Change store_parsed_get_name to store_parsed_name. * storeinfo.c (diskfs_S_file_get_storage_info): Clone STORE before remapping it. Tue Sep 10 17:12:16 1996 Miles Bader * storeinfo.c (diskfs_S_file_get_storage_info): Rewritten to use store functions. Mon Sep 9 11:10:11 1996 Miles Bader * ext2fs.c (main): Use store fields instead of diskfs variables. (store, store_parsed, store_name): New variables. (free_page_bufs, free_page_bufs_lock): Variables removed. (get_page_buf, free_page_buf): Functions removed. , : New includes. * ext2fs.h (store_parsed, store_name): New declarations. (get_page_buf, free_page_buf): Declarations removed. * hyper.c : New include. * pager.c : New include. (file_pager_write_pager): Make BUF void *. (file_pager_read_page): Make BUF void **, NEW_BUF void *, and LENGTH size_t. Pass &LENGTH to store_read, not LENGTH. (pending_blocks_write): Make PAGE_BUF void *, and LENGTH size_t. Check amount written, and return EIO if it's wrong. (disk_pager_read_page): Make BUF void **, and LENGTH size_t. Check amount read, and return EIO if it's wrong. (disk_pager_write_page): Make BUF void *, and LENGTH size_t. Check amount written, and return EIO if it's wrong. (pager_read_page, pager_read_page): Convert BUF to a pointer when calling work functions. (struct pending_blocks): Make BUF void *. (free_page_bufs, free_page_bufs_lock): New variables. (get_page_buf, free_page_buf): New functions. Sun Sep 8 18:47:10 1996 Miles Bader * hyper.c (diskfs_readonly_changed): Use STORE->size. (get_hypermetadata): Use STORE->size & STORE->block_size. * pager.c (file_pager_read_page, pending_blocks_write, disk_pager_read_page, disk_pager_read_page, disk_pager_write_page, pager_report_extent, find_block, pager_unlock_page, diskfs_grow): Use store_ operations instead of the old device ones, and some store fields instead of globals. * inode.c (read_disknode): Use STORE->log2_block_size instead of LOG2_BLOCK_SIZE. * ext2fs.h (store): New declaration. * ext2fs.c (startup_parents): Use diskfs_store_startup_argp instead of diskfs_std_device_startup_argp. (startup_parents, startup_argp, runtime_parents, runtime_argp, options, parse_opt, diskfs_get_options): Define always, not just when EXT2FS_DEBUG is defined. (parse_opt): Propagate our input to the first child argp. (parse_opt, diskfs_get_options): Guard debug-specific bits with #ifdef EXT2FS_DEBUG. Thu Sep 12 16:41:20 1996 Thomas Bushnell, n/BSG * Makefile (HURDLIBS): New variable. (ext2fs ext2fs.static): Depend on $(library_deps) instead of explicit list. Fri Sep 6 16:03:11 1996 Thomas Bushnell, n/BSG * ext2fs.c: Include . (diskfs_major_version, diskfs_minor_version, diskfs_edit_version): Deleted variables. (diskfs_server_version): New variable. Thu Aug 29 16:59:51 1996 Miles Bader Changes from ufs/dir.c: * dir.c (diskfs_lookup_hard): When setting ds->stat to EXTEND, set ds->idx by looking at the size of the file. After successful dirscanblock, record index where we finished in DP->dn->dir_idx. Start searches at that index. (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. * ext2fs.h (struct disknode): New member `dir_idx'. * inode.c (diskfs_cached_lookup): Initialize DN->dir_idx. * dir.c (diskfs_direnter_hard): Initialize OLDSIZE to quiet gcc. Sun Aug 18 01:45:42 1996 Miles Bader * pager.c (file_pager_read_page): Use get_page_buf to get a free page. (file_pager_read_page): Use free_page_buf to deallocate pages. * ext2fs.c (get_page_buf): Return 0 if we can't allocate. Thu Aug 15 14:55:01 1996 Miles Bader * ext2fs.c (diskfs_edit_version): Change to `1'. (diskfs_version_extra): New variable. * inode.c (read_disknode): Change assertion to allow non-zero st_size for anything, but assert that st_blocks == 0 for any case where we set allocsize to 0. * truncate.c (diskfs_truncate): Allow any sort of node to have a size without any blocks (as linux apparently does this sometimes with devices). Wed Aug 14 14:03:33 1996 Miles Bader * ext2fs.c (diskfs_minor_version): Change to `2'. Tue Aug 13 15:11:42 1996 Miles Bader * ext2_fs.h: Update to version from linux-2.0.12. * ialloc.c (ext2_alloc_inode, diskfs_free_node): Pass SBLOCK as a parameter to EXT2_FIRST_INO (v2.x change). * hyper.c (get_hypermetadata): Use EXT2_INODE_SIZE instead of sizeof (struct ext2_inode). Deal with various version 2.x features. * ext2fs.h (dino): Dont recalculate INODES_PER_BLOCK here. (ext2_debug): redefine macro after including ext2_fs.h. Mon Aug 12 13:48:17 1996 Miles Bader * ext2fs.c (diskfs_minor_version): Changed to `1'. * inode.c (read_disknode): Don't set allocsize for in-inode symlinks. (MAX_INODE_SYMLINK): New macro. (write_symlink, read_symlink): New functions. (diskfs_create_symlink_hook, diskfs_read_symlink_hook): New variables. * truncate.c (diskfs_truncate): For in-inode symlinks, just frob the size. * ext2fs.h (__u32, __u16, __u8, __s32, __s16, __s8): New types. * ext2_fs.h (u32, u16, u8, s32, s16, s8): All uses of these types changed to have a leading `__', and the definitions removed. * ext2_fs_i.h (u32, u16, u8, s32, s16, s8): All uses of these types changed to have a leading `__'. Mon Aug 12 11:18:37 1996 Thomas Bushnell, n/BSG * hyper.c (diskfs_set_hypermetadata): Return an error code now. 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 :-|