2003-08-02  Erez Zadok  <ezk@cs.sunysb.edu>

	* released version 0.0.7.

2000-05-24  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* inode.c (wrapfs_unlink): call d_delete() because dput() does
	that too.
	(wrapfs_rmdir): call d_delete() because dput() does
	that too.
	(wrapfs_truncate_and_enlarge): call mntget() before dentry_open()
	because it will decrement the mnt's refcount if error, and fput()
	will do an mntput() for us upon file close.

	* file.c (wrapfs_open): call mntget() before dentry_open() because
	it will decrement the mnt's refcount if error, and fput() will do
	an mntput() for us upon file close.

	* dentry.c (wrapfs_d_delete): fully implement d_delete, and have
	it call the lower file system's ->d_delete method if the latter
	has one.  This is needed since 2.3.99-pre9 changed dput() and now
	have dput() call d_delete() and ->d_drop.

	* aux.c (wrapfs_idx_open): call mntget() before dentry_open()
	because it will decrement the mnt's refcount if error, and fput()
	will do an mntput() for us upon file close.
	(wrapfs_idx_set_entry): bug fix.  move holes support code outside
	the previous "if" statement, which had nothing to do holes.

2000-05-16  Erez Zadok  <ezk@earth.cs.columbia.edu>

	* inode.c (wrapfs_truncate_and_enlarge): call mntget since we've
	called dentry_open().

	* aux.c (wrapfs_idx_open): call mntget since we've called
	dentry_open().

	* file.c (wrapfs_open): use ftohf() not file->private_data.
	(wrapfs_open): call mntget(hidden_file->f_vfsmnt) else we BUG() in
	wrapfs_release() when it calls fput(hidden_file).

	* mmap.c: All calls to ->readpage, ->writepage, wrapfs_get1page,
	and read_cache_page changed to pass file instead of dentry.

	* inode.c (wrapfs_truncate_and_enlarge): use fake a struct file so
	we can pass it to wrapfs_get1page (which absolutely needs it).  An
	ugly hack because notify_change doesn't take a struct file and it
	isn't that easy to make it do so.

	* aux.c (wrapfs_get1page): now takes a file, not dentry.  All
	calls to ->readpage and read_cache_page changed to pass file
	instead of dentry.

2000-05-16  Erez Zadok  <ezk@beetle.mcl.cs.columbia.edu>

	* mmap.c (wrapfs_writepage): ->writepage doesn't take struct
	dentry any more (2.3.99-pre7).

	* main.c (wrapfs_parse_options): walk_init renamed to path_init in
	2.3.99-pre7.
	(wrapfs_parse_options): walk_name renamed to path_walk.

2000-05-10  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* Makefile: define TOPINC for special -I flags, to avoid bad
	header inclusions with just a -I<null> option.

2000-05-01  Erez Zadok  <ezk@beetle.mcl.cs.columbia.edu>

	* sca_aux.c, sca_aux.h, sca_list_idx.c, sca_mk_idx.c, sca_read.c,
	sca_write.c: SCA support user-level files to print an index file,
	recover it, decode a file, and encode a file.  These files are
	generated only if SCA code is on.

	* aux.c (wrapfs_{read,write}_file): filp_open doesn't need 4th
	arg.

2000-04-30  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* mmap.c (wrapfs_sync_page): define new method sync_page.

2000-04-30  Erez Zadok  <ezk@beetle.mcl.cs.columbia.edu>

	* mmap.c (wrapfs_writepage): now takes an extra argument, struct
	file (2.3.99-pre6).  Let's hope that it can never be NULL.

2000-04-24  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* inode.c (wrapfs_rmdir): handle cases where the file/dir is
	removed through the hidden fs

2000-04-24  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	Updated to 2.3.99-pre6-pre5:

	* wrapfs.h: added hidden_mnt to struct wrapfs_sb_info

	* super.c (wrapfs_put_super): mntput() the hidden_mnt; #ifdef
	FIST_DEBUG the delete_inode() method, as it's not needed anymore

	* main.c (wrapfs_interpose): use wrapfs_iops_symlink if the inode
	is a symlink
	(wrapfs_parse_options): determine and store hidden_mnt

	* inode.c (wrapfs_readlink): return -EINVAL instead of -EPERM if
	the hidden inode doesn't support readlink
	(wrapfs_follow_link): changed return type, use vfs_follow_link
	(wrapfs_iops_symlink): new inode_operations structure, used only
	for symlinks

	* aux.c (wrapfs_idx_open), file.c (wrapfs_open): pass hidden_mnt
	to dentry_open

	* aux.c (fist_lookup, wrapfs_idx_lookup), inode.c (wrapfs_lookup):
	use lookup_one instead of lookup_dentry

2000-04-23  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* Changed index handling routines to allocate memory as
	whole pages

2000-04-23  Erez Zadok  <ezk@earth.cs.columbia.edu>

	* doit.sh (PATH): don't force insmod with '-f' to insert the
	module.  Too dangerous.

	* make all kfree() use kfree_s() as much as possible (presumably
	kfree_s is faster).

	* rename functions that may conflict with similar other modules to
	wrapfs_*.

	* Makefile-4-kernel: new file, a file systems specific Linux
	kernel makefile you can drop into a Linux kernel source tree.

	* *.c: include local headers with "foo.h" quotes not <foo.h>

	* wrapfs.h: simple optional code to count number of writes and
	number of writes in the middle.

2000-04-22  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* inode.c (wrapfs_unlink): fixes for cases when files get removed
	from under us

2000-04-18  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* file.c (wrapfs_ioctl): return 0 or 1 for fast-tail flag.

2000-04-18  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* fast tails work, other bugs fixed

2000-04-16  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* mmap.c: added initial untested support for fast tails, probably
	broke everything else in the process :-); added kmap/kunmap calls
	where necessary

	* aux.c (wrapfs_idx_read/write): read flags from the disk, write
	them back; remove modified flag, integrate with the other flags

2000-04-15  Erez Zadok  <ezk@vir.cs.columbia.edu>

	* fist_ioctl.c (main): -d option now must be used for set/get
	debugging value.  new -f option can be used to set/get the global
	fast-tail flag.

2000-04-15  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* inode.c (wrapfs_rmdir, wrapfs_unlink): fixed it so that deleting
	an open file works correctly
	(wrapfs_permission): check for read-only filesystem

2000-04-14  Johan M. Andersen  <johan@beetle.mcl.cs.columbia.edu>

	* aux.c: remove wrapfs_encode_buffer and wrapfs_decode_buffer,
	they are algorithm specific.

2000-04-14  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* vm_area.c: ifdef'ed out the entire code

	* inode.c (wrapfs_unlink): don't complain if symlinks don't have
	index files
	(wrapfs_readlink): removed bogus dprint() which could result in a
	bad page fault since the strings wasn't null-terminated;
	removed old versions of truncate and enlarge; moved get1page to aux.c

	* file.c (wrapfs_mmap): ifdef'ed out, not needed

	* aux.c (get1page): moved here from mmap.c; made idx_* calls
	non-static as they are called from other files

	* Makefile (O_OBJS): removed vm_area.o

2000-04-13  Johan M. Andersen  <johan@vir.cs.columbia.edu>

	* inode.c (wrapfs_rename): Move the index file as well as the
	target file.
	(wrapfs_link): Link the index file as well as the target file

2000-04-13  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* mmap.c (wrapfs_commit_write): fixed calls to shift_*; fixed size
	of hidden_inode after shifting

	* inode.c (wrapfs_unlink): fixed the logic in unlink, it's still
	wrong and ocassionally screws up but it's better than before

	* file.c (wrapfs_filldir): commented out a fist_dprint call, it
	can go wild on strings that are not zero-terminated

	* aux.c (wrapfs_sca_set_entry): fixed hole support, moved sanity
	check down so it won't complain needlessly

2000-04-08  Erez Zadok  <ezk@earth.cs.columbia.edu>

	* basic writing of file and index table works for one page only,
	the first page.

2000-04-08  Erez Zadok  <ezk@vir.cs.columbia.edu>

	* mmap.c (wrapfs_readpage): call readpage() again if we returned
	from wait_on_page with a page that's not up-to-date; that can
	happen when a partial page has a few buffers which are ok, but not
	the whole page.

2000-04-07  Johan M. Andersen  <johan@vir.cs.columbia.edu>

	* wrapfs.h (HIDDEN_PAGE_STARTING_OFFSET): Add macros for hidden
	page info (length and start offset)

2000-04-06  Erez Zadok  <ezk@vir.cs.columbia.edu>

	* print.c (fist_print_scafs_header): new routine to print contents
	of an SCA header.

	* convert scafs_hdr part of the private inode data to be a real
	structure, not a malloc'ed one, since we always need to allocate
	it anyway.

2000-04-06  Johan M. Andersen  <johan@vir.cs.columbia.edu>

	* aux.c (wrapfs_sca_read_idx): Add sanity checks to ensure the
	index file isn't corrupted.
	* main.c (wrapfs_interpose): move igrab before index-file read so
	we can reference underlying file in read_idx
	(wrapfs_interpose): Fix to out_iput by Ion to iput the hidden
	inode and un-interpose the upper-level inode for non-existing files.

2000-04-06  Erez Zadok  <ezk@vir.cs.columbia.edu>

	* aux.c (krealloc): an in-kernel realloc routine.
	(wrapfs_sca_add_entry): routine to add one more "entry" into an
	existing in-memory Index Table (IT) header structure.

2000-04-06  Johan M. Andersen  <johan@vir.cs.columbia.edu>

	* aux.c (wrapfs_decode_buffers): Fix CVS Breakage, comment
	(wrapfs_decode_buffers): Make zlib usage match usage in
	wrapfs_encode_buffers

	* aux.c (wrapfs_encode_buffers): Fill out and comment

2000-04-06  Erez Zadok  <ezk@vir.cs.columbia.edu>

	* main.c (wrapfs_interpose): put back old code; assertion that
	hidden dentry may be NULL isn't always true.
	(wrapfs_interpose): when new files are created, the parent hidden
	inode is locked, and we cannot and shouldn't call sca_read_idx,
	because it will do a lookup in the same directory and will
	deadlock.

2000-04-05  Johan M. Andersen  <johan@vir.cs.columbia.edu>

	* aux.c (wrapfs_decode_buffers): Move check for full buffers to
	after the call to inflate. This allows zlib to finish its
	checksums/etc even though it reports no space left in the output
	buffer.

2000-04-05  Erez Zadok  <ezk@vir.cs.columbia.edu>

	* inode.c (wrapfs_unlink): remove .idx file before removing main
	file.

	* wrapfs.h (INDEX_EXTENSION): define INDEX_EXTENSION here

	* aux.c (wrapfs_sca_read_idx): if index file does not exist,
	return ENOENT on looking up main file.

2000-04-04  Erez Zadok  <ezk@whitestar.cs.columbia.edu>

	* file.c (wrapfs_filldir): skip listing .idx files.

2000-04-03  Ion Badulescu  <ib42@moisil.cs.columbia.edu>

	* wrapfs.h (CURRENT_HIDDEN_PAGEINDEX): fixed silly error which was
	corrupting data when crossing lower page boundary

	* mmap.c (wrapfs_readpage): return errors from decode_buffers()

	* main.c (wrapfs_interpose): reorganized, avoid leaking
	inodes/dentries on error conditions

	* aux.c (wrapfs_sca_read_idx): dput the idx_dentry if the index
	files doesn't exist
	(wrapfs_decode_buffers): debugging, return consistent error codes

	* fist.h (print_exit_pointer): new debugging macro

	* wrapfs.h: changed type of scafs_header.read_size from loff_t to
	off_t (64 to 32 bits). Note that this will still break on a
	big-endian platform.
	(copy_inode_size): fixed calculation of i_blocks

	* mmap.c (wrapfs_readpage): sanity check: exit if there are no
	pages needed

2000-04-02  Ion Badulescu  <ib42@moisil.cs.columbia.edu>

	* mmap.c (wrapfs_readpage): reinit CURRENT_HIDDEN_PAGE to NULL if error

	* aux.c (wrapfs_sca_read_idx): changed index table algorithm
	(wrapfs_count_hidden_pages): implemented
	(wrapfs_decode_buffers): implemented, currently buggy
	[all the above is Johan's work]

	* wrapfs.h (copy_inode_size): compute the different file size and
	blocks in case of SCA filesystems

	* main.c, super.c: don't call iget() in read_inode(), instead do the
	interposition where it should be done: in interpose, by calling igrab()
	(wrapfs_interpose): read index file if SCA filesystem

	* mmap.c (wrapfs_readpage): added incipient support for SCA

2000-04-02  Johan M. Andersen  <johan@vir.cs.columbia.edu>

	* aux.c (wrapfs_sca_read_idx) reads an index-file into memory

2000-04-01  Erez Zadok  <ezk@earth.cs.columbia.edu>

	* aux.c (wrapfs_write_file,wrapfs_read_file): fixed "aclfs" typo.

2000-04-01  Erez Zadok  <ezk@beetle.mcl.cs.columbia.edu>

	* aux.c: placeholder for SCA/gzipfs code

	* Makefile (${O_OBJS}): depend on optional included headers

2000-04-01  Erez Zadok  <ezk@earth.cs.columbia.edu>

	* inode.c (wrapfs_mkdir,wrapfs_mknod): eliminate unused label
	(wrapfs_symlink): don't need hidden_symname

2000-03-26  Ion Badulescu  <ib42@earth.cs.columbia.edu>

	* inode.c (wrapfs_setattr): unconditionally copy attributes from
	lower inode
	moved debugging code around

	* fist.h: removed declaration of fist_mod_dec_use_count()

	* file.c: moved debugging code around

	* Makefile: removed comment

2000-03-25  Ion Badulescu  <ib42@beetle.mcl.cs.columbia.edu>

	* debug code rearranged, some deleted

2000-03-25  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* mmap.c (wrapfs_commit_write): unlock our page (and don't hang)
	if the lower file system is full.
	(wrapfs_commit_write): propagate errors correctly (so we handle a
	full file system etc.)

2000-03-24  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* mmap.c (wrapfs_prepare_write): added struct file pointer to this
	function, to be in stnc with commit_write.  Change in 2.3.99-pre3.

2000-03-20  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* major updates for 2.3.99-pre1, but there are still bugs.

2000-03-18  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* main.c (wrapfs_read_super): no need to un/lock our superblock,
	and no need to mainain module count increment/decrement.
	New module un/loading style.

	* super.c (wrapfs_statfs): call vfs_statfs. no need to pass
	bufsize to us or vfs_statfs.

2000-03-09  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* make sure the number of links, and inode/block count of the f/s
	are kept in sync w/ the lower f/s, and they are updated upon
	unlink, rmdir, rename, mkdir, etc.

2000-03-06  Erez Zadok  <ezk@shekel.mcl.cs.columbia.edu>

	* updates for 2.3.49.

