2000-01-02 a sun * file.c (hfs_get_block): added hfs_get_block for regular files. 1999-04-12 a sun * file_hdr.c (hdr_read): added rootinfo behaviour for DID header. 1999-04-11 a sun * super.c (parse_options): added s_version so that we can select between different versions of the same layout. 1999-04-05 a sun * linux/hfs_fs.h: unified netatalk and appledouble header format. added in all of the AFP attribute bits. * file_hdr.c: added netatalk appledouble v2 compatible headers. 1999-01-30 a sun * catalog.c (hfs_cat_move): fixed corruption problem with renames. 1999-01-27 a sun * file_hdr.c (get/set_dates): got rid of broken afpd times. NOTE: you must use netatalk-1.4b2+asun2.1.2 or newer for this. 1998-12-20 a sun * bdelete.c (del_root): assign bthLNode and bthFNode only if the root node becomes a leaf node. Disk First Aid no longer complains. Norton Utilities, of course, has decided that it doesn't like the root node number. bleah. i think that it might be due to Norton Utilities not expecting the root node to have moved. 1998-12-16 a sun * sysdep.c (hfs_revalidate_dentry): fix inode dates when there's a timezone change. 1998-12-15 root * extent.c (new_extent): expand block size variables to handle u32. * mdb.c (hfs_mdb_get): AlBlkSiz shouldn't be capped at 65535. we should be able to handle much larger volumes now. 1998-11-21 a sun * hfs_sysdep.h, hfs_fs.h: added hfs_from_utc/to_utc to deal with date differences on hfs formatted media. NOTE: hfs extended keeps everything in utc, so we'll need to deal with that when appropriate. 1998-11-12 a sun * extent.c (shrink_fork): added some lock_bitmap/unlock_bitmap's to protect hfs_clear_vbm_bits. we should no longer have problems with free_ablocks wrapping around. 1998-11-02 a sun * mdb.c (hfs_mdb_get): plugged up an mdb failed initialization leak. 1998-10-31 a sun * version.c (hfs_version): bumped to version 0.96. * mdb.c (hfs_mdb_commit): you only write out the alternate MDB when the catalog or extents overflow files grow. that just leaves the btree corruption problems. bleah (whilst deleting a bunch of files, more of the btree can get pruned away than desired). 1998-10-30 a sun * dir.c: fixed a bunch of silliness with deletions. make sure to zero out stuff and set mark_inode_dirty(). 1998-10-29 a sun * string.c (hfs_strcmp, hfs_streq, hfs_strhash): converted them to take name/len arguments instead of hfs_name to reduce copying. * dir.c, dir_nat.c, dir_cap.c, dir_dbl.c, sysdep.c: modified relevant areas to reflect string.c changes. 1998-10-28 a sun * hfs.h (hfs_lookup_dentry): oh my. more silliness. make sure to have the d_lookup use the same hash value as the one generated by hfs_hash_dentry. i also changed the argument order. (hfs_drop_special): change the argument order to be more in line with what the dcache stuff looks like. * sysdep.c (hfs_compare_dentry): the compare was returning the wrong value for correct matches and causing all sorts of mischief. this fixes both directory counts and mounting on top of hfs volumes. * file.c, file_cap.c, file_hdr.c: added mark_inode_dirty()'s in the relevant places. 1998-10-11 root * mdb.c (hfs_mdb_get): moved initialization of mdb->entry_dirty list to here to deal with trying to read a bad hfs volume. 1998-10-10 a sun * inode.c, catalog.c, dir_*.c, sysdep.c: parts of the dcache conversion didn't get done properly. specifically, i forgot to move the hfs_cat_puts into the right place. that's fixed now. 1998-09-11 a sun * mdb.c: altered mdb struct to reflect hfs plus usage. 1998-08-27 a sun * file.c, file_hdr.c, file_cap.c: dealt with the remaining copy_to/from_user() error cases. 1998-08-26 a sun * super.c (hfs_read_super): fixed to deal with cdroms. why doesn't the cdrom layer call the partition table code? Wed Jan 21 14:04:26 1998 a sun * inode.c, sysdep.c use d_iput to uncache dentry from catalog entry instead of relying on put_inode. no more NULL pointer dereferences! * catalog.c cleaned up hfs_cat_put a little. ISSUES (non-fatal): mv dir dir2 while creating files in dir screws up directory counts. deletion using netatalk screws up directory counts. Thu Jan 15 19:14:28 1998 a sun * catalog.c make deletion happen when requested instead of waiting until an hfs_cat_put as the dcache can hold onto entries for quite some time. Wed Jan 14 14:43:16 1998 a sun * catalog.c the current catalog allocation scheme allocates PAGE_SIZE/sizeof(struct hfs_cat_entry) entries at a time and keeps a pool of free entries up to this allocation unit * 8. * inode.c make sure to always hfs_cat_put if hfs_iget is going to return NULL. * string.c, catalog.c use linux' hashing method to generate hashes. the old hashing was getting collisions. catalog.c also has a larger hash table to prevent collisions. Tue Jan 13 13:06:01 1998 a sun * version.c bumped to 0.95+asun3 * catalog.c re-wrote to dynamically allocate/delete catalog entries. on a 486, entries fit into the size-256 slab. Wed Jan 7 19:33:33 1998 a sun * inode.c don't hfs_cat_put gratuitously in hfs_iget. that's a bad idea and results in screwed up entry counts. Tue Jan 6 14:38:24 1998 a sun * version.c changed it to 0.95+asun2 * sysdep.c altered catalog entry pruning to make sure that an iput gets done. for some reason, shrink_dcache_parent wasn't doing it. * catalog.c added a global dirty list to check for pruning. Tue Jan 6 12:29:52 1998 a sun * catalog.c re-wrote it to be similar to 2.1.x inode.c. this should at least make catalog.c SMP safe. * hfs.h, linux/hfs_fs.h moved dentry operations into hfs.h. these probably should be moved somewhere else. * super.c, dir_cap.c, dir_nat.c, dir_dbl.c, sysdep.c added dentry ops to hash everything to lowercase. Sun Dec 28 22:48:53 1997 a sun * sysdep.c, catalog.c, hfs.h as a temporary workaround until catalog.c gets re-written, i flush the dcache if we need more entries. Fri Dec 19 15:11:21 1997 a sun * dir_dbl.c statically allocate tmp_name instead of doing it dynamically. NOTE: well, those pesky hfs_cat_put messages still aren't gone. in addition, catalog.c needs to be modified to free up some entries when the cache gets filled up. Sun Dec 14 11:51:11 1997 a sun * linux/hfs_fs.h moved the dentry stuff into within the #ifdef __KERNEL__ part of hfs_fs.h and cleaned up a little. Sun Dec 14 11:24:54 1997 a sun * dir.c changed hfs_rename to delete all old dentries. hfs_cat_put messages on umount should be a thing of the past now. Sun Dec 14 01:12:58 1997 a sun * dir.c changed mark_inodes_deleted to dget/d_delete/dput the dentry instead of just dropping it. the bytes available should now be updated properly upon deletion. Wed Dec 10 00:01:25 1997 a sun * dir.c changed mark_inodes_deleted to drop the dentry instead of just deleting it. TODO: bytes available aren't being properly updated when a resource fork gets deleted. Mon Dec 8 23:22:40 1997 a sun * dir_cap.c, dir_nat.c, dir_dbl.c, dir.c * hfs.h, linux/hfs_sysdep.h, linux/hfs_fs_i.h Added code to drop ({dbl,cap,nat}_drop_dentry) invalid dentries when creating or moving a file. * inode.c Added code to delete cached dentries when a file gets deleted. * current yuckiness: there's an extra hfs_cat_put somewhere. it's harmless but bothersome. Thu Dec 4 00:14:03 1997 a sun * dir.c, dir_cap.c, dir_nat.c, file.c, file_hdr.c, inode.c, * linux/{hfs_sysdep.h, hfs_fs.h}, version.c: Completed first code dentrification sweep. It mounts! It copies! It dcaches! Mon Apr 28 06:58:44 1997 Paul H. Hargrove * version.c, INSTALL.sgml, HFS.sgml: Bump version to 0.95 (Woohoo! We're beta!) * linux/hfs_fs.h: Modify HFS_SB() and HFS_I() when compiled into the kernel. * FAQ.sgml: Add a new question (and its answer): Why does my Macintosh show generic application and document icons? * HFS.sgml: Add some URLs and remove the (now empty) FAQ section. Sun Apr 27 22:17:01 1997 Paul H. Hargrove * HFS.sgml: Don't call the version 1 headers "slightly modified". * file_hdr.c, dir_nat.c: Comment some AFPD compatibility stuff. * FAQ.sgml: Update for version 0.95. * BUG_INFO: Remove the BIG_INFO script since we no longer mention it. * README.sgml, INSTALL.sgml, HFS.sgml, Makefile: Split README.sgml into HFS.sgml and INSTALL.sgml. Stop including the document sources in snapshots. * file_hdr.c: Fix hdr_truncate() not to truncate the data fork. Wed Apr 16 23:56:25 1997 Paul H. Hargrove * FAQ.sgml: Bump version to 0.8.4 and add two answers: How to fsck an HFS filesystem. How to generate linux/version.h. * version.c, README.sgml: Bump version to 0.8.4. * README.sgml, FAQ.sgml, Makefile: Separate the FAQ from the README. * linux/hfs_fs.h: Add (struct hfs_fork) to the forward declarations. Thu Apr 10 05:47:16 1997 Paul H. Hargrove * linux/hfs_sysdep.h: Work around the non-const declaration of test_bit()'s second argument. * Makefile: Use .config from the kernel source to check for MODVERSIONS. Wed Apr 9 07:57:17 1997 Paul H. Hargrove * bnode.c: Check the record table in each bnode as we read it from disk. * super.c, mdb.c, hfs.h: Deal with the ATTRIB_CLEAN bit of the MDB properly (in mdb.c). * super.c, hfs.h, mdb.c: Search for the alt-MDB rather than using the device size to find it. Wed Apr 9 03:39:05 1997 Paul H. Hargrove * version.c, README.sgml: Bump version to 0.8.3. Mon Apr 7 20:09:56 1997 Paul H. Hargrove * part_tbl.c: Fix to allow bootable CDROMs (which have blocksize != 512) to mount. * super.c: Check that blk_size[MAJOR(dev)] is non-NULL before dereferencing. Sat Apr 5 10:44:42 1997 Paul H. Hargrove * hfs_btree.h, binsert.c, brec.c, bfind.c, bins_del.c, bdelete.c: Make btree operations less likely to do nasty things if the tree is corrupted. * part_tbl.c, README.sgml: Count partitions from 0 rather than from 1. Wed Apr 2 23:26:51 1997 Paul H. Hargrove * bdelete.c: Don't bother checking for oversized keys in hfs_bdelete(). * bdelete.c, bfind.c, binsert.c: Verify key lengths against the maximum given for the tree. * Makefile: Check that /usr/include/linux/modversions.h exists before including it. This allows compilation without CONFIG_MODVERSIONS enabled. Sat Mar 29 13:17:53 1997 Paul H. Hargrove * linux/hfs_fs.h, super.c, file_hdr.c, hfs.h, extent.c, file_cap.c, dir_dbl.c, dir_nat.c, dir.c, dir_cap.c, binsert.c, catalog.c, bfind.c: Make (struct hfs_bkey) and (struct hfs_brec) more "abstract". * binsert.c: Remove redundant test in hfs_binsert(). Sat Mar 29 05:24:23 1997 Paul H. Hargrove * version.c, README.sgml: Fix formatting problems in README.sgml and bump version to 0.8.2. * extent.c: Fix bug that caused serious headaches with fragmented files. Fri Mar 28 00:23:18 1997 Paul H. Hargrove * version.c, README.sgml: Bump version to 0.8.1. * btree.c, balloc.c: Commit map nodes to buffers when new map nodes are added. Thu Mar 27 22:41:07 1997 Paul H. Hargrove * Makefile: Include linux/modversions.h from the gcc command line. * mdb.c: Was updating modified date twice in hfs_mdb_commit(). * linux/hfs_sysdep.h, linux/hfs_fs.h, linux/hfs_fs_i.h, linux/hfs_fs_sb.h, sysdep.c, trans.c, super.c, hfs_sysdep.h, inode.c, hfs_fs_i.h, hfs_fs_sb.h, hfs_fs.h, hfs.h, file_cap.c, file_hdr.c, file.c, dir_nat.c, dir_cap.c, dir_dbl.c, Makefile, dir.c: Rearrange headers in preparation for inclusion in the kernel. * hfs_fs_sb.h, hfs_fs.h: Add forward declarations so other code can include these headers. * hfs_sysdep.h: Include __constant_hton[ls]() for little-endian machines. * hfs_fs.h, hfs_sysdep.h, hfs.h: Move typedefs of hfs_{byte,word,lword}_t from hfs.h to hfs_sysdep.h. Include hfs_sysdep.h from hfs_fs.h. * trans.c, super.c, part_tbl.c, string.c, inode.c, mdb.c, hfs_fs_sb.h, hfs_sysdep.h, hfs_fs.h, hfs.h, hfs_btree.h, file_cap.c, file_hdr.c, file.c, dir_nat.c, extent.c, dir_dbl.c, dir.c, dir_cap.c, catalog.c, btree.c, bnode.c, brec.c, bitmap.c, bitops.c, bins_del.c, binsert.c, bdelete.c, bfind.c, balloc.c: Big type system changes in preparation for kernel inclusion: '[US](8|16|32)' -> 'hfs_[us](8|16|32)' (avoids name space pollution) 'hfs_name_t' -> 'struct hfs_name' (allows forward declaration) * super.c, hfs_fs.h: Add init_hfs_fs() to super.c for non-module compilation. Wed Mar 26 07:53:59 1997 Paul H. Hargrove * version.c, README.sgml: Bump version to 0.8. * README.sgml: Special compilation note for DEC Alpha. * README.sgml: Note status on non-Intel processors. * hfs_fs.h: Use long's for read() and write() on the Alpha. * README.sgml: Document the afpd mount option. * inode.c: Make files always writable for owner in afpd mode. Tue Mar 25 23:21:39 1997 Paul H. Hargrove * part_tbl.c: Clean up the error checking code a bit. Sat Mar 22 19:43:40 1997 Paul H. Hargrove * part_tbl.c: Fixed uninitialized variable in old-style partition code. * bins_del.c, bdelete.c: Fix extraneous "bad argument to shift_{left,right}" messages. * bitops.c: Note that these routines are now tested on Intel, PPC and Alpha. * Makefile: Add -fno-builtin to the CFLAGS. Fri Feb 14 10:50:14 1997 Paul H. Hargrove * hfs_sysdep.h: Don't include until after . * catalog.c: Use volume create date in hashfn() rather than casting pointer to int. * hfs.h, mdb.c: Maintaing volume create, modify and backup dates in struct hfs_mdb. * hfs_fs.h: Include the header for put_user BEFORE using it! * string.c, hfs.h: Make hfs_strhash() return an unsigned int. * trans.c, version.c, super.c, mdb.c, part_tbl.c, string.c, inode.c, hfs_sysdep.h, hfs_fs.h, hfs_fs_sb.h, hfs_btree.h, hfs.h, file_cap.c, file_hdr.c, extent.c, dir_dbl.c, dir_nat.c, dir_cap.c, dir.c, catalog.c, btree.c, bnode.c, brec.c, bitmap.c, binsert.c, bins_del.c, bdelete.c, balloc.c, README.sgml, Makefile: Updated copyright notices. * trans.c, part_tbl.c, string.c, super.c, inode.c, mdb.c, hfs_fs.h, hfs_fs_sb.h, hfs_sysdep.h, hfs_btree.h, hfs.h, file_cap.c, file_hdr.c, dir_nat.c, extent.c, dir_cap.c, dir_dbl.c, catalog.c, dir.c, brec.c, btree.c, bitmap.c, bnode.c, bdelete.c, bins_del.c, binsert.c, Makefile, TODO, balloc.c: First shot at portability to the DEC Alpha and non-gcc compilers. This involved a significant overhaul of the type system. Tue Feb 4 04:26:54 1997 Paul H. Hargrove * version.c, README.sgml: Bump version to "pre-0.8-4". * dir_nat.c: Allow creat() in Netatalk .AppleDouble directories. * dir_dbl.c: Make local functions static. * dir_dbl.c: Removed unnecessary 'extern' qualifiers from forward declarations. * file_hdr.c, TODO: Fixed the 30-year time warp with afpd. * TODO, trans.c: Don't mangle the name .AppleDesktop under fork=netatalk. Mon Feb 3 23:18:45 1997 Paul H. Hargrove * inode.c: Make header files always writable when the afpd mount option is given. Otherwise it is impossible to unlock a locked file. * TODO, inode.c: Let afpd think chmod() always succeeds, so "New Folder" works right. * super.c: The 'afpd' mount option now makes 'fork=n,names=n' the default. * TODO: List the current known afpd-compatibility problems as bugs. * file_hdr.c: Make certain date changes through header files get written to disk. Sat Feb 1 02:24:12 1997 Paul H. Hargrove * mdb.c: Work around for Linux rounding device sizes to 1k increments. * README.sgml: Fixed a typo: "the a". Sat Dec 28 20:41:01 1996 Paul H. Hargrove * TODO: Add ioctl() interface as a "missing feature." * dir_nat.c: Finish implementing the afpd-compatibility mode using the new 'afpd' mount option. * hfs_fs_sb.h, super.c: Add new 'afpd' mount option. * file_cap.c: Spelling fix. Wed Dec 11 23:16:08 1996 Paul H. Hargrove * TODO, README.sgml: Optimistically document the hybrid CD problem as fixed. * part_tbl.c: Fix the partition code so at least some of the hybrid CDROMs that were previously rejected are now accepted. * hfs.h: Make fs_start a 32-bit integer rather than 16-bits. The 16-bit value would overflow if a partition started beyond the 32M mark (e.g. the Executor 2 Beta 1 CDROM). * extent.c: Fixed a typo in an error message. Tue Dec 10 14:43:46 1996 Paul H. Hargrove * dir_nat.c: Merge in the (still dormant) afpd-compatibility changes. * inode.c: Make the .AppleDouble directory writable (again). * version.c, README.sgml: Bump version up to "pre-0.8-3". * hfs_fs.h, file_cap.c, file_hdr.c: Move AFP constants to hfs_fs.h and prefix them with "HFS_". * dir_nat.c, inode.c: Back-out changes that allowed writing to the .AppleDouble directory. * Makefile: Update rules for linuxdoc-sgml v1.5. * extent.c: Fixed serious bug in decode_extent() with handling of empty extents. * file.c: Rewrote hfs_getblk(). It will no longer hang if hfs_extent_map() is buggy. Also halves the worst-case number of calls to hfs_extent_map(). * extent.c: Fixed serious bug in decode_extent() with handling of empty extents. * hfs_fs.h: Small change so the PPC (and maybe other architectures?) pick up the prototypes for the user-space access functions. * super.c, file_cap.c, file_hdr.c, hfs_fs.h, file.c: Updated for new user-space memory interface. Sun Dec 8 11:49:36 1996 Paul H. Hargrove * dir_nat.c: Add special code for unlink(), and rename() in the .AppleDouble directory and rmdir() of the .AppleDouble directory. * inode.c: Make the .AppleDouble directory writable. * file_hdr.c: Use AFP flags in version 1 headers (for Netatalk compatibility). * trans.c: Fixed bug with long names causing kernel Oops. Mon Oct 7 06:05:01 1996 Paul H. Hargrove * hfs_fs.h, file_cap.c, file_hdr.c, hfs.h, extent.c, file.c, dir.c: Fix types for various read/write/truncate computations. Also allows compilation with 2.1.x kernels. Thu Sep 19 10:28:43 1996 Paul H. Hargrove * README.sgml, version.c: Bump version up to "pre-0.8-2". * TODO: Reformat the To Do list introducing prioritized categories. * file_hdr.c, file.c: Move comments about mmap() for headers from file.c to file_hdr.c. Also revise the reasoning for not yet having it implemented. * dir_nat.c, dir_cap.c, dir_dbl.c: Remove 'hfs_' prefix from names of some purely local functions. * dir_dbl.c, TODO: Under AppleDouble make create(), mkdir(), mknod(), unlink(), rename() and rename() check against header files when arguments start with '%'. * super.c, hfs_fs_sb.h, hfs_fs.h, dir_dbl.c, dir_nat.c, dir_cap.c, dir.c, README.sgml: Fix problem that prevented creating %RootInfo or .rootinfo in all directories in addition to preventing deletion from the root directory. * TODO: Remove writable header files from the To Do list. * README.sgml: Add extensive discussion of writing to HFS filesystems and the format of the special files. * file_hdr.c: Generate the 'homefs' field for version 1 header files. Wed Sep 18 23:07:45 1996 Paul H. Hargrove * hfs_fs.h, file_cap.c: Comment the definition of (struct hfs_cap_info). * version.c, README.sgml: Bump version up to "pre-0.8-1" and update the "How can I write?" FAQ. * file_hdr.c: Implement hdr_write() and hdr_truncate()!! * hfs_fs_i.h, inode.c: Make hdr_layout per-inode (not per-file) so hdr_truncate() will work. * file.c, hfs.h, catalog.c, extent.c, balloc.c: hfs_extent_adj() now uses fork->lsize to determine the target file size. Sun Sep 15 07:55:24 1996 Paul H. Hargrove * README.sgml, trans.c: Prevent creation of files & directories with '\0' or ':' in their names. * string.c, hfs_fs.h, hfs.h, dir_dbl.c, dir_nat.c, dir_cap.c: With case=lower could have run off end of string. Tue Sep 10 12:05:47 1996 Paul H. Hargrove * inode.c: Small clean up of HFS_FIL_LOCK handling. * inode.c: Fix notify_change() not to accidentally make metadata executable. * hfs_fs.h: AppleSingle files should have HFS_ITYPE_NORM. * inode.c: Return to old behavior where MdDat = i_mtime. * dir_dbl.c: Fix serious bug in hfs_dbl_readdir() that would lock-up access to a directory if one tried to write to a directory they had previously read. * file.c: Fix hfs_do_write() to adjust the fork's 'lsize' if it changed. * inode.c, file_cap.c: Allow truncate() to be called even on metadata. Any size changes will last only until the next iput() of the inode. Truncating a header file doesn't yet truncate the resource fork. * inode.c: Allow chmod() on a directory if it doesn't actually change i_mode. * hfs_fs.h, trans.c, super.c: Rename hfs_cap2mac() to hfs_colon2mac(). Rename hfs_apl2mac() to hfs_prcnt2mac(). * file_hdr.c: Move header construction out of hdr_read() to create hdr_build_meta(). * hfs.h: Add byte-order independent conversions: U32->U16, U32->U8 and U16->U8. * file.c, file_cap.c, hfs_fs.h: Rename fix_perms() to hfs_file_fix_mode() and move it from file_cap.c to file.c. * README.sgml, super.c: Make the default for the names mount option vary with the fork option. * file_cap.c: The umask was applied incorrectly in fix_perms(). Mon Sep 9 13:11:28 1996 Paul H. Hargrove * README.sgml: Note that it compiles on m68k machines, but needs more testing. * hfs_sysdep.h, Makefile: Changes to compile unmodified on m68k (and possibly other machines). * dir_cap.c: hfs_cap_readdir() was mistakenly producing .rootinfo entries for the .finderinfo and .resource subdirectories of the root directory. * inode.c: A directory's i_size was too small by 1 under CAP, so hfs_cap_readdir() would omit the last directory entry. i_nlink was also too large by 1. Sun Sep 8 12:56:06 1996 Paul H. Hargrove * file_hdr.c: Rewrite hdr_read() to be more efficient and to deal correctly with descriptors having lengths that differ from the actual size of the data. * file_cap.c: Add write support for CAP finderinfo files!! * super.c, inode.c, hfs_fs.h, hfs_fs_i.h, hfs_fs_sb.h, file_dbl.c, file_nat.c, file_hdr.c, file.c, file_cap.c, Makefile, dir.c: Generate metadata (header files and CAP finderinfo files) on-the-fly. The files file_{dbl,nat}.c are merged into file_hdr.c as a result. Sat Sep 7 08:09:24 1996 Paul H. Hargrove * README.sgml: Fix silly grammatical error. Fri Sep 6 09:17:12 1996 Paul H. Hargrove * hfs_fs_sb.h, super.c: No need to cast type of s_reserved. * file_dbl.c, file_nat.c, dir_dbl.c, dir_nat.c, file_cap.c, dir_cap.c: Add the missing NULL readpage and writepage entries to the inode_ops. * file_dbl.c, file_nat.c, file.c, file_cap.c: Cleanup error checking for read() and write(). Thu Sep 5 05:29:53 1996 Paul H. Hargrove * version.c, README.sgml: Bump version up to "0.7.2". User-visible changes from 0.7.0: + Corrected CAP finderinfo file format. + Support for more features of CAP finderinfo files. + No longer requires gcc 2.7.0 or newer. + Now implements mknod() system call. * hfs_fs.h, dir_nat.c, file_cap.c, file_nat.c, README.sgml, dir_cap.c: Include the CAP and Netatalk copyright notices. * hfs_fs.h, file_cap.c: Repair and improve CAP support. * catalog.c: Oops! The BkDat for new files and directories was in 1972 when it should have been in 1904 (not that it matters that much). * inode.c: The HFS MdDat should be the larger of the i_mtime and i_ctime. * README.sgml: Change 'm_time' to 'i_mtime'. Wed Sep 4 13:27:35 1996 Paul H. Hargrove * version.c, README.sgml: Bump version up to "0.7.1". User-visible changes from 0.7.0: + Minor bug in CAP finderinfo file format fixed. + No longer requires gcc 2.7.0 or newer. + Now implements mknod() system call. * README.sgml: Removed note about needing gcc 2.7.0 or newer. * file.c: Optimize hfs_do_read() based on the fact that HFS has no holes in files. Minor code formatting changes. * hfs.h, hfs_sysdep.h, mdb.c, extent.c, file.c, btree.c, catalog.c, balloc.c, bnode.c: Reorganize memory management routines. hfs_malloc() and hfs_free() are the main routines. The macros FREE() and MALLOC() are gone. HFS_NEW() and HFS_DELETE() are new 'shorthand' macros. * btree.c: Fix broken debugging code. * super.c, hfs.h, mdb.c, part_tbl.c, Makefile: Separate partition table handling into its own file. * dir.c: Spelling fixes. * sysdep.c: Oops! Error check got sense reversed while editing. * mdb.c, sysdep.c, hfs.h, hfs_btree.h, hfs_sysdep.h, btree.c, extent.c, bfind.c, bnode.c, balloc.c: Make hfs_buffer a pointer to a buffer_head, rather than a buffer_head. * hfs_fs.h, dir_cap.c, dir_dbl.c, dir_nat.c, dir.c: Add a mknod() entry to the inode_operations for normal directories. All it is good for is letting root create regular files. * file_dbl.c, file_nat.c, file.c, file_cap.c, dir_cap.c, dir_dbl.c, dir_nat.c: Add the missing NULL entries to the end of the file_operations. * super.c, hfs_btree.h, hfs_fs.h, mdb.c, extent.c, hfs.h, catalog.c: Make the remainder of the (untested) changes to allow compilation with gcc 2.6.3. * hfs_fs.h: Fix hfs_fs.h to work with gcc 2.6.3. * hfs_fs.h: (struct hfs_cap_info) should never have been 'packed'. * BUG_INFO: Use -V for getting version of module utilities. * super.c, sysdep.c, trans.c, hfs_fs_sb.h, inode.c, hfs_fs.h, hfs_fs_i.h, file_cap.c, file_dbl.c, file_nat.c, dir_dbl.c, dir_nat.c, file.c, dir.c, dir_cap.c: Fix up hfs_fs{,_i,_sb}.h in preparation for inclusion in kernel. Tue Sep 3 23:58:03 1996 Paul H. Hargrove * hfs.h: Change eventual destination to linux/fs/hfs rather than include/linux. * super.c, inode.c, mdb.c, hfs_btree.h, hfs_fs.h, hfs_sysdep.h, file_dbl.c, file_nat.c, hfs.h, dir_nat.c, extent.c, dir_dbl.c, catalog.c, dir_cap.c, brec.c, btree.c, binsert.c, bnode.c, bdelete.c, bfind.c, bins_del.c, balloc.c: Replace all the swap{16,32}() stuff w/ ntohl() and friends. Fri Aug 30 09:51:23 1996 Paul H. Hargrove * version.c, README.sgml: Rewrite installation instructions and bump version up to "0.7.0". * Makefile: Remove the INCDIR variable; we now rely on the user to have the correct links in /usr/include. Mon Aug 26 12:25:41 1996 Paul H. Hargrove * version.c, README.sgml: Reformat the documentation and bump version up to "pre-0.7-9". Hopefully this will become version 0.7 in a few days. Thu Aug 22 08:00:44 1996 Paul H. Hargrove * README.sgml, version.c: Bump version up to "pre-0.7-8". * file_nat.c, file_dbl.c: AppleDouble headers had resource fork size in wrong byte order. Wed Aug 21 05:22:28 1996 Paul H. Hargrove * version.c, README.sgml: Bump version up to "pre-0.7-7". * bnode.c: Fixed a long-standing bug in hfs_bnode_lock(). This bug occasionally caused lock-up under heavy load. Tue Aug 20 09:15:10 1996 Paul H. Hargrove * README.sgml, version.c: Bump version up to "pre-0.7-6". * catalog.c: Fix a deadlock problem in catalog readers/writers locking. * bins_del.c: hfs_bnode_update_key() was still corrupting the header node sometimes. * catalog.c, dir.c: Fix problem with extending the catalog B-tree hanging hfs_cat_commit(). Fix a race that could delete a non-empty directory. Sun Aug 18 23:16:43 1996 Paul H. Hargrove * version.c, README.sgml: Bump version to "pre-0.7-5" for test release. * dir_cap.c, README.sgml: Change ".:rootinfo:" to ".rootinfo". * hfs_fs.h, dir_cap.c, dir_dbl.c, dir_nat.c: Mangle the names as first step in hfs_{cap,dbl,nat}_lookup(). Use the new hfs_streq() to catch mixed case matches to the special files and directories in hfs_{cap,dbl,nat}_lookup(). Store reserved names only once. * dir.c, hfs.h, string.c: Implement hfs_streq() which tests for string equality more rapidly than hfs_strcmp() by checking for equal length first, and use it when checking for reserved names. * inode.c, TODO, dir_cap.c, dir_dbl.c, README.sgml: Provide the metadata for the root directory for the CAP and AppleDouble schemes in the files ".:rootinfo:" and "%RootInfo", respectively. * TODO, super.c: Add (untested) support for the old Mac Plus style of partition map. * bdelete.c, TODO: Note the possibility of bdelete() to hanging on a corrupted B-tree. * TODO: Add items corresponding to some of the 'XXX' comments in the sources. * dir_dbl.c, dir_cap.c: Update comments, removing ref. to a comment that once existed in inode.c * catalog.c: Remove some redundant locking and error checks that had been previously marked as questionable. Sat Aug 17 08:06:56 1996 Paul H. Hargrove * binsert.c, bfind.c, bins_del.c, balloc.c, bdelete.c: Edited some comments for correctness. * README.sgml, version.c: Bump version up to "pre-0.7-4" in preparation for snapshot release. * Makefile: Have 'make dep' delete the *.o and *.s files. * catalog.c, hfs.h, TODO, bfind.c: Move looping from hfs_cat_next() into hfs_bsucc(), where it can be done an entire node at a time. Fri Aug 16 05:02:59 1996 Paul H. Hargrove * TODO: Add AppleShare support to the list of goals. * trans.c, super.c, hfs_fs.h, README.sgml: Add a "names=netatalk" mount option, since Netatalk quotes initial periods and CAP doesn't. * Makefile: Oops! Had removed the 'include .depend' from Makefile. * inode.c, hfs_fs.h, file_nat.c, file_dbl.c, file.c, dir_nat.c, dir_dbl.c, dir_cap.c, dir.c, README.sgml: Update for 2.0.1 and newer kernels. * Makefile: Get rid of ifeq stuff and use a .tmpdepend file to make sure a failed 'make depend' doesn't allow a 'make hfs.o'. Wed Aug 14 01:03:01 1996 Paul H. Hargrove * version.c, README.sgml: Bump version up to "pre-0.7-3" in preparation for snapshot release. * btree.c, extent.c, bnode.c: Fix up some debugging code. Tue Aug 13 12:42:12 1996 Paul H. Hargrove * version.c, README.sgml: Bump revision to "pre-0.7-2". * super.c, sysdep.c, mdb.c, file_nat.c, inode.c, file_cap.c, file_dbl.c, file.c, extent.c, dir.c, catalog.c, btree.c, bnode.c, balloc.c: Added the remaining missing function comments. * Makefile, README.sgml: Simplify the default make rule to build the dependency file AND hfs.o. Change the installation instructions to reflect the change. * hfs.h: Added missing structure comments. * bdelete.c: Merge bdelete_brec() back into hfs_bdelete(). Add missing function comments. * extent.c: Insignificant code change removing an unneeded indirection. * btree.c, hfs_btree.h, balloc.c, bnode.c: Add a 'sys_mdb' field to (struct hfs_btree). * extent.c, hfs_sysdep.h, sysdep.c, bnode.c, balloc.c, bfind.c, Makefile: Move hfs_buffer_read() from hfs_sysdep.h to sysdep.c so it can use the symbol HFS_SECTOR_SIZE rather than the manifest constant 512. Have hfs_buffer_read() print an error message, and remove redundant errors from the callers. * hfs_sysdep.h, mdb.c, super.c, file.c, hfs.h, hfs_btree.h, catalog.c, extent.c, btree.c, balloc.c, bfind.c, bnode.c: Get rid of the type hfs_device and the fields of that type, using the type hfs_sysmdb and the 'sys_mdb' field in its place. * Makefile: Fix definition of HDRS variable. * README.sgml, version.c: Bump version up to "pre-0.7-1". * Makefile: Separate sources and headers into three groups: B-tree code, HFS code and Linux code. * bitmap.c, bitops.c, hfs.h, hfs_sysdep.h, balloc.c: Implemented portable set of bit operations in hfs_sysdep.h * mdb.c, hfs_sysdep.h, hfs_btree.h, extent.c, btree.c, bitmap.c, bnode.c, balloc.c: Implement a portable set of buffer operations in hfs_sysdep.h * TODO: Remove note about separating header files into two parts. * catalog.c: Remove call to hfs_mdb_dirty(), since the hfs_brec_relse() does it. * hfs.h, extent.c, file.c: Move hfs_getblk() from extent.c to file.c, since that is now the only file that actually uses it. * balloc.c: Replace use of hfs_getblk() in balloc.c with a local function (get_new_node()) that doesn't retry, since B-trees can't shrink. * hfs.h, hfs_btree.h, hfs_sysdep.h, mdb.c, extent.c: Make hfs_buffer a typedef. * inode.c, hfs.h, hfs_sysdep.h, dir.c: Change hfs_sysentry to a typedef. Rename 'sysentry' field of (struct hfs_cat_entry) to 'sys_entry'. * super.c, mdb.c, catalog.c: Rename hfs_cat_sync() to hfs_cat_commit() and call it from hfs_mdb_commit() rather than from hfs_write_super(). * catalog.c, file.c: Minimize the calls to hfs_mdb_dirty(). Now called when: 1) A buffer holding a volume bitmap block is dirtied. 2) A dirty B-tree node is written back to the buffers. 3) A dirty catalog entry is written back to the buffers. * hfs_sysdep.h, hfs.h: Make hfs_sysmdb a typedef. Sun Aug 11 08:46:10 1996 Paul H. Hargrove * hfs_sysdep.h, extent.c, hfs.h: Replace hfs_mdb_{lock,unlock} with more portable scheme using a wait queue in the MDB. * hfs.h, hfs_btree.h, hfs_sysdep.h, bnode.c, catalog.c, binsert.c: Make hfs_wait_queue a typedef'd pointer to a (struct wait_queue). Rename hfs_wait_on() to hfs_sleep_on(). * catalog.c, hfs_sysdep.h, super.c, bfind.c, bnode.c, balloc.c: Implemented hfs_dev_name() in hfs_sysdep.h as a portable call to produce a device name. * super.c, hfs.h, mdb.c: Rename hfs_mdb_read() to hfs_mdb_get(), and don't take a 'sys_mdb' argument. That's the callers responsibility. * sysdep.c, Makefile: Remove the pointless file sysdep.c * README.sgml: Clean up the "System Requirements" section. Sat Aug 10 22:41:24 1996 Paul H. Hargrove * sysdep.h, sysdep.c, super.c, hfs_sysdep.h, mdb.c, string.c, hfs_fs.h, hfs_fs_i.h, hfs_fs_sb.h, hfs_btree_private.h, hfs_btree.h, file_cap.c, file_dbl.c, file_nat.c, hfs.h, file.c, dir_nat.c, extent.c, dir.c, dir_cap.c, dir_dbl.c, catalog.c, bnode.c, brec.c, btree.c, binsert.c, bitmap.c, bitops.c, bfind.c, bins_del.c, Makefile, balloc.c, bdelete.c: Includes the hfs.h that was missing from the previous check in. MAJOR include-file cleanup: hfs_btree.h merged into hfs.h hfs_btree_private.h renamed hfs_btree.h sysdep.h renamed hfs_sysdep.h Fixed some minor portability fixes shown up by the header split. * README.sgml: Add instructions for a dealing with a missing linux/version.h * hfs_fs.h, mdb.c, string.c, catalog.c, extent.c, btree.c, bitmap.c, bitops.c, bnode.c, brec.c, bins_del.c, binsert.c, bdelete.c, bfind.c, balloc.c: Major split of hfs_fs.h into Linux-specific part (hfs_fs.h) and HFS-specific part (hfs.h). * file.c, extent.c: Move hfs_getblk() from file.c to extent.c * sysdep.h, super.c, mdb.c, hfs_fs_sb.h, hfs_fs.h, file.c, extent.c, catalog.c, bnode.c, bitmap.c: Make the field 's_mdb' in (struct hfs_sb_info) a pointer to the MDB, rather than the actual MDB. This allowed the definition of (struct hfs_mdb) to be moved from hfs_fs_sb.h to hfs_fs.h. * ccache.c, hfs_fs.h, Makefile, catalog.c: Merged ccache.c and catalog.c into the latter. Moved definition of (struct hfs_cat_rec) into catalog.c * extent.c: Oops! Last set of changes didn't compile but they're OK now. * hfs_btree.h, hfs_fs.h, mdb.c, ccache.c, extent.c, btree.c: Move the definition of (struct hfs_raw_extent) inside extent.c and treat it as simple array of U16's elsewhere. * hfs_fs.h, dir_dbl.c, dir_nat.c, ccache.c, catalog.c, dir_cap.c: Make hfs_cat_next() return the CNID and cdrType of the entry. Now catalog.c and ccache.c are the only files which depend on the structure of a catalog record on disk. * dir.c, hfs_fs.h, catalog.c: Replace hfs_cat_new_{file,dir}() with hfs_cat_{create,mkdir}() which are wrappers for what used to be hfs_cat_create(). * hfs_fs.h, mdb.c, super.c, Makefile: Split super.c into super.c (Linux stuff) and mdb.c (MDB stuff). * super.c, hfs_fs_sb.h: Add the MDB field 'drAtrb' to (struct hfs_mdb) as the field 'attrib'. * hfs_fs_sb.h, super.c: Split hfs_read_super() into hfs_read_super() and hfs_mdb_read(). * super.c, hfs_fs_sb.h: Remove the unneeded 'hs' field from (struct hfs_mdb). * TODO: Remove item about hfs_notify_change() needing to update metadata. * inode.c, hfs_fs.h, hfs_fs_sb.h, file_cap.c, file_dbl.c, file_nat.c, file.c, dir.c: Add a flags argument to hfs_{cap,dbl,nat}_buildmeta() so that it only builds the parts that are currently out-of-date. Call hfs_{cap,dbl,nat}_buildmeta() through hfs_update_meta() in hfs_notify_change() and hfs_rename() to update the metadata. * dir.c: Make test for normal dir in update_dirs_{plus,minus}() more explicit. * inode.c, file_cap.c, file_dbl.c, file_nat.c, dir_dbl.c, dir_nat.c, file.c, README.sgml, dir_cap.c: Resolve the "meta-data" vs. "metadata" rivalry in favor of the latter. * btree.c: Simplify some debugging code. * hfs_btree_private.h, bnode.c, btree.c, balloc.c: Put the in-core copy of the header node IN the B-tree structure rather than just a pointer to it. * hfs_btree_private.h, btree.c, bnode.c: Have hfs_btree_commit() call hfs_bnode_commit() to commit the header and root nodes. * hfs_fs.h, super.c, hfs_btree_private.h, btree.c, hfs_btree.h, balloc.c: Change hfs_commit_mdb() to hfs_mdb_commit(). Make hfs_mdb_commit() call hfs_btree_commit(). Move code to update B-tree size and extent from hfs_btree_extend() to hfs_btree_commit(). Make hfs_btree_extend() call hfs_mdb_commit(). * super.c: Change hfs_commit_super() to hfs_commit_mdb(). * btree.c, bnode.c, bfind.c: Fixed up broken debugging code and error messages. * super.c, hfs_btree_private.h, btree.c, hfs_btree.h, bdelete.c, binsert.c, balloc.c: Now use write-back caching of B-tree header fields. * hfs_fs.h: Get rid of the add{16,32}() inlines as they are no longer used. * hfs_btree_private.h, binsert.c, btree.c, bdelete.c, bfind.c, balloc.c: All the needed fields of the B-tree header are now cached for reading, but not yet writing. * TODO: Remove "Implement write count" from TODO list. * file.c, super.c, bnode.c: Implement write count. * catalog.c: Fix directory entry counting in hfs_cat_move(). * balloc.c: Simplify hfs_btree_extend(), since the allocation request will get rounded up to the clumpsize. * extent.c: Honor clumpsize when allocating blocks to files. * file_cap.c, file_dbl.c, file_nat.c, super.c, dir.c, file.c, ccache.c, catalog.c, balloc.c: Mark 44 functions in need of commenting. * hfs_fs_sb.h, super.c, extent.c, hfs_fs.h, ccache.c, btree.c, balloc.c: Record clumpsize in allocation blocks rather than 512-byte blocks. * sysdep.h, super.c, TODO, balloc.c, hfs_fs_sb.h: Now updates the backup MDB when a B-tree grows. * extent.c: hfs_extent_free() had test against NULL backward. The result is that access to a file with extents in the extents B-tree would result in an infinite loop in hfs_cat_put(). * hfs_fs_sb.h, super.c, hfs_fs.h: Reorganize partition map code to get size of partition in preparation for dealing with the alternate MDB. Fri Aug 9 03:25:13 1996 Paul H. Hargrove * Makefile: Add make rules for README.{ps,info} * README, README.sgml, DOC, FAQ, Makefile, .cvsignore, Merge CHANGES into ChangeLog. Merge DOC, FAQ and README into README.sgml. Add make rules for building README.{txt,dvi} * BUG_INFO, Makefile: Added a BUG_INFO script which attempts to collect some useful information which I'd like to see in every bug report I receive. * Makefile, version.c: Added version.c which contains a version string. Thu Aug 8 21:48:24 1996 Paul H. Hargrove * trans.c: Fix Latin-1 -> Macintosh filename mapping to change colons to pipes. * trans.c: Fixed Mac->Latin-1 translation to behave as documented for the extended 8-bit characters without corresponding Latin-1 characters. * inode.c, super.c, file.c, hfs_fs_i.h, hfs_fs_sb.h, DOC: Added a conv={binary,text,auto} mount option similar to that of the msdos, hpfs and iso9660 filesystems, but applying only to data forks. As compared to those filesystems, HFS has the advantage that only a single CR need be converted to a NL, rather than a CR/NL sequence, so it is quite safe to seek in the file. Additionally the 'Type' field is far more reliable indicator of text files than a file extension. * super.c: Simplified parsing of mount options. * super.c: Oops! The part= mount option was being parsed in octal! * TODO: Remove "case=lower" from the list of goals. * super.c, hfs_fs.h, hfs_fs_sb.h, string.c, dir_dbl.c, dir_nat.c, dir_cap.c, DOC: Resurrect the case={asis,lower} mount option. * dir.c: Simpler test for "normal" directory in update_dirs_{plus,minus}(). * hfs_fs_sb.h, super.c, dir.c, hfs_fs.h, catalog.c, DOC: Add mount options to specify what Type and Creator will be used for new files and change the default from NULLs to "????". Wed Aug 7 11:32:22 1996 Paul H. Hargrove * catalog.c: In hfs_cat_next() use entry->cnid rather than the key of the initial brec to identify the end of the directory. * README: Update for pre-0.7 version. * hfs_fs.h: Create versioned module if CONFIG_MODVERSIONS is set in linux/config.h * TODO: Note need for special steps for unaligned accesses on some machines. * FAQ: Added Q0: What is HFS? Added Q7: Does hfs_fs work w/ 400k and 800k diskettes? Brought Q6 (about writability) up to date. Made a few other answers more verbose. Tue Aug 6 00:58:46 1996 Paul H. Hargrove * Makefile: Changed 'snapshot' rule to include cvs tag command. * hfs_fs.h, dir_cap.c, dir_dbl.c, dir_nat.c, catalog.c, ccache.c: Implemented readers half of dir locking scheme so readdir() should produce consistent results and count_dir_entries() is not race prone. * catalog.c: hfs_cat_move() was calling hfs_cat_decache() after changing the key rather than before, corrupting the hash lists. Mon Aug 5 14:03:46 1996 Paul H. Hargrove * hfs_fs.h, catalog.c: Implemented the writers half of a locking scheme for directories. * inode.c: Fixed a serious bug in hfs_notify_change() that would allow a chmod() on directory meta-data and would cause the directory inode (if it was in memory at the time) to change into a file inode. * inode.c: Fixed a problem with write permissions on directory meta-data. * dir_dbl.c, dir_nat.c, dir_cap.c: hfs_{cap,dbl,nat}_readdir() now return the correct value in the 'd_ino' field of the dirent for all cases, something I think has always been done incorrectly until now. * dir_nat.c, inode.c, dir_cap.c: In hfs_{cap,nat}_lookup() take advantage of the 'file_type' field of (struct hfs_inode_info). * TODO: Removed two accomplished goals (rename() and improved readdir()). * inode.c, dir_dbl.c, dir_nat.c, hfs_fs_i.h, dir.c, dir_cap.c: Rewrite hfs_{cap,dbl,nat}_readdir() to take advantage of hfs_cat_next(). They now use a uniform 'i_size' for all inodes for a given directory. This simplifies update_dirs_{plus,minus}() and eliminates the need for the 'file_size' and 'dir_link' fields of (struct hfs_inode_info). For the CAP and Netatalk schemes the meta-data directories are now the last entries rather than coming just after '.' and '..'. This is in preparation for the day when we can write to the files in those directories, and ensures that when using 'tar' to copy HFS filesystems the file or directory will be created before the meta-data is written. Otherwise we could be stuck writing meta-data and not knowing if it is for a file or a directory! * ccache.c: Updated count_dir_entries() for new hfs_cat_next(). * hfs_fs.h, catalog.c: hfs_cat{nth,next}() no longer take a 'types' argument, so they now return all entries. hfs_cat_next() now uses the ParID of the key to detect the end of the directory. hfs_cat_nth() now accepts n=0 as a valid input, requesting the thread. * trans.c, string.c, super.c, dir_nat.c, hfs_fs.h, dir.c, dir_cap.c, dir_dbl.c, catalog.c: Rename (struct hfs_cname) to the more appropriate (struct hfs_pstr). * hfs_fs.h, hfs_btree.h: Move some constants from hfs_fs.h to hfs_btree.h * bdelete.c, hfs_btree.h: Remove hfs_bdelete_brec() from public B-tree interface. * hfs_btree_private.h, hfs_fs.h, btree.c, hfs_btree.h, bnode.c, brec.c, bfind.c, bins_del.c, binsert.c, balloc.c, bdelete.c, Makefile: Split B-tree stuff into public and private parts: brec.c split into bfind.c and brec.c hfs_btree.h split into hfs_btree.h and hfs_btree_private.c * inode.c: The tests and sets of the HFS_FIL_LOCK bit where all reversed! * hfs_fs.h, ccache.c: Redo some ccache stuff, removing the 'error' field from (struct hfs_cat_entry) and ensuring that hfs_cat_put() will not sleep on an uninitialized entry. Sun Aug 4 23:43:28 1996 Paul H. Hargrove * sysdep.h: Change swap{16,32}() back to macros since hton[ls]() are functions. * hfs_fs.h, ccache.c: Use only lowest order byte of parent CNID in hashing a catalog key. * bdelete.c: The "improved" bdelete() was TOO paranoid looking for missing parents. * ccache.c: Get rid of pointless swap16const(0). * hfs_fs.h, inode.c, extent.c, ccache.c, dir_cap.c, dir_nat.c, binsert.c, catalog.c: Store cnid and associated constants in big-endian byte order. This reduces the number of byte-order swaps required. * sysdep.h: Make swap32() and swap16() inline functions. * dir_nat.c, dir_cap.c, dir_dbl.c: Added hfs_rename() to the inode_operations for normal directories. * dir.c, hfs_fs.h: Added hfs_rename() and cleaned up hfs_{create,mkdir,unlink,rmdir}(). * catalog.c: Added the missing check for moving a directory into itself. * catalog.c, ccache.c, hfs_fs.h: Implement a nearly ideal hfs_cat_move(). It still needs to prevent moving a directory into itself. The functions hfs_cat_{create,delete,move}() still need work with respect to their atomicity (especially vs. readdir). * bdelete.c: Fixed a serious bug in hfs_bdelete_brec() that would yield a corrupted b-tree when the first record in a bnode was deleted. Made bdelete() more aggressive when checking for missing parents. Sat Aug 3 06:11:50 1996 Paul H. Hargrove * btree.c, super.c: Fixed a problem that caused a kernel oops when no HFS filesystem is found. Wed Jul 24 13:06:12 1996 Paul H. Hargrove * catalog.c: Remove race in hfs_cat_create() that could overflow directory valence. * catalog.c: Fix hfs_cat_create() so the parent directory doesn't get deleted out from under it. Otherwise we could have created files and directories in deleted directories. * hfs_fs.h, dir_cap.c, dir_dbl.c, dir_nat.c, catalog.c, ccache.c: Redo hfs_cat_{next,nth}() in terms of which entry types to allow, rather than which to skip. * catalog.c: The function hfs_cat_create() would fail to hfs_cat_put(entry) if the 'record' argument was invalid or if the 'result' argument was NULL. * dir.c: The functions hfs_{create,mkdir,unlink,rmdir} all failed to call iput() when their arguments conflicted with a reserved name. * catalog.c, hfs_fs_sb.h: Start over on rename(). Still unfinished. Fix silly bug in hfs_cat_create() that made it always fail. * ccache.c: Fix byte-order bug in write_entry(). Tue Jul 23 12:12:58 1996 Paul H. Hargrove * dir_dbl.c, dir_nat.c, hfs_fs.h, dir.c, dir_cap.c: Remove the macros KEY() and PARENT() since the key is now easy to access through the catalog entry. Replace the macros NAME{IN,OUT}() with inline functions hfs_name{in,out}() to gain type checking of arguments. * catalog.c: Remove the macro TYPE(). * inode.c, file_dbl.c, file_nat.c, file.c, file_cap.c: Remove the #define's of the unused macro KEY(). * hfs_fs.h, dir_cap.c, dir_dbl.c, dir_nat.c, catalog.c, dir.c: Replace hfs_lookup_parent() in dir.c with hfs_cat_parent() in catalog.c. This new function performs locking to protect against rename() changing the parent during I/O. It is also intended for use with files as well as directories. Change hfs_{cap,dbl,nat}_lookup() to use the new function. * dir.c, hfs_fs.h, catalog.c: Remerge hfs_cat_{create,mkdir}() into hfs_cat_create() and resurrect hfs_cat_new_{file,dir}(). Fix hfs_cat_{create,delete} to use the improved catalog cache for locking in place of directory-level create/delete locks. Fix hfs_{create,mkdir}() to use the new hfs_cat_create(). * hfs_fs.h, ccache.c: Rewrite parts to remove need for specialized create/delete locking. Use new case-independent hash function. Fix bug in hfs_cat_get() that would read an entry w/o locking it. Call hfs_relinquish() before retrying a deleted entry in hfs_cat_get. If there is a read error, then don't retry in hfs_cat_get(). Remove unused 'version' field from (struct hfs_cat_entry). * sysdep.h: Add hfs_relinquish(), a system-independent alias for schedule(). * hfs_fs.h, string.c: Add hfs_strhash(), a simplistic case-independent hash function. * hfs_fs.h, inode.c: Make hfs_iget() an inline function. * TODO: Add a few goals and removed those that have been achieved. * Makefile: Add ccache.c to list of source files. Add rule for *.s files and include them in the 'clean' rule. Wed Jul 17 17:22:45 1996 Paul H. Hargrove * sysdep.h, trans.c, string.c, super.c, hfs_fs_i.h, hfs_fs_sb.h, inode.c, hfs_btree.h, hfs_fs.h, file_dbl.c, file_nat.c, extent.c, file.c, file_cap.c, dir_dbl.c, dir_nat.c, ccache.c, dir.c, dir_cap.c, btree.c, catalog.c, bnode.c, brec.c, balloc.c: Total rewrite of the inode-handling stuff to be centered around a catalog entry cache (ccache.c). This results not only in a far more sensible way of doing things, but also removed many race conditions. (The source and object code both got smaller too!) Many small "undocumented features" were also fixed. Replace HFS_CNAME with (struct hfs_cname). rename() has been temporarily abandoned. Thu Jul 11 01:14:38 1996 Paul H. Hargrove * dir.c: As written hfs_lookup_parent() had two overlapping read requests in the catalog tree. This could have led to deadlock. Wed Jul 10 09:27:00 1996 Paul H. Hargrove * catalog.c, hfs_fs.h, bdelete.c: More work on getting rename() fleshed out. Still not done. Before I can finish it looks like I'll need to build a mechanism for exclusive access to the catalog tree. There just doesn't seem to be any other way to get proper POSIX semantics without a bunch of race conditions elsewhere. * hfs_fs.h, inode.c, dir_cap.c, dir_dbl.c, dir_nat.c, catalog.c: More work on the still incomplete rename() code. Merge hfs_cat_add_{dir,file}() into hfs_cat_create(). Add file-thread support to hfs_cat_{create,delete,rename}. Tue Jul 9 09:43:15 1996 Paul H. Hargrove * inode.c, dir_dbl.c, dir_nat.c, extent.c, dir_cap.c: The indirect (struct hfs_file) was causing blocks not to be freed when files where deleted, and an omission in hfs_put_inode() was preventing the inode from getting freed. Both are now fixed. * hfs_fs.h, dir_dbl.c, dir_nat.c, hfs_btree.h, catalog.c, dir_cap.c, bdelete.c: Made unlink() and rmdir() more race resistant and did some more work on the still incomplete code for rename(). * btree.c, bnode.c: There was a serious race condition in the bnode cache, so hfs_bnode_find() is now modeled after Linus's inode cache. Mon Jul 8 10:33:38 1996 Paul H. Hargrove * hfs_fs_i.h, inode.c, file_cap.c, file_dbl.c, file_nat.c, dir_dbl.c, dir_nat.c, file.c, dir.c, dir_cap.c: More changes to layout of (struct hfs_inode_info). * super.c, inode_cap.c, inode_dbl.c, inode_nat.c, inode.c, hfs_fs_i.h, hfs_fs_sb.h, file_nat.c, hfs_fs.h, file.c, file_cap.c, file_dbl.c, Makefile, catalog.c: Implemented new layout for (struct hfs_inode_info) resulting in the elimination of lots of duplicated code for hfs_*_write_inode(), hfs_*_put_inode() and *_open() functions. Merged inode_*.c files back into inode.c. Not fully tested. * TODO: Add a few more of my goals to the list. * README: Documentation updates. * inode_nat.c, inode_cap.c, inode_dbl.c, inode.c, hfs_fs.h, hfs_fs_i.h, file.c, file_cap.c, file_dbl.c, file_nat.c, catalog.c: (struct hfs_file) and metadata are read when file is opened or truncated and are released by iput(). Sun Jul 7 23:55:43 1996 Paul H. Hargrove * inode_nat.c, inode_cap.c, inode_dbl.c, inode.c, dir_nat.c, hfs_fs.h, hfs_fs_i.h, dir_cap.c, dir_dbl.c, catalog.c, dir.c: (struct hfs_dir) is now inside (struct hfs_inode_info) once again. * inode_nat.c, super.c, inode_cap.c, inode_dbl.c, inode.c, file_nat.c, hfs_btree.h, hfs_fs.h, extent.c, file_cap.c, file_dbl.c, dir_nat.c, dir_cap.c, dir_dbl.c, btree.c, catalog.c, dir.c, bpath.c, brec.c, bins_del.c, binsert.c, bnode.c, bfind.c, balloc.c, bdelete.c, Makefile: Remerged (struct hfs_bpath) and (struct hfs_brec), merging the files bfind.c and bpath.c as a resurrected brec.c. Sat Jul 6 21:47:05 1996 Paul H. Hargrove * inode_cap.c, inode_dbl.c, inode_nat.c, inode.c, hfs_fs.h, hfs_fs_i.h, file_cap.c, file_dbl.c, file_nat.c, hfs_btree.h, dir_nat.c, extent.c, dir.c, dir_cap.c, dir_dbl.c, btree.c, catalog.c, bfind.c, bpath.c, binsert.c, bdelete.c: Renamed (struct hfs_brec_key) to (struct hfs_bkey). Tue May 28 07:53:24 1996 Paul H. Hargrove * inode_cap.c, catalog.c: Spelling fixes. * inode_nat.c, super.c, inode_cap.c, inode_dbl.c, inode.c, hfs_fs.h, hfs_fs_i.h, hfs_fs_sb.h, file.c, file_dbl.c, file_nat.c, dir_dbl.c, dir_nat.c, extent.c, dir.c, dir_cap.c, catalog.c: Structures got too big, so I had to add a layer of indirection to (struct hfs_inode_info). This means we must clear_inode() in inode_put(). Mon May 27 01:32:42 1996 Paul H. Hargrove * catalog.c, file_cap.c: Some sizeof() stuff now uses variable not type. * hfs_fs.h: Make HFS_I() and HFS_SB() inline to gain type checking. Sun May 26 13:34:17 1996 Paul H. Hargrove * dir_nat.c: Oops. Had left some debugging printk()s in place. * file_dbl.c, file_nat.c, file_cap.c: Cleaned up variable names for consistency. * hfs_fs_sb.h: Add a couple 'const's to function typedefs. * hfs_fs.h: Add and update function prototypes. Cleaned up type names. Fix debugging malloc code. Add hfs_iget_by_name() as an inline function. * sysdep.h: Remove extra semicolon from macro definitions. * super.c: Use new hfs_iget_by_name() to get root inode. * extent.c: Cleaned up some variable naming for consistency. * catalog.c: Added (untested) code for hfs_cat_move_file(). * catalog.c: Fix one missed call to hfs_cat_build_key(). Make hfs_cat_add_{file,dir}() take a cat_entry as an argument. Add hfs_cat_new_{file,dir}() to generate new cat_entry's. * dir_dbl.c, dir_nat.c, dir.c, dir_cap.c: Cleaned up type and variable names. Updated calls to hfs_cat_build_key() and NAMEOUT() Use new hfs_iget_by_*() calls. * inode_cap.c, inode_dbl.c, inode_nat.c: Cleaned up type and variable names. * inode.c: Update calls to hfs_cat_build_key(). Cleaned up type and variable names. Implemented a hierarchy of hfs_iget_by*() calls. * catalog.c: Change hfs_cat_build_key() to take a HFS_CNAME as input. * btree.c: Initialize lsize and psize fields of file. * trans.c: Now passes type HFS_CNAME and has name/len in "normal" order. Tue May 21 07:02:34 1996 Paul H. Hargrove * bnode.c: Attempt to read invalid bnode would have led to an infinite loop under certain circumstances. One way to cause this was with an invalid partition table which points beyond the end of the device. Sat May 11 12:38:42 1996 Paul H. Hargrove * sysdep.h, sysdep.c, inode_dbl.c, inode_nat.c, super.c, inode_cap.c, inode.c, hfs_fs.h, hfs_fs_i.h, hfs_fs_sb.h, file_dbl.c, file_nat.c, hfs_btree.h, extent.c, file.c, file_cap.c, dir_nat.c, dir.c, dir_cap.c, dir_dbl.c, btree.c, catalog.c, bitmap.c, bitops.c, bnode.c, bfind.c, bins_del.c, binsert.c, balloc.c, bdelete.c: Another big wave of portability-oriented changes. Tue May 7 11:28:35 1996 Paul H. Hargrove * super.c, sysdep.c, sysdep.h, inode_cap.c, inode_dbl.c, inode_nat.c, hfs_fs_i.h, inode.c, file_nat.c, hfs_btree.h, hfs_fs.h, file.c, file_cap.c, file_dbl.c, dir_nat.c, extent.c, dir_cap.c, dir_dbl.c, btree.c, catalog.c, dir.c, bnode.c, bpath.c, binsert.c, bitmap.c, bitops.c, bdelete.c, bfind.c, bins_del.c, Makefile, balloc.c: Start a big move to abstract all the Linux-specific stuff out of the lower levels. Created sysdep.[ch] to hold it. * FAQ, TODO: Bring some documentation up-to-date. Fri May 3 20:15:29 1996 Paul H. Hargrove * super.c, inode_dbl.c, inode_nat.c, inode.c, inode_cap.c, extent.c, hfs_fs.h, hfs_fs_i.h, dir_dbl.c, dir_nat.c, catalog.c, dir.c, dir_cap.c, bpath.c, btree.c, binsert.c, bnode.c: "FID reform": 'fid' became 'cnid' (Catalog Node ID), and is now a field in (struct hfs_file). The new name is more consistent with Apple's documentation. The presence of 'cnid' in (struct hfs_file) help move more of the code toward OS-independence. * inode_nat.c, super.c, trans.c, inode.c, inode_cap.c, inode_dbl.c, hfs_fs.h, file_cap.c, file_dbl.c, file_nat.c, dir_nat.c, extent.c, file.c, dir.c, dir_cap.c, dir_dbl.c, btree.c, catalog.c, bnode.c, bpath.c, bins_del.c, binsert.c, bitmap.c, bitops.c, bdelete.c, bfind.c, balloc.c: A lot of changes in what headers are included and in what order. Sat Apr 27 12:28:54 1996 Paul H. Hargrove * FAQ: Updated for current writability status. * .cvsignore: Added ChangeLog. * file_dbl.c, file_nat.c, file_cap.c, file.c, dir_dbl.c, dir_nat.c, dir_cap.c: Added the default fsync() to all file_operations structures. * dir_nat.c, hfs_fs.h, dir.c, dir_cap.c, dir_dbl.c: Add rmdir() for normal directories. * binsert.c: I had messed up insertion so that is would sometime fail to split the root, but its OK now. * dir.c: hfs_do_unlink() decremented directory counts rather than file counts. Wed Apr 24 13:20:08 1996 Paul H. Hargrove * hfs_fs.h, bnode.c, hfs_btree.h: Fixed a couple more type size assumptions. * hfs_fs.h, balloc.c, bitmap.c, bitops.c: "Portable" bitmap handling was wrong for just about everything but the i386 and the "inverse big-endian" bit ordering that I thought the m68k port was using. It seems the m68k port is now using standard big-endian bit-numbering conventions. This code is now correct for the standard big- and little-endian bit orderings. (which should cover all Linux systems?) Also no longer assumes sizeof(long) == 4, though that might still be a problem in other parts of the code. Tue Apr 23 19:19:27 1996 Paul H. Hargrove * FAQ: Bring uptodate for this snapshot. * Makefile: Add FAQ to $(MISC) * README, TODO: Documentation updates. * bdelete.c: Spelling fixes. * dir_cap.c: In unlink() don't force metadata into memory if not present. * bdelete.c: Some function comments and some clean up. * bins_del.c: Added missing function comment for hfs_bnode_update_key(). * binsert.c, bitmap.c: Spelling and grammar corrections to comments. * hfs_btree.h, hfs_fs.h, bins_del.c, binsert.c, Makefile, bdelete.c: Clean up of hfs_bdelete(), splitting bins_del.c into three files: bins_del.c, binsert.c and bdelete.c * bpath.c, bins_del.c: hfs_bdelete() is now working "correctly", but needs some cleaning up. Mon Apr 22 05:35:41 1996 Paul H. Hargrove * hfs_fs.h, bpath.c, hfs_btree.h, bins_del.c, bnode.c, balloc.c, bfind.c: Rewrite bnode handling, heading toward a more write-behind approach. Have done away with HFS_LOCK_BLIND. * inode_dbl.c, inode_nat.c, extent.c, hfs_fs_i.h, inode_cap.c: Was trying to truncate resource fork of directories! Sun Apr 21 08:15:43 1996 Paul H. Hargrove * balloc.c: Updated to use truncate() to grow full trees. * extent.c, hfs_fs.h, file.c, inode.c: Added truncate() for normal files. * bins_del.c: hfs_bdelete() fixes for handling removal of root. * inode_cap.c, inode_dbl.c, inode_nat.c: Release storage for deleted files in hfs_*_put_inode(). * bitmap.c: Make len=0 valid for hfs_{set,clear}_vbm_bits(). * super.c, inode.c, hfs_fs_i.h, hfs_fs_sb.h, btree.c, balloc.c: Changed from clumpsize to clumpblks. * inode_nat.c, hfs_fs.h, inode_cap.c, inode_dbl.c, btree.c, extent.c, balloc.c: Some extent-related changes in preparation for truncate() support. Sat Apr 20 10:59:13 1996 Paul H. Hargrove * inode_nat.c, hfs_fs_i.h, inode.c, inode_cap.c, inode_dbl.c, dir_nat.c, hfs_fs.h, dir.c, dir_cap.c, dir_dbl.c: Removed dir.valence from hfs inode. Added unlink(), but still need truncate() and some more support in hfs_*_put_inode() to free the disk space used by deleted files. * bnode.c: Check for NULL bnode in hfs_bnode_relse(). * bins_del.c: Fixed a byte-order problem in bdelete_nonempty(). * hfs_fs.h, bnode.c, bpath.c, hfs_btree.h, balloc.c, bins_del.c: First attempt at hfs_bdelete(). * dir.c: The Finder would display strange things if it couldn't set frView. Therefore initialize frView field for new directories. * file_cap.c, file_dbl.c, file_nat.c, hfs_fs.h: Define User/Finder info fields of catalog entry in more detail. * hfs_fs.h: HFS_BFIND_DELETE should require exact match. * dir.c: Set "record in use" bit of filFlags for new files. * inode.c: Was doing the wrong thing with i_ctime. * dir_nat.c, dir_cap.c, dir_dbl.c: Added some missing updates to the inode in hfs_*_{create,mkdir}(). Sun Apr 14 00:10:52 1996 Paul H. Hargrove * hfs_fs.h, file_dbl.c, file_nat.c, file.c: Work around the ever-changing type of f_reada. Sat Apr 13 00:43:41 1996 Paul H. Hargrove * bpath.c, bfind.c: Spelling corrections in comments. * bins_del.c: ifdef out shift_left() until it is actually used. * hfs_btree.h, hfs_fs.h, bins_del.c, bpath.c, bfind.c: Cleaned up code related to 'flags' argument to hfs_bpath_find(). Fri Apr 12 23:30:01 1996 Paul H. Hargrove * bpath.c: Updated comments. Rewrote hfs_bpath_init() and hfs_bpath_next(). * hfs_btree.h: Updated prototype for hfs_bpath_init(). * bins_del.c: Updated call to hfs_bpath_init(). * inode.c, inode_cap.c, inode_dbl.c, inode_nat.c, extent.c, file_cap.c, file_dbl.c, file_nat.c, dir_cap.c, dir_dbl.c, dir_nat.c, catalog.c, dir.c: Renamed hfs_brec_relse() to hfs_brelse(). * hfs_fs.h, hfs_btree.h: Updated prototypes to reflect new names in bpath.c * bins_del.c: Updated calls to functions in bpath.c Updated comments. * Makefile: Renamed brec.c to bpath.c * bfind.c: Updated calls to functions in bpath.c Added hfs_brelse() which was previously hfs_brec_relse() in brec.c * bpath.c: brec.c renamed to bpath.c Functions renamed to reflect their current actions. Comments are still out of date. hfs_brec_relse() renamed to hfs_brelse() and moved to bfind.c * brec.c: brec.c renamed to bpath.c Wed Apr 10 07:20:28 1996 Paul H. Hargrove * hfs_fs.h, extent.c, hfs_btree.h, brec.c, dir.c, bfind.c, bins_del.c: Backed-out changes to hfs_binsert() that added the ability to return the new record, since it will probably not ever be needed. * extent.c: Since 1.3.45 truncate() has locked the file, so there is no need for all the things I've been doing to hfs_file_extend() & new_extent(). Those two functions have been cleaned up a bit (similar to older forms). * extent.c: hfs_file_extend() now more "robust", but new_extent() is still not fully "concurrency safe." Tue Apr 9 09:01:18 1996 Paul H. Hargrove * bins_del.c: Made split() inline. * inode.c, dir_nat.c, hfs_fs.h, dir_cap.c: Added hfs_itry() to get in-core inodes. * inode_dbl.c, inode_nat.c, hfs_fs.h, inode.c, inode_cap.c, file_dbl.c, file_nat.c, hfs_btree.h, extent.c, file_cap.c, dir_cap.c, dir_dbl.c, dir_nat.c, brec.c, catalog.c, dir.c, bins_del.c, bnode.c, bfind.c: Rewrite of all the (struct hfs_brec) stuff. Mon Apr 8 21:50:01 1996 Paul H. Hargrove * btree.c, extent.c, bnode.c: Fixed format strings in a few debugging printk()'s. * brec.c, hfs_fs.h: Removed hfs_brec_relse_one(). * hfs_fs.h, bnode.c, brec.c, hfs_btree.h, bfind.c, bins_del.c, balloc.c: (struct hfs_bnode_ref)s are now returned by value rather than reference and they are in (struct hfs_brec) rather than pointed to. Cuts down on a lot of kmalloc() and kfree() traffic. * hfs_fs.h, dir.c, extent.c, bins_del.c: Modified hfs_binsert() to be able to return the new record. * bins_del.c, hfs_btree.h: Added shift_left(), still untested. * bins_del.c: new_root() was missing its comment. * super.c, trans.c, hfs_fs_i.h, inode.c, inode_dbl.c, inode_nat.c, file_nat.c, hfs_btree.h, hfs_fs.h, file.c, file_dbl.c, dir_dbl.c, dir_nat.c, extent.c, dir.c, dir_cap.c, bitops.c, bnode.c, brec.c, bfind.c, bins_del.c, bitmap.c, balloc.c: Fixed lines over 80 characters and tabified files. * bins_del.c: Fixed line(s) over 80 columns. * trans.c, inode_nat.c, string.c, super.c, inode.c, inode_cap.c, inode_dbl.c, hfs_fs_i.h, hfs_fs_sb.h, hfs_btree.h, hfs_fs.h, file.c, file_cap.c, file_dbl.c, file_nat.c, dir_dbl.c, extent.c, btree.c, dir_cap.c, bitops.c, bnode.c, brec.c, bfind.c, bins_del.c, bitmap.c, DOC, README, TODO, balloc.c, CHANGES: About 150 spelling corrections. Sun Apr 7 23:14:28 1996 Paul H. Hargrove * dir_cap.c, dir_dbl.c, dir_nat.c, dir.c: Cleaned-up check for special names in mkdir(). * extent.c: More verbose error message. * inode_dbl.c, inode_nat.c, hfs_fs_i.h, inode.c, inode_cap.c, dir.c, hfs_fs.h: Limit directories to 32767 entries, since Mac uses 16-bit integer. Fri Apr 5 07:27:57 1996 Paul H. Hargrove * FAQ: Initial version. * dir_dbl.c, dir_nat.c, bins_del.c, dir.c, dir_cap.c: Added missing function comments. Wed Apr 3 06:38:36 1996 Paul H. Hargrove * brec.c: Cleaned-up code for brec->flags. * extent.c: Added function comments. * bins_del.c: Added function comments. hfs_binsert() was incrementing record count even on failure. Mon Apr 1 08:35:51 1996 Paul H. Hargrove * extent.c: Rewrote find_ext() and new_extent() for new hfs_btree_extend(). Moved hfs_btree_extend() to balloc.c Fixed potential kernel OOPS in new_extent(). * brec.c: Fixed potential kernel OOPS in hfs_brec_get_root(). Removed hfs_brec_find_first(). Fixed return value of hfs_brec_find(). * bins_del.c: Updated call to hfs_btree_extend(). * balloc.c: Merged hfs_bnode_add() and hfs_btree_extend() into the later. Commented init_mapnode(). * bfind.c: Removed hfs_bfind_first(). * hfs_fs.h, hfs_btree.h: Updated prototypes. Sat Mar 30 22:56:47 1996 Paul H. Hargrove * CHANGES, README, TODO: Updated documentation in preparation for 0.6 release. * inode.c, hfs_fs.h: Got rid of HFS_FAKE_EXEC in favor of noexec mount option. * inode.c, super.c, DOC, hfs_fs_sb.h: Added "quiet" mount option, like the fat filesystem. * inode.c, dir_cap.c, dir_nat.c: Pseudo-directories are read-only (at least for now). * hfs_fs.h, dir_dbl.c, dir_nat.c, dir.c, dir_cap.c: mkdir() updated to check against reserved names, but the AppleDouble scheme still has problems with names starting with '%'. * dir_dbl.c, dir_nat.c, hfs_fs.h, dir.c, dir_cap.c: Added mkdir(). (It only took 2 tries to get it right!!) Only works in "normal" directories and doesn't yet stop one from creating dirs with the reserved names. * brec.c, extent.c, bins_del.c: Now have a way to get an EEXIST back from hfs_binsert(). * btree.c, inode.c, hfs_fs_i.h, file.c, bfind.c, bnode.c, balloc.c: Added 'dev' field to struct hfs_file. * hfs_fs_i.h, inode.c, btree.c, extent.c, file.c, bnode.c, brec.c, balloc.c: Removed duplicated fields from struct hfs_file since even B*-trees now have that information in the inode. * extent.c: zero_blocks() neglected allocation block size in computing start. Fri Mar 29 16:04:37 1996 Paul H. Hargrove * super.c: hfs_statfs(): f_files and f_ffree fields are now -1, which is documented as the value for "undefined" fields in struct statfs. * trans.c, inode_nat.c, string.c, super.c, inode_dbl.c, inode_cap.c, inode.c, file_nat.c, file_dbl.c, file_cap.c, file.c, dir_dbl.c, extent.c, dir_cap.c, catalog.c, btree.c, brec.c, bnode.c, bitops.c, bitmap.c, bins_del.c, balloc.c: Stylistic editing: {} for all 'for', 'while' and 'if' blocks. I hope I didn't screw-up anything. * hfs_fs.h, dir.c, dir_cap.c, dir_dbl.c, dir_nat.c: Added creation of normal files to all three fork schemes! Strange things may happen when trying to create "non-normal" files. * brec.c: Cleaned up some debugging code. * hfs_fs_i.h: File and directory counts could have overflown 16-bit integer. * hfs_btree.h: Added HFS_BREC_RIGHT to help fix insertion problem. * extent.c: Various fixes to hfs_{file,btree}_extend(). * catalog.c: Made hfs_build_cat_key() more "correct". * btree.c: Added and fixed debugging code. * brec.c: Fixed overflow detection. Added some debugging code. * bnode.c: Dirtied some buffers in places that might have been missed. Fixed some debugging code that had broken. * bitops.c: hfs_count_free_bits() was running off end of bitmap. * bins_del.c: Fixed various bugs, mostly related to variable-length keys. * balloc.c: Had forgotten to set a bit in new mapnodes. Node counts were overflowing 16-bit integers. * bitmap.c: Oops! clear/set did opposite operation on full words. Wed Mar 27 10:59:07 1996 Paul H. Hargrove * hfs_fs_i.h: Updated struct hfs_extent for concurrent access. Also caused a slight modification to struct hfs_file. * hfs_fs.h, hfs_btree.h: Added/updated prototypes. * balloc.c: hfs_bnode_alloc() finished but still untested. * bins_del.c: Fixed up deadlock avoidance in hfs_binsert() again. Perhaps I even got it right this time. * extent.c: hfs_file_extend() now safe under concurrent operations? * file.c: hfs_getblk() now safe under concurrent operations? Tue Mar 26 23:26:35 1996 Paul H. Hargrove * btree.c: Added call to hfs_extent_trim() to fix memory leak. * extent.c: Oops, had left a "#define static" in from debugging. * bins_del.c: hfs_binsert() rewritten to avoid deadlock when extending the extents B*-tree. * btree.c: Moved hfs_btree_extend() to extent.c * inode_nat.c, inode_cap.c, inode_dbl.c: hfs_*_put_inode() rewritten to call hfs_extent_trim(). * extent.c: Big rewrite for new struct hfs_extent: Now keep linked list of extents. Cache is now a pointer to a list element. Now have 'end' field to aid decode_extent(). New functions: hfs_extent_trim(): frees linked list. hfs_btree_extend(): for extending B*-trees. Improved debugging output. * balloc.c: Added hfs_bnode_add() (incomplete and uncommented). * btree.c: Moved some work from hfs_btree_extend() to hfs_bnode_add(). * bfind.c: Added hfs_bfind_first() as wrapper for hfs_brec_find_first(). * brec.c: Added hfs_brec_find_first() to search first leaf node. * bins_del.c: Added error returns to hfs_binsert() and binsert(). * bins_del.c: Check to see that we really need ancestors before starting. Check that hfs_btree_alloc() gave us enough nodes. binsert() uses info precomputed by hfs_binsert(). Mon Mar 25 11:33:53 1996 Paul H. Hargrove * bnode.c: Collected together the error returns in hfs_bnode_lock(). * Makefile: Added ChangeLog to $(MISC). Wed Mar 20 19:41:45 1996 Paul H. Hargrove * super.c, hfs_fs.h, file.c, dir_dbl.c, dir_nat.c, dir.c, dir_cap.c: Removed support for kernels older than about 1.3.70 Most of that support had been broken recently anyway. * super.c: Fixed so DEBUG_MEM works w/o DEBUG_ALL. Updated call to hfs_btree_init(). * hfs_fs.h: Updated/added prototypes. * hfs_btree.h: HFS_BFIND_CHAIN removed. struct hfs_brec gets new 'flags' field with bits: HFS_BREC_{FIRST,OVERFLOW,UNDERFLOW,UNINITIALIZED} Removed bitmap size constants. Changes to struct hfs_btree: 'file' and 'cache' now structs rather than pointers. Added 'reserved' field (used during insertion). Added pointers to size and extent in MDB. * file.c: Made hfs_getblk() public. Removed (fil->inode == NULL) special cases. * extent.c: {find,update}_ext() are no longer inline. new_extent() fails when called for the extents tree; previously it would hanging calling hfs_binsert(). extend_file(): renamed to hfs_file_extend() and made public. fixed to work for B*-trees. zeros-out blocks as they are allocated. fixed bugs for (allocation block) != (physical block). * btree.c: hfs_btree_{init,free}() modified for changes to struct: 'file' and 'cache' moved back into structure file.inode initialized to reduce special cases hfs_btree_init() gets pointer to size in MDB instead of size. Added hfs_btree_extend() (incomplete and uncommented). * bnode.c: hfs_bnode_{alloc,free}() moved to separate file. Removed 'const' from some function arguments due to change in struct hfs_btree. hfs_bnode_lock(): added WRITE/RESRV->READ transition. * brec.c: hfs_brec_get_{root,child}() now take a 'keep_mask' argument indicating when to keep ancestor nodes, and store information about why ancestors were kept. HFS_BFIND_CHAIN eliminated in favor of HFS_BFIND_{INSERT,DELETE} which are now implemented using 'keep_mask'. Added hfs_brec_relse_one() that doesn't release ancestors. * bins_del.c: Lots of rewrites to cleanup insertion. Now tries to extend tree before insertion starts. binsert() iterative rather than recursive. No point in keeping track as it is still not "stable". * balloc.c: New file: started with hfs_bnode_{free,alloc}() Added hfs_bnode_init() to initialize a newly allocated bnode. hfs_bnode_free(): Renamed hfs_bnode_bitop(). Can set or clear a specified bit. Gets bitmap sizes from nodes directly. hfs_bnode_alloc(): Returns actual node, calling hfs_bnode_init(). Gets bitmap sizes from nodes directly. * bfind.c: Removed obsolete comment from hfs_bsucc() Removed 'const' from tree arg of hfs_bfind() due to changes in struct hfs_btree. * Makefile: Added new file: balloc.c Sat Mar 9 22:03:53 1996 Paul H. Hargrove * Start of detailed CVS logging. Mar 09, 1996: snapshot-09Mar96 hargrove@sccm.stanford.edu (Paul H. Hargrove) NOT AN OFFICIAL RELEASE Fixed up debugging code that was broken by split of btree.c Added debugging kmalloc/kfree Fixed memory leak in hfs_bnode_relse() Mar 08, 1996: snapshot-08Mar96 hargrove@sccm.stanford.edu (Paul H. Hargrove) NOT AN OFFICIAL RELEASE now reset blocksize on device when done. hfs_binsert done (except for the full tree case). btree.c split up into manageable pieces (need to sort out hfs_btree.h) Feb 26, 1996: snapshot-26Feb96 hargrove@sccm.stanford.edu (Paul H. Hargrove) NOT AN OFFICIAL RELEASE Some writability. Bug with multiple opens of meta data fixed. Netatalk support no longer considered experimental. Virtually everything has changed, so I've lost track here. Nov 16, 1995: snapshot-16Nov95 hargrove@sccm.stanford.edu (Paul H. Hargrove) NOT AN OFFICIAL RELEASE Still more comments. btree.c back to 80 columns. will do same to other files soon. Starting with btree.c have begun to put file contents into some sort of standard order. Moved metadata reading to VFS open() routine and now free it in the VFS release() routine. Much cleaner than the old way. Unified hfs_iget by shifting scheme-dependent code into a function pointer in the superblock. This could/should be shifted to a VFS read_inode() routine if that can be done cleanly. Probably lots of other changes; I've lost track. Nov 05, 1995: version 0.5.3 hargrove@sccm.stanford.edu (Paul H. Hargrove) NOT AN OFFICIAL RELEASE 1.2.x compatibility removed Added lots of comments to btree.c and cleanup some code. The result is that the source file doubled in size while the object file dropped in size by 20%. Added some comments to super.c and dir.c as well. Cleaned up some stuff in dir.c adding some additional error checking and moving closer to using a unified hfs_iget by migrating common code into lookup_parent(). Changed btree.c to use a separate bnode cache per filesystem. Renamed a bunch of the bnode functions in btree.c Jun 29, 1995: version 0.5.2 hargrove@sccm.stanford.edu (Paul H. Hargrove) BUG FIX and 1.3.x-compatibility release. Will compile under 1.2.x or 1.3.x by changing one line in Makefile. Started adding magic numbers to structures for "safety". Don't strip internal symbols when linking or loading, as this made good bug reports rather difficult. Fixed a bug that could cause the fs to lock-up after trying to open a non-existent file. Fixed a bug that allowed files to appear truncated, when in fact it is still not possible to truncate a file. Added more/better comments to header files. Deal with volume and b-tree bitmaps in preparation for writing. Fixed readdir() to deal properly with the case where the directory changes while writing to user-space. (which can't yet actually happen, until directories are writable). Jun 23, 1995: version 0.5.1 hargrove@sccm.stanford.edu (Paul H. Hargrove) BUG FIX RELEASE Removed two debugging messages that didn't belong. Fixed a typo that prevented modified inodes from being written to disk. Added a missing line which prevented rmmod'ing sometimes. Added a missing line which caused errors when modifying .finderinfo or .resource under the CAP system. Added a notify_change() to keep mode bits sensible, and to cause changes to an inode to affect the data fork and resource fork of a file together. Jun 22, 1995: version 0.5 hargrove@sccm.stanford.edu (Paul H. Hargrove) Fixed a bug that was giving wrong values for i_blocks Partly writable (can only 'touch' existing files, so far) Removed case= mount option. It will be back eventually. Can now deal with CDROMs (and hard disks?), many thanks to Holger Schemel for this work. Latin-1 filename conversion also due to Holger Schemel. Rewritten btree operations. Feb 28, 1995: version 0.4 hargrove@sccm.stanford.edu (Paul H. Hargrove) Requires Linux >= 1.1.94: depends on changes made to asm/byteorder.h Now using string comparison code donated by ARDI (see string.c) Code reorganized to use data structures more like ARDI's. More code reorganization to abstract the btree operations. Added the fork= mount option. Added AppleDouble support. Executor, from ARDI, can now run programs from HFS filesystems mounted with the HFS module. Jan 28, 1995: version 0.3 hargrove@sccm.stanford.edu (Paul H. Hargrove) Major code reorganization. Known for certain to work ONLY on floppies. Started caching extents, so got faster on long file reads. Now compiles separate from kernel tree. Supports 5 filename conversion methods. Supports forks, using the method from CAP. All external symbols now start with HFS_ or hfs_ Jan 12, 1995: version 0.2 hargrove@sccm.stanford.edu (Paul H. Hargrove) Should now work on all HFS volumes, but still only tested on floppies. Got smaller and faster with some code reorganization. Since Linus moved htons() and friends to an asm file, should now be truly endian-independent, but still only tested on Intel machines. Requires Linux >= 1.1.77, since Linus moved htons(). Jan 05, 1995: version 0.1 hargrove@sccm.stanford.edu (Paul H. Hargrove) First release. 1.44Mb floppies only no resource forks trivial name mangling only read only for Linux >= 1.1.75