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

	* released version 0.0.7.

2003-02-09  Charles P. Wright  <cwright@fsl.cs.sunysb.edu>

	* inode.c (wrapfs_updatepage): testing for kmalloc return values.

	* main.c (wrapfs_read_super): Return value of kmalloc was not checked.

002-04-02  Kiran-Kumar Muniswamy-Reddy  <kiran@t2.fsl.cs.sunysb.edu>

	* file.c (wrapfs_read): added this function, fix for atime
	of lower level file system not being updated
	(wrapfs_write): fix for atime and mtime of upper layer not
	being updated

	* inode.c (wrapfs_writepage): update the time atime and mtime
	of upper layer.  probably redundant as this function is not
	used anywhere.

2002-03-30  Erez Zadok  <ezk@cricket.fsl.cs.sunysb.edu>

	* main.c (wrapfs_parse_options): advance options pointer to the
	next comma-delimited option.

2002-03-19  Ion Badulescu  <ionut@moisil.badula.org>

	* main.c (wrapfs_parse_options): use simple_strtoul() instead of
	simple_strtol()

2002-03-19  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* attach.c: more "complete" stub.

2002-03-18  Ion Badulescu  <ionut@moisil.badula.org>

	* print.c: moved fist_[gs]et_debug_value back from main.c, keeping
	only the MODULE_PARM declaration in main.c. Cleaner fix then the
	one below
	(fist_set_debug_value): print the new debug level when
	changing it; move fist_debug_var outside of FIST_DEBUG

	* attach.c: stub file to allow Linux-2.2 to compile

2002-03-13  Kiran-Kumar Muniswamy-Reddy  <kiran@t3.fsl.cs.sunysb.edu>

	* file.c (wrapfs_write): number of disk blocks allocated to a file
	is shown to be zero on stat()ing it, when actually the number
	allocated is more.

2002-03-11  Kiran-Kumar Muniswamy-Reddy  <kiran@a-rh72.fsl.cs.sunysb.edu>

	* file.c (wrapfs_ioctl): don't fail ioctls by default, unless we
	know for sure that they are unknown.  Otherwise, cryptfs code
	returns a failure even after setting the cipher key correctly.
	Plus, the default behavior for wrapfs_ioctl() for all other OSs
	(freebsd & solaris) is to succeed by default unless the ioctl is
	unknown.

2002-03-05  Kiran-ku Muniswamy-reddy <kmuniswa@ic.sunysb.edu>

	* print.c (fist_get_debug_value, fist_set_debug_value): moved to
	main.c along with the definition of static fist_debug_var and
	calls to MODULE_PARM, MODULE_PARM_DESC macros, removed include
	<linux/module.h>. Done in order to avoid symbol conflicts during
	compile time.

	* main.c (fist_get_debug_value, fist_set_debug_value): added to
	this file from print.c along with calls to MODULE_PARM,
	MODULE_PARM_DESC macros, moved the definition of static
	fist_debug_var to this file from print.c.  All the moved code is
	placed inside an #ifdef FIST_DEBUG and #endif. Done in order to
	avoid symbol conflicts during compile time.

2002-02-03  Ion Badulescu  <ionut@moisil.badula.org>

	* main.c (wrapfs_parse_options): added mount option "debug=%d" for
	setting the debug level at mount time
	added MODULE_DESCRIPTION()

	* print.c: changed default debug level to 0; added
	MODULE_PARM(fist_debug_var)

	* file.c (wrapfs_poll): return DEFAULT_POLLMASK if the underlying
	fs doesn't have a poll() method [patch from Marc Boucher

	* fist.h: define DEFAULT_POLLMASK if not already defined

2001-10-15  Ion Badulescu  <ion@guppy.limebrokerage.com>

	* inode.c (wrapfs_{create,link,mkdir,mknod}): same fix as for
	wrapfs_symlink below

2001-10-12  Ion Badulescu  <ion@guppy.limebrokerage.com>

	* Makefile (CC): support kgcc (RH) and gcc272 (Debian) using the
	new kwhich script

	* kwhich: new script, borrowed from 2.2.19

	* file.c (wrapfs_ioctl): return ENOTTY for non-existant ioctl's
	(fixes problem with 'tar -z')

	* inode.c (wrapfs_symlink): don't interpose if the hidden_dentry
	is negative, d_drop our dentry instead (fixes a problem when
	stacking over NFSv2)

	* main.c (wrapfs_read_super): don't dereference a NULL pointer
	when following an error path

	* fist.h: fixed problem with MODVERSIONS kernels

2001-10-08  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* Makefile: set TOPINC to best known system headers.  Optionally
	include fistdev.mk if it exists, allowing fistgen developers to
	override the value of TOPINC.

2001-10-01  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* main.c (wrapfs_read_super): bug fix: copy hidden superblock
	s_blocksize and s_blocksize_bits.  Now 2.2 kernels can execute
	binaries greater than one page.  (Yes, it's entirely non-obvious
	what the fix has to do with the bug, yet 2 man days were wasted on
	this bug.)

	* print.c: set default debug level to 18 (max) so we can see a few
	debugging messages before fist_ioctl has a chance to reset the
	debugging level.

	* main.c (wrapfs_read_super): print superblock and hidden
	superblock on exit.

	* print.c (fist_print_sb): new function

2001-09-30  Ion Badulescu  <lionut@localhost.localdomain>

	* inode.c (wrapfs_readpage): error path fixes, lots of debugging
	code added

	* main.c (wrapfs_read_super): copy sb->s_blocksize and
	sb->s_blocksize_bits from the hidden sb (fscking thing made us
	waste HOURS!!! Hours?!  How about a whole day, two people, and we
	spent hours using kGdb on VMware! -Erez)

2001-09-30  Ion Badulescu  <lionut@gonzales.badula.org>

	* inode.c (wrapfs_create): minor cleanup of an error path
	(__read_cache_page): new function, copied from 2.2.18 mm/filemap.c
	(read_cache_page): ditto
	(wrapfs_readpage): rip out a lot of code that is now in
	read_cache_page
	(wrapfs_writepage): don't define it at all
	(wrapfs_updatepage): ditto

2001-09-30  Ion Badulescu  <lionut@gonzales.badula.org>

	* file.c (wrapfs_main_fops): whoops, we _are_ using wrapfs_write!

2001-09-29  Ion Badulescu  <lionut@gonzales.badula.org>

	* file.c (wrapfs_dir_read): return -EISDIR, this function is only
	used for directories
	(wrapfs_read, wrapfs_write): not used, so removed

2001-09-29  Ion Badulescu  <lionut@gonzales.badula.org>

	Backported 2.4 fixes to make "cat ." (or any other directory) fail:

	* super.c (wrapfs_read_inode): use wrapfs_main_iops

	* main.c (wrapfs_interpose): change i_ops to wrapfs_dir_iops for
	directories
	(__wrapfs_hidden_dentry): use wrapfs_main_iops and
	wrapfs_dir_iops

	* inode.c (wrapfs_main_iops): renamed from wrapfs_iops;
	(wrapfs_dir_iops): new structure for directories

	* file.c (wrapfs_read, wrapfs_write): remove ifdef's around them,
	they are used for directories; fixed some comments in
	wrapfs_write;
	(wrapfs_dir_fops): new file_operations structure for directories
	(wrapfs_main_fops): renamed from wrapfs_fops

2001-09-29  Erez Zadok  <ezk@agora.fsl.cs.sunysb.edu>

	* Makefile (TOPINC): use /lib/modules/<uname -r>/build/include
	optionally

2001-09-29  Ion Badulescu  <lionut@gonzales.badula.org>

	* fist_ioctl.c: include <string.h>

	* super.c (wrapfs_put_inode): ->put_inode() becomes a mandatory
	op, because of NFS (which doesn't really unlink files, but renames
	them to .nfsXXX).  If our inode->i_count is 1, we force ->i_nlink
	to 0, to ensure that iput() will drop our reference to the hidden
	inode upon freeing us.

	* print.c (fist_print_dentry): don't print d_iname, it's not
	zero-terminated; print list_empty(d_hash)

	* inode.c (wrapfs_lookup): comment
	(wrapfs_unlink): backport fixes from 2.4 (ENOENT special casing
	removed, call d_delete on hidden_dentry)
	(wrapfs_rmdir): ditto, also remove the nlink fix -- now done in
	wrapfs_put_inode

	* dentry.c (wrapfs_d_release): comment

	* fist.h (fist_copy_attr_all): copy i_rdev between hidden_inode
	and our inode

2001-01-15  Erez Zadok  <ezk@earth.cs.columbia.edu>

	* inode.c (wrapfs_sync_page): new method (appeared first in
	2.2.18), based on a similar one implemented for the 2.4
	templates.
	(wrapfs_prepare_write): placeholder function, not implemented

2000-06-10  Erez Zadok  <ezk@beetle.mcl.cs.columbia.edu>

	* aux.c (fist_lookup): auxiliary functions for Linux 2.2.

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

	* {,un}doit.sh: use similarly to 2.3 scripts.

	* print.c ({add,del}_indent): automatically indent IN/OUT debug
	functions.

	* file.c (wrapfs_fops): wrapfs_mmap should use generic_file_mmap,
	not NULL.

	* Makefile (O_OBJS): vm_area.c is not needed any more.

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-08  Erez Zadok  <ezk@beetle.mcl.cs.columbia.edu>

	* wrapfs.h (global_event): define "event" to be global_event for
	kernels prior to 2.2.14.

	* Makefile: update the Makefile template to turn on -DFISTGEN and
	other stuff that is needed.

	* inode.c (wrapfs_link): fix typo. assign to err variable, not
	subtract from it.

	* file.c (wrapfs_ioctl): define this_vfs and this_vnode.

	* *.c: include "fist_wrapfs.h" in all .c files.

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

	* inode.c (wrapfs_lookup): added FILTER_NAME stuff; interpose the
	dentry here; destroy our dentry (d_drop) if error
	(wrapfs_unlink, wrapfs_rmdir): handle cases where the file/dir is
	removed through the hidden fs

	* main.c (wrapfs_interpose): don't interpose the dentry; interpose
	the inode only if not already done
	(wrapfs_read_super): interpose the root dentry

	* super.c (wrapfs_put_inode): #ifdef FIST_DEBUG

	* inode.c (wrapfs_readlink): return -EINVAL instead of -EPERM if
	the inode doesn't support readlink

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-03  Ion Badulescu  <ib42@moisil.cs.columbia.edu>

	* main.c (wrapfs_interpose): reorganized slightly

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

	* 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()

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

	* wrapfs.h: sync with 2.3 version

	* vm_area.c (wrapfs_shared_vmops, wrapfs_private_vmops): rewrite
	using the GNU initializers

	* super.c (wrapfs_read_inode): copy attributes only when
	hidden_inode is non-NULL; event renamed to global_event
	(wrapfs_delete_inode): use it, and set i_size to 0
	(wrapfs_notify_change): call notify_change, remove duplicated code
	(wrapfs_sops): rewrite using the GNU initializers

	* subr.c: added #error, some ifdef's

	* inode.c (wrapfs_create): restructure
	(wrapfs_lookup): add FIST_OP_LOOKUP_PRECALL and FIST_OP_LOOKUP_POSTCALL
	(wrapfs_link): add check_parent(), DQUOT_INIT; dget/dput dentries
	(wrapfs_unlink): use vfs_unlink; propagate i_nlink from lower
	inode and call d_delete on dentry (Marc Schaeffer bug #1); add
	check_parent()
	(wrapfs_symlink): add check_parent(); add code to handle name
	mangling; dget/dput dentries
	(wrapfs_mkdir): add check_parent(); propagate i_nlink from hidden_dir
	(wrapfs_rmdir): add check_parent(); propagate i_nlink from
	hidden_dir and hidden_dentry, and call d_delete on dentry (Marc
	Schaeffer bug #1);
	(wrapfs_mknod): add check_parent(), DQUOT_INIT;
	(wrapfs_rename): dget/dput dentries;
	(wrapfs_readlink): add code to handle name mangling
	(wrapfs_readpage): use new functions page_cache_alloc,
	page_cache_entry, page_cache_free; add two args to
	wrapfs_encode_block; change logic flow to avoing leaving locked
	pages behind
	(wrapfs_permission): call permission(), remove duplicated code
	(wrapfs_updatepage): add two args to wrapfs_encode_block
	(wrapfs_iops): rewrite using the GNU initializers

	* fist.h: include <linux/quotaops.h> (for DQUOT_*);
	add typedefs for vnode_t and vfs_t; remove stale code

	* file.c (wrapfs_llseek): event was renamed to global_event
	(wrapfs_read): add two args to wrapfs_decode_block()
	(wrapfs_write): add two args to wrapfs_encode_block()
	wrapfs_getdents_callback: new structure to support name mangling
	(wrapfs_filldir): new function to support name mangling
	(wrapfs_readdir): use wrapfs_filldir if doing name mangling
	(wrapfs_ioctl): add FIST_IOCTL_ECLS
	(wrapfs_open): add get_write_access/put_write_access calls (Marc
	Schaeffer bug #3); don't leak dentries if open fails
	(wrapfs_fops): rewrite using the GNU initializers

	* dentry.c: conditionally include fist_wrapfs.h
	(wrapfs_d_revalidate): fix to return 1 (boolean function)
	(wrapfs_d_release): set private data to NULL; call dput only on
	non-NULL hidden_dentry
	(wrapfs_d_iput): enclose in #ifdef FIST_DEBUG
	wrapfs_dops: rewrite using the GNU initializers

	* Makefile: sync with 2.3 version

