2005-02-07  Miklos Szeredi <miklos@szeredi.hu>

	* Cleaned up directory reading (temporary file is not used)

2005-02-02  Miklos Szeredi <miklos@szeredi.hu>

	* Released 2.2

2005-02-02  Miklos Szeredi <miklos@szeredi.hu>

	* Fix possible race when operation is interrupted

2005-01-28  Miklos Szeredi <miklos@szeredi.hu>

	* Fix compilation on 2.6.7

2005-01-26  Miklos Szeredi <miklos@szeredi.hu>

	* Released 2.2-pre6

2005-01-26  Miklos Szeredi <miklos@szeredi.hu>

	* Fix bug in link() operation which caused the wrong path to be
	passed as the first argument.  Found by Anton Altaparmakov

2005-01-21  Miklos Szeredi <miklos@szeredi.hu>

	* LIB: fix double reply in readdir operation

	* fusermount: fix uid checking bug.  Patch by Adam Connell

	* KERNEL: fix compile on various RedHat patched 2.4 kernels.
	Patch by Keshava Gowda

2005-01-20  Miklos Szeredi <miklos@szeredi.hu>

	* KERNEL: provide correct llseek semantics for fuse device (fixes
	a bug on Progeny 2.4.20 kernel).  Reported by Valient Gough

2005-01-20  Miklos Szeredi <miklos@szeredi.hu>

	* Released 2.2-pre5 (matches kernel 2.6.11-rc1-mm2)

2005-01-18  Miklos Szeredi <miklos@szeredi.hu>

	* KERNEL ABI: remove GETDIR operation, and add OPENDIR, READDIR
	and RELEASEDIR.  This ends the ugly hack of passing a file
	descriptor to the kernel, and actually makes the code simpler.

2005-01-17  Miklos Szeredi <miklos@szeredi.hu>

	* Released 2.2-pre4

2005-01-17  Miklos Szeredi <miklos@szeredi.hu>

	* fusermount: remove capability setting, which was the cause of
	problems for some users.  It seems that FS related capabilities
	are removed by setfsuid(), so this isn't even needed.

2005-01-15  Miklos Szeredi <miklos@szeredi.hu>

	* fix compilation on 2.4 kernels (reported by Valient Gough)

	* fix failure to unmount bug (found by David Shaw)

	* fusermount: improve parsing of /etc/fuse.conf

2005-01-13  Miklos Szeredi <miklos@szeredi.hu>

	* Remove 'mount_max' and 'user_allow_other' module options.  These
	are now checked by fusermount, and can be set in /etc/fuse.conf

	* KERNEL: change check for fsid == 0 to capable(CAP_DAC_OVERRIDE)

2005-01-11  Miklos Szeredi <miklos@szeredi.hu>

	* KERNEL: fix possible inode allocation problem, where
	sizeof(struct inode) is not aligned (found by Mike Waychison)

	* KERNEL: use new follow_link/put_link methods

	* KERNEL: cosmetic fixes

2005-01-10  Miklos Szeredi <miklos@szeredi.hu>

	* Released 2.2-pre3

2005-01-10  Miklos Szeredi <miklos@szeredi.hu>

	* Add missing code that was accidently left out

2005-01-09  Miklos Szeredi <miklos@szeredi.hu>

	* Released 2.2-pre2

2005-01-09  Miklos Szeredi <miklos@szeredi.hu>

	* Change "uid" mount option to "user_id" to avoid confusion with a
	mount option "uid" commonly used by many filesystems

2005-01-09  Miklos Szeredi <miklos@szeredi.hu>

	* Released 2.2-pre1

2005-01-09  Miklos Szeredi <miklos@szeredi.hu>

	* If FUSE is configured in the kernel, don't build it by default

2005-01-07  Miklos Szeredi <miklos@szeredi.hu>

	* Compile fix by Christian Magnusson

2005-01-05  Miklos Szeredi <miklos@szeredi.hu>

	* Fix compilation for 2.6.{0-5} kernels

2005-01-04  Miklos Szeredi <miklos@szeredi.hu>

	* KERNEL: if request is interrupted, still keep reference to used
	inode(s) and file, so that FORGET and RELEASE are not sent until
	userspace finishes the request.

	* remove /{sys,proc}/fs/fuse/version, and instead add an INIT
	request with the same information, which is more flexible,
	simpler, works on embedded systems.

2004-12-16  Miklos Szeredi <miklos@szeredi.hu>

	* KERNEL ABI: update interface to make it independent of type
	sizes.  This will help on 64 bit architectures which can run
	legacy 32 bit applications.

	* KERNEL ABI: add "len" field to request headers.  This will allow
	sending/receiving requests in multiple chunks.

	* KERNEL: handle file type change more intelligently

	* LIB: "-o debug" option should disable backgrounding (fix by
	Fabien Reygrobellet)

2004-12-13  Miklos Szeredi <miklos@szeredi.hu>

	* KERNEL: invalidate dentry/attributes if interrupted request
	could leave filesystem in an unknown state.

2004-12-12  Miklos Szeredi <miklos@szeredi.hu>

	* KERNEL: lots of cleanups related to avoiding possible deadlocks.
	These will cause some regressions, but stability is considered
	more important.  If any of these features turns out to be
	important, it can be readded with the deadlock problems addressed.

	* Make all requests interruptible (only with SIGKILL currently).
	This can be used to break any deadlock produced by the userspace
	filesystem accessing it's own exported files.  The RELEASE request
	is special, because if it's interrupted before sending it to
	userspace it is still sent, but the reply is not awaited.

	* If request is interrupted before being sent to userspace, and if
	it hasn't yet got any side effects, it is always restarted,
	regardless of the SA_RESTART flag.  This makes these interruptions
	transparent to the process.

	* Remove shared-writable mmap support, which was prone to an
	out-of-memory deadlock situation

	* Remove INVALIDATE userspace initiated request

	* Make readpages() synchronous.  Asynchronous requests are
	deadlock prone, since they cannot be interrupted.

	* Add readv/writev support to fuse device operations

	* Remove some printks, which userspace FS can use for a DoS
	against syslog

	* Remove 'large_read' mount option from 2.6 in kernel, check it in
	fusermount instead

	* LIB: improve compatibility with a fuse.h header installed in
	${prefix}/include which in turn includes the real header.

	* LIB: improve compatibility by defining fuse_main() (which is now
	not used), so old configure scripts find it.

2004-12-10  Miklos Szeredi <miklos@szeredi.hu>

	* When mounting on a subdirectory of / don't duplicate slashes at
	the beggining of path (spotted by David Shaw)

2004-12-09  Miklos Szeredi <miklos@szeredi.hu>

	* Fix bug causing garbage in mount options (spotted by David Shaw)

2004-12-07  Miklos Szeredi <miklos@szeredi.hu>

	* Add 'writepage' flag to 'fuse_file_info'.

	* More comments in fuse.h

	* Get rid of double underscores

2004-12-04  Miklos Szeredi <miklos@szeredi.hu>

	* Add -D_FILE_OFFSET_BITS=64 to cflags provided by pkg-config

	* helper.c: add -ho option, which only displays the options not
	the usage header.  This can be used by filesystems which have
	their own options.

2004-12-03  Miklos Szeredi <miklos@szeredi.hu>

	* Add source compatibility to 2.1 and 1.1 APIs.  To select betwen
	versions simply define FUSE_USE_VERSION to 22, 21 or 11 before
	including the fuse header

	* Add binary compatibility to 2.1 version of library with symbol
	versioning

2004-12-03  Miklos Szeredi <miklos@szeredi.hu>

	* Released 2.1

2004-12-01  Miklos Szeredi <miklos@szeredi.hu>

	* kernel: clean up writing functions

	* kernel: no allocation on write in direct_io mode

	* move linux/fuse.h to fuse_kernel.h

2004-11-30  Miklos Szeredi <miklos@szeredi.hu>

	* kernel: clean up reading functions

2004-11-29  Miklos Szeredi <miklos@szeredi.hu>

	* kernel: make readpage() uninterruptible

	* kernel: check readonly filesystem flag in fuse_permission

	* lib: don't die if version file not found and new style device
	exists

	* lib: add '-r' option, which is short for '-o ro'

	* fusermount: simplify device opening

	* kernel: when direct_io is turend on, copy data directly to
	destination without itermediate buffer.  More efficient and safer,
	since no allocation is done.

	* fusermount: fix warning if fuse module is not loaded

	* kernel: use /dev/fuse on 2.4 too

2004-11-26  Miklos Szeredi <miklos@szeredi.hu>

	* libfuse API change: open, read, write, flush, fsync and release
	are passed a 'struct fuse_file_info' pointer containing the open
	flags (open and release), and the file handle.  Verion changed to
	3.0.

2004-11-23  Miklos Szeredi <miklos@szeredi.hu>

	* More cleanups in the kernel

	* The 10,229 charater device number has been assigned for FUSE

	* Version file checking fix (reported by Christian Magnusson)

	* fusermount: opening the fuse device now doesn't need /sys.

	* Optimize reading by controlling the maximum readahead based on
	the 'max_read' mount option

	* fixes for UCLIBC (Christian Magnusson)

2004-11-19  Miklos Szeredi <miklos@szeredi.hu>

	* Cleaned up kernel in preparation for merge into mainline:

	* Use /sys/fs/fuse/version instead of /proc/fs/fuse/version

	* Use real device (/dev/fuse) instead of /proc/fs/fuse/dev

	* __user annotations for sparse

	* allocate individual pages instead of kmalloc in fuse_readdir,
	fuse_read and fuse_write.

	* Fix NFS export in case "use_ino" mount option is given

	* Make libfuse and fusermount compatible with future versions

	* fusermount: properly add mount options to /etc/mtab

2004-11-15  Miklos Szeredi <miklos@szeredi.hu>

	* fusermount: do not resolve last component of mountpoint on if it
	is '.' or '..'.  This new path resolvation is now done on mount as
	well as unmount.  This enables relative paths to work on unmount.

	* fusermount: parse common mount options like "ro", "rw", etc...

	* Allow module params to be changed through sysfs

2004-11-14  Miklos Szeredi <miklos@szeredi.hu>

	* Released 2.1-pre1

2004-11-14  Miklos Szeredi <miklos@szeredi.hu>

	* Fix bug in fuse_readpages() causing Oops in certain situations.
	Bug found by Vincenzo Ciancia.

	* Fix compilation with kernels versions > 2.6.9.

2004-11-11  Miklos Szeredi <miklos@szeredi.hu>

	* Check kernel interface version in fusermount to prevent
	strangeness in case of mismatch.

	* No need to allocate fuse_conn until actual mount happens

	* Fix potential race between umount and fuse_invalidate

	* Check superblock of proc file in addition to inode number

	* Fix race between request_send_noreply() and fuse_dev_release()

2004-11-10  Miklos Szeredi <miklos@szeredi.hu>

	* Separate configure for the kernel directory

	* Don't allow write to return more than 'count'

	* Extend kernel interface for future use

2004-11-09  Miklos Szeredi <miklos@szeredi.hu>

	* Fix 'makeconf.sh' to use autoreconf if available

2004-11-08  Miklos Szeredi <miklos@szeredi.hu>

	* Add ino argument to 'fuse_dirfil_t'.  NOTE: This breaks source
	compatibility with earlier versions.  To compile earier versions
	just add '-DFUSE_DIRFIL_COMPAT' compile flag or fix the source.
	Do not use the "use_ino" mount flag with filesystems compiled with
	FUSE_DIRFIL_COMPAT.

	* Add pkg-config support.  To compile a FUSE based filesystem you
	can do  "gcc -Wall `pkg-config --cflags --libs fuse` myfs.c -o myfs"
	or similar.  Note, that the PKG_CONFIG_PATH environment variable
	usually needs to be set to "/usr/local/lib/pkgconfig".

	* fuse.h is now installed in ${prefix}/include/fuse/

2004-11-02  Miklos Szeredi <miklos@szeredi.hu>

	* Added "use_ino" mount option.  This enables the filesystems to
	set the st_ino field on files

2004-11-01  Miklos Szeredi <miklos@szeredi.hu>

	* Fix compile problems with ancient (<=2.4.18) kernels (reported
	by Jeremy Smith)

	* Add "allow_root" mount option.  Patch by Yaroslav Rastrigin

	* Clear the 'exited' flag when mail loop is finished

2004-10-28  Miklos Szeredi <miklos@szeredi.hu>

	* Make xattr functions work under 2.6 (bug found by Vincenzo
	Ciancia)

2004-10-26  Miklos Szeredi <miklos@szeredi.hu>

	* Reset request in fuse_flush() (bugreport by David Shaw)

2004-10-21  Miklos Szeredi <miklos@szeredi.hu>

	* fuse_main() now does not exit on error, rather it returns an
	error code

	* Exported __fuse_setup() and __fuse_teardown() functions, which
	make it easier to implement a custom event loop.

	* Use daemon() call to background the filesystem after mounting.
	This function closes the standard input, output and error and
	changes the current working directory to "/".

2004-10-14  Miklos Szeredi <miklos@szeredi.hu>

	* Released 1.9

2004-10-09  Miklos Szeredi <miklos@szeredi.hu>

	* Don't allow fuse_flush() to be interrupted (bug found by David
	Shaw)

2004-09-27  Miklos Szeredi <miklos@szeredi.hu>

	* Add PID to fuse_context.  Patch by Steven James

	* Change file handle type to 'unsigned long' in kernel interface

2004-09-22  Miklos Szeredi <miklos@szeredi.hu>

	* A slight API change: fuse_get_context() doesn't need the "fuse"
	pointer, but the returned context contains it instead.  The
	fuse_get() function is not needed anymore, so it's removed.

	* Fix mounting and umounting FUSE filesystem under another FUSE
	filesystem by non-root (bug spotted by Valient Gough)

2004-09-21  Miklos Szeredi <miklos@szeredi.hu>

	* Fix deadlock in case of memory allocation failure.  Patch by
	Christian Magnusson

2004-09-16  Miklos Szeredi <miklos@szeredi.hu>

	* Check memory allocation failures in libfuse

2004-09-14  Miklos Szeredi <miklos@szeredi.hu>

	* Check temporary file creation failure in do_getdir().  Bug
	spotted by Terje Oseberg

2004-09-13  Miklos Szeredi <miklos@szeredi.hu>

	* Allow "large_read" option for 2.6 kernels but warn of deprecation

	* Make requests non-interruptible so race with FORGET is avoided.
	This is only a temporary solution

	* Support compiling FUSE kernel module on 2.4.x UML kernels

2004-09-09  Miklos Szeredi <miklos@szeredi.hu>

	* Fix bug in case two FORGETs for the same node are executed in
	the wrong order.  Bug spotted and endured for months by Franco
	Broi, and logfile for solution provided by Terje Oseberg

2004-09-01  Miklos Szeredi <miklos@szeredi.hu>

	* Add -D_REENTRANT to the compile flags

	* Add documentation of fuse internals by Terje Oseberg

2004-08-16  Miklos Szeredi <miklos@szeredi.hu>

	* Change release method to be non-interruptible.  Fixes bug
	causing missing release() call when program which has opened files
	is killed (reported by Franco Broi and David Shaw)

2004-07-29  Miklos Szeredi <miklos@szeredi.hu>

	* Add fuse_invalidate() to library API

2004-07-26  Miklos Szeredi <miklos@szeredi.hu>

	* Check permissions in setattr if 'default_permissions' flag is
	set.  Bug spotted by Damjan Lango

2004-07-24  Miklos Szeredi <miklos@szeredi.hu>

	* 'large_read' mount option removed for 2.6 kernels, since the
	default (dynamic read size) is better

	* Extend kernel API with file handles.  A file handle is returned
	by open, and passed to read, write, flush, fsync and release.
	This is currently only used for debug output in the library.

	* Security changes:

	* Change the current directory to the mountpoint before checking
	the permissions and mount filesystem on "."

	* By default don't modprobe the fuse module for non-root.  The old
	behavior can be restored with the '--enable-auto-modprobe' flag of
	./configure

	* By default don't allow shared writable mappings for non-root.
	The old behavior can be restored with the 'user_mmap=1' module
	parameter

2004-07-23  Miklos Szeredi <miklos@szeredi.hu>

	* Clean up mount option passing to fusermount and to fuse_new()
	BEWARE: this changes the userspace API slightly, and the command
	line usage of programs using fuse_main()

2004-07-20  Miklos Szeredi <miklos@szeredi.hu>

	* Optimize reading under 2.6 kernels by issuing multiple page
	asynchronous read requests

2004-07-18  Miklos Szeredi <miklos@szeredi.hu>

	* Only use redirty_page_for_writepage() for kernels >= 2.6.6

2004-07-16  Miklos Szeredi <miklos@szeredi.hu>

	* Separate directory entry and inode attribute validity timer

	* New write semaphore to stop page writeback during truncate

	* Fsync now waits for all writes to complete before sending the
	request

	* Optimization: if a page is completely written by
	fuse_commit_write(), clear the dirty flag and set the uptodate
	flag for that page

	* Some memory cleanup at exit

2004-07-13  Miklos Szeredi <miklos@szeredi.hu>

	* Add FUSE_HARD_REMOVE flag, and '-i' option to fuse main, which
	disable the "hide if open" behavior of unlink/rename.

	* If temporary buffer allocation fails in raw read, fall back to a
	smaller buffer

2004-07-12  Miklos Szeredi <miklos@szeredi.hu>

	* Fix bug in do_open() in libfuse: open count was incremented
	after the reply is sent so it could race with unlink/forget and
	cause an abort.

2004-07-08  Miklos Szeredi <miklos@szeredi.hu>

	* When performing create or remove operation, refresh the parent's
	attributes on next revalidate, as i_nlink (and maybe size/time)
	could be inacurate.

	* Use redirty_page_for_writepage() in fuse_writepage() for skipped
	pages (2.6 only)

	* Set set_page_dirty address space operation (2.6 only)

2004-07-06  Miklos Szeredi <miklos@szeredi.hu>

	* Minor fix in read:  print debug info even if read size is zero

2004-07-04  Miklos Szeredi <miklos@szeredi.hu>

	* Fix race between truncate and writepage (fsx-linux now runs
	without error)

2004-07-02  Miklos Szeredi <miklos@szeredi.hu>

	* Fix kernel hang on mkfifo under 2.4 kernels (spotted and patch
	by Mattias Wadman)

	* Added option for direct read/write (-r)

	* Fix revalidate time setting for newly created inodes

	* Remove uid==0 check for '-x' option in fusermount (kernel checks
	this)

	* fuse_main() only installs handlers for signals (out of INT, HUP,
	TERM, PIPE), for which no handler has yet been installed

	* Add module option 'user_allow_other' which if set to non-zero
	will allow non root user to specify the 'allow_other' mount option
	('-x' option of fusermount)

	* Fix deadlock between page writeback completion and truncate
	(bug found by Valient Gough with the fsx-linux utility)

2004-07-01  Miklos Szeredi <miklos@szeredi.hu>

	* Change passing fuse include dir to 2.6 kernel make system more
	robust (fixes compile problems seen on SuSE 9.1 with updated 2.6
	kernel)

2004-06-30  Miklos Szeredi <miklos@szeredi.hu>

	* Acquire inode->i_sem before open and release methods to prevent
	concurrent rename or unlink operations.

	* Make __fuse_read_cmd() read only one command.  This allows
	multiplexing the fuse file descriptor with other event sources
	using select() or poll() (patch by Jeff Harris)

	* Export 'exited' flag with __fuse_exited() (patch by Jeff Harris)

2004-06-27  Miklos Szeredi <miklos@szeredi.hu>

	* Fix file offset wrap around at 4G when doing large reads

2004-06-24  Miklos Szeredi <miklos@szeredi.hu>

	* Fix memory leak in open (Valient Gough)

2004-06-24  Miklos Szeredi <miklos@szeredi.hu>

	* Add "close after delete" support to libfuse (patch by Valient
	Gough)

	* Cancel all worker threads before exit in multithreaded mode

2004-06-23  Miklos Szeredi <miklos@szeredi.hu>

	* Fix locking bugs

	* Don't send reply to RELEASE

	* Work with newer libtool (1.5a)

	* Check for st_atim member of struct stat

2004-06-22  Miklos Szeredi <miklos@szeredi.hu>

	* No request allocation needed on inode and file release

2004-06-21  Miklos Szeredi <miklos@szeredi.hu>

	* Fix possible inode leak in userspace in case of unfinished
	lookup/mknod/mkdir/symlink/link operation.

2004-06-20  Miklos Szeredi <miklos@szeredi.hu>

	* Fix some races and cleanups in fuse_read_super()

2004-06-19  Miklos Szeredi <miklos@szeredi.hu>

	* Requests are allocated at open time

2004-06-03  Miklos Szeredi <miklos@szeredi.hu>

	* Build shared library as well as static (using libtool)

	* Change FUSE_MINOR_VERSION from 1 to 0.  I know it's illegal but
	there has not been a release with the previous minor number, and I
	hope nobody is using it for anything.

	* Change fuse_main(), so that default behavior is to go into
	background if mount is successful.  '-f' and '-d' options disable
	backgrounding.  This fixes the "Why does my FUSE daemon hang?"
	newbie complaint.

	* Cache ENOSYS (function not implemented) errors on *xattr, flush
	and fsync

	* Don't call getdir method from open() only from first readdir().
	Open is sometimes just used to store the current directory
	(e.g. find)

2004-05-18  Miklos Szeredi <miklos@szeredi.hu>

	* Added flush() call

2004-05-04  Miklos Szeredi <miklos@szeredi.hu>

	* Extended attributes support for 2.4 (patch by Cody Pisto)

2004-04-20  Miklos Szeredi <miklos@szeredi.hu>

	* Fixed parser with modversions (Mattias Wadman)

2004-04-19  Miklos Szeredi <miklos@szeredi.hu>

	* Added mount option parser to 2.4 build

2004-04-13  Miklos Szeredi <miklos@szeredi.hu>

	* Replaced binary mount data with text options

	* Show FUSE specific mount options in /proc/mounts

	* Check in fuse.h whether _FILE_OFFSET_BITS is set to 64

2004-04-09  Miklos Szeredi <miklos@szeredi.hu>

	* Check some limits so userspace won't get too big requests

2004-04-05  Miklos Szeredi <miklos@szeredi.hu>

	* Kill compile warning

	* Upgraded user-mount patch for 2.6.5

2004-04-02  Miklos Szeredi <miklos@szeredi.hu>

	* Add detection of user-mode-linux to configure

2004-03-31  Miklos Szeredi <miklos@szeredi.hu>

	* fixed zero size case for getxattr and listxattr

2004-03-30  Miklos Szeredi <miklos@szeredi.hu>

	* new fusermount flag '-z': lazy unmount, default is not lazy

	* Extended attributes operations added (getxattr, setxattr,
	listxattr, removexattr)

2004-03-25  Miklos Szeredi <miklos@szeredi.hu>

	* If filesystem doesn't define a statfs operation, then an
	all-zero default statfs is returned instead of ENOSYS

2004-03-24  Miklos Szeredi <miklos@szeredi.hu>

	* Add FS_BINARY_MOUNTDATA filesystem flag for kernels > 2.6.4

2004-03-09  Miklos Szeredi <miklos@szeredi.hu>

	* Fix for uClinux (Christian Magnusson)

2004-03-02  Miklos Szeredi <miklos@szeredi.hu>

	* fuse_main() adds "-n progname" to the fusermount command line

	* More kernel interface changes:

	* Lookup/getattr return cache timeout values

2004-02-25  Miklos Szeredi <miklos@szeredi.hu>

	* Clean up option parsing in fuse_main()

	* Added fuse_get() function which returns the fuse object created
	by fuse_main()

2004-02-20  Miklos Szeredi <miklos@szeredi.hu>

	* removed old way of mounting (fusermount mountpoint program)

	* more kernel interface changes:

	* added nanosecond precision to file times

	* removed interface version from mount data

	* added /proc/fs/fuse/version which contains MAJOR.MINOR

2004-02-19  Miklos Szeredi <miklos@szeredi.hu>

	* statfs library API changed to match other methods.  Since this
	  is not backward compatible FUSE_MAJOR_VERSION is changed to 2

	* kernel interface changes follow:

	* statfs changed to 64 bits, added 'bavail' field

	* add generation number to lookup result

	* optimized mknod/mkdir/symlink/link (no separate lookup is
	needed)

	* rdev size increased to 32 bits for mknod

	* kernel interface version changed to 3.1

2004-02-18  Miklos Szeredi <miklos@szeredi.hu>

	* user-mount upgraded for 2.6.3 kernel

2004-02-17  Miklos Szeredi <miklos@szeredi.hu>

	* Added user-mount.2.6.2-rc3.patch

	* Add FS_SAFE flag to fuse filesystem

	* fusermount should allow (un)mounting for non-root even if not
	suid-root

2004-02-12  Miklos Szeredi <miklos@szeredi.hu>

	* Remove MS_PERMISSION mount flag (that means something else now)

2004-02-10  Miklos Szeredi <miklos@szeredi.hu>

	* Added check for i_size_read/write functions to configure.in
	(patch by Valient Gough)

2004-02-06  Miklos Szeredi <miklos@szeredi.hu>

	* Fixed writing >= 2G files

	* Check file size on open (with generic_file_open())

	* Readpage calls flush_dcache_page() after storing data

	* Use i_size_read/write for accessing inode->i_size

	* Make loopback mount of a fuse file work

2004-02-04  Miklos Szeredi <miklos@szeredi.hu>

	* Released 1.1

2004-01-29  Miklos Szeredi <miklos@szeredi.hu>

	* Properly check if the inode exists in fuse_invalidate

2004-01-27  Miklos Szeredi <miklos@szeredi.hu>

	* Added -q option for fusermount

	* fuse_unmount() now uses -q option of fusermount, so no error is
	printed if the cause of the program exit is that the filesystem
	has already been unmounted

	* Fix i_nlink correctness after rmdir/unlink

2004-01-26  Miklos Szeredi <miklos@szeredi.hu>

	* Released 1.1-pre2

2004-01-26  Miklos Szeredi <miklos@szeredi.hu>

	* Fix typo (thanks Marcos Dione)

	* Compile fixes for 2.4 kernels

2004-01-23  Miklos Szeredi <miklos@szeredi.hu>

	* Fix CONFIG_MODVERSIONS compile on 2.6

2004-01-22  Miklos Szeredi <miklos@szeredi.hu>

	* Write all pending data before a RELEASE operation

	* Suppress 'Bad file descriptor' warning on exit

	* Replaced fusermount option '-d xxx' with '-n xxx' so it doesn't
	get confused with '-d' of fuse_main() (sorry about this change)

	* New fusermount option '-l' which enables big reads.  Big reads
	are now disabled by default.

	* fuse_main() can accept fusermount arguments after a '--'

2004-01-19  Miklos Szeredi <miklos@szeredi.hu>

	* Support for exporting filesystem over NFS (see README.NFS)

2004-01-14  Miklos Szeredi <miklos@szeredi.hu>

	* Support non-blocking writepage on 2.6.  This makes FUSE behave
	much more nicely in low-memory situations

	* Fix 32-bit dev handling in getattr and mknod for 2.6 kernels.
	(Note: the mknod method does not yet use 32bit device number)

2004-01-13  Miklos Szeredi <miklos@szeredi.hu>

	* Code cleanups

2004-01-07  Miklos Szeredi <miklos@szeredi.hu>

	* Released 1.1-pre1

2004-01-06  Miklos Szeredi <miklos@szeredi.hu>

	* Integrated 2.6 kernel support patch by Michael Grigoriev

	* Improvements and cleanups for 2.6 kernels

2004-01-05  Miklos Szeredi <miklos@szeredi.hu>

	* Added -d option to fusermount

2003-12-15  Miklos Szeredi <miklos@szeredi.hu>

	* Added major+minor version to library API, and minor version to
	  kernel API

2003-12-13  David McNab <david@rebirthing.co.nz>

	* Implemented fsync support in examples/example.py

	* Implemented 'fsync' and 'statfs' methods in python
	  interface

2003-12-12  Miklos Szeredi <miklos@szeredi.hu>

	* Make it compile on 2.4.19.

	* Add fsync operation (write file failed on xemacs & vi)

2003-12-12  David McNab <david@rebirthing.co.nz>

	* Added distutils support to the python module, as per standard
	  python development practice

2003-12-11  Miklos Szeredi <miklos@szeredi.hu>

	* Add file locking for mount/unmount (based on patch by Valient
	Gough)

2003-12-11  David McNab <david@rebirthing.co.nz>

	* Python filesystem - was broken with python2.3, now fixed:
	   - changed PyTuple_* calls to PySequence_*, because os.lstat
	     is no longer returning a pure tuple
	   - changed PyInt_Check() calls to also call PyLong_Check,
	     to cover for cases (eg os.lstat) where longs are returned
	   - Added support for file 'release' handling, which IMO is
	     essential since this signals to a FS that writes to a file
	     are complete (and therefore the file can now be disposed of
	     meaningfully at the python filesystem's discretion)
	   - Added '__init__' handler to base Fuse class, which allows
	     your Python class to know the mountpoint and mount args,
	     as attributes myfs.mountpoint, myfs.optlist, myfs.optdict

	* General:
	   - added 'mount.fuse' script (in util/ dir), which is meant to be
	     symlinked from /sbin, and which allows FUSE filesystems to
	     be mounted with the 'mount' command, and listed in fstab;
	     also, mount arguments get passed to your filesystem


2003-11-04  Miklos Szeredi <miklos@szeredi.hu>

	* Fix kernel version detection (again).  Bugreport by Peter Levart

2003-11-03  Miklos Szeredi <miklos@szeredi.hu>

	* Applied read combining patch by Michael Grigoriev (tested by
	Valient Gough and Vincent Wagelaar)

2003-10-22  Miklos Szeredi <miklos@szeredi.hu>

	* Mtab handling fix in fusermount by "Valient Gough" (SF patch
	#766443)

2003-10-13  Miklos Szeredi <miklos@szeredi.hu>

	* Error code fixes in kernel module

2003-10-04  Miklos Szeredi <miklos@szeredi.hu>

	* kernel version detection fix

	* fusermount now uses "lazy" umount option

	* fusermount can use modprobe with module-init-tools

2003-09-08  Miklos Szeredi <miklos@szeredi.hu>

	* Integrated caching patch by Michael Grigoriev

	* Added "Filesystems" file with descriptions of projects using
	FUSE

	* Added patch by Michael Grigoriev to allow compliation of FUSE
	kernel module for 2.6 kernels

2003-06-02  Miklos Szeredi <miklos@szeredi.hu>

	* And another spec-file fix by Achim Settelmeier

2003-05-26  Miklos Szeredi <miklos@szeredi.hu>

	* Spec-file fix by Achim Settelmeier

2003-03-10  Miklos Szeredi <miklos@szeredi.hu>

	* Fix umount oops (found by Samuli Kärkkäinen)

2003-03-05  Miklos Szeredi <miklos@szeredi.hu>

	* Merge of fuse_redhat.spec and fuse.spec by Achim Settelmeier

2003-03-04  Miklos Szeredi <miklos@szeredi.hu>

	* Updated fuse.spec file (Achim Settelmeier)

2003-02-19  Miklos Szeredi <miklos@szeredi.hu>

	* Version 1.0 released

2003-02-12  Miklos Szeredi <miklos@szeredi.hu>

	* SuSE compilation fix by Juan-Mariano de Goyeneche

2002-12-10  Miklos Szeredi <miklos@szeredi.hu>

	* The release() VFS call is now exported to the FUSE interface

2002-12-05  Miklos Szeredi <miklos@szeredi.hu>

	* 64 bit file offset fixes in the fuse kernel module

	* Added function 'fuse_exit()' which can be used to exit the main
	loop

2002-12-03  Miklos Szeredi <miklos@szeredi.hu>

	* Added _FILE_OFFSET_BITS=64 define to fuse.h.  Note, that this is
	an incompatible interface change.

2002-10-28  Miklos Szeredi <miklos@szeredi.hu>

	* Portablility fix (bug reported by C. Chris Erway)

2002-10-25  Miklos Szeredi <miklos@szeredi.hu>

	* Use Mark Glines' fd passing method for default operation instead
	of old reexec

2002-10-22  Miklos Szeredi <miklos@szeredi.hu>

	* fix "Stale NFS file handle" bug caused by changes in 2.4.19

2002-10-22  Miklos Szeredi <miklos@szeredi.hu>

	* fix incompatiblity with Red Hat kernels, with help from Nathan
	Thompson-Amato.

2002-04-18  Mark Glines <mark@glines.org>

	* added an alternative to fuse_mount(), called
      fuse_mount_ioslave(), which does not need to reexec the
      FUSE program.
	* added a small helper util needed by fuse_mount_ioslave().

2002-03-16  Mark Glines <mark@glines.org>

	* use struct fuse_statfs everywhere possible to avoid problems
      with the headerfiles changing struct statfs member sizes

2002-03-01  Miklos Szeredi <miklos@szeredi.hu>

	* Another RPM spec file for RedHat >= 7 by Ian Pilcher

2002-01-14  Miklos Szeredi <miklos@szeredi.hu>

	* RPM support by Achim Settelmeier

2002-01-09  Miklos Szeredi <miklos@szeredi.hu>

	* Version 0.95 released

2002-01-09  Miklos Szeredi <miklos@szeredi.hu>

	* Revaidate all path components not just the last, this means a
	very small performance penalty for being more up-to-date.

2002-01-08  Miklos Szeredi <miklos@szeredi.hu>

	* Update and fix python interface

2002-01-07  Mark Glines <mark@glines.org>

	* Added statfs() support to kernel, lib, examples, and perl!

2001-12-26  Miklos Szeredi <miklos@szeredi.hu>

	* Better cross compilation support

	* Ported to Compaq IPAQ

2001-12-20  Miklos Szeredi <miklos@szeredi.hu>

	* Added function fuse_get_context() to library API (inspired by
	patch from Matt Ryan)

	* Added flags to fusermount and to kernel interface to control
	permission checking

	* Integrated fuse_set_operations() into fuse_new()

2001-12-08  Miklos Szeredi <miklos@szeredi.hu>

	* Applied header protection + extern "C" patch by Roland
	Bauerschmidt

2001-12-02  Miklos Szeredi <miklos@szeredi.hu>

	* Added perl bindings by Mark Glines

2001-11-21  Miklos Szeredi <miklos@szeredi.hu>

	* Cleaned up way of mounting simple filesystems.

	* fuse_main() helper function added

2001-11-18  Miklos Szeredi <miklos@szeredi.hu>

	* Optimized read/write operations, so that minimal copying of data
	is done

2001-11-14  Miklos Szeredi <miklos@szeredi.hu>

	* Python bindings by Jeff Epler added

2001-11-13  Miklos Szeredi <miklos@szeredi.hu>

	* Fixed vfsmount reference leak in fuse_follow_link

	* FS blocksize is set to PAGE_CACHE_SIZE, blksize attribute from
	userspace is ignored

2001-11-09  Miklos Szeredi <miklos@szeredi.hu>

	* Started ChangeLog
