fuse: Update to 2.9.4

Change-Id: I0877c624531286f47da29a7ab16c7ff3cfac0090
diff --git a/fuse/README b/fuse/README
index 3d1f6f0..398dd65 100644
--- a/fuse/README
+++ b/fuse/README
@@ -1,12 +1,380 @@
-Libfuse for Android
+General Information
+===================
 
-FUSE[1] is a framework to develop userspace file systems for linux. Since Android is based on linux, it won't be too difficult to port libfuse to Android.
+FUSE (Filesystem in Userspace) is a simple interface for userspace
+programs to export a virtual filesystem to the Linux kernel.  FUSE
+also aims to provide a secure method for non privileged users to
+create and mount their own filesystem implementations.
 
-The main problem of building and running libfuse on Android is that the bionic c library lacks support for pthread_cancel(), which is necessary for libfuse multi-thread code. This stackoverflow entry[2] has suggested a solution, which uses SIGUSR1 as an alternative. It seems to work.
+You can download the source code releases from
 
-Libfuse can be build with Android NDK[3]. If success, you will get libfuse.a and an example program fusexmp. To run the example, the android kernel should be built with FUSE kernel support.
+  http://sourceforge.net/projects/fuse
 
-References:
-[1]. http://fuse.sourceforge.net
-[2]. http://stackoverflow.com/questions/4610086/pthread-cancel-alternatives-in-android-ndk
-[3]. http://developer.android.com/sdk/ndk/index.html
+or alternatively you can use CVS to get the very latest development
+version:
+
+  cvs -d :pserver:anonymous@fuse.cvs.sourceforge.net:/cvsroot/fuse co fuse
+
+
+Dependencies
+============
+
+Linux kernel version 2.6.X where X >= 9.
+
+Alternatively a kernel module from FUSE release 2.5.* can be used with
+this release, which supports kernels >= 2.4.21.
+
+Installation
+============
+
+./configure
+make
+make install
+modprobe fuse
+
+You may also need to add '/usr/local/lib' to '/etc/ld.so.conf' and/or
+run ldconfig.
+
+You'll also need a fuse kernel module, Linux kernels 2.6.14 or later
+contain FUSE support.
+
+For more details see the file 'INSTALL'
+
+How To Use
+==========
+
+FUSE is made up of three main parts:
+
+ - A kernel filesystem module
+
+ - A userspace library
+
+ - A mount/unmount program
+
+
+Here's how to create your very own virtual filesystem in five easy
+steps (after installing FUSE):
+
+  1) Edit the file example/fusexmp.c to do whatever you want...
+
+  2) Build the fusexmp program
+
+  3) run 'example/fusexmp /mnt/fuse -d'
+
+  4) ls -al /mnt/fuse
+
+  5) Be glad
+
+If it doesn't work out, please ask!  Also see the file 'include/fuse.h' for
+detailed documentation of the library interface.
+
+Security
+========
+
+If you run 'make install', the fusermount program is installed
+set-user-id to root.  This is done to allow normal users to mount
+their own filesystem implementations.
+
+There must however be some limitations, in order to prevent Bad User from
+doing nasty things.  Currently those limitations are:
+
+  - The user can only mount on a mountpoint, for which it has write
+    permission
+
+  - The mountpoint is not a sticky directory which isn't owned by the
+    user (like /tmp usually is)
+
+  - No other user (including root) can access the contents of the mounted
+    filesystem.
+
+Configuration
+=============
+
+Some options regarding mount policy can be set in the file
+'/etc/fuse.conf'
+
+Currently these options are:
+
+mount_max = NNN
+
+  Set the maximum number of FUSE mounts allowed to non-root users.
+  The default is 1000.
+
+user_allow_other
+
+  Allow non-root users to specify the 'allow_other' or 'allow_root'
+  mount options.
+
+
+Mount options
+=============
+
+Most of the generic mount options described in 'man mount' are
+supported (ro, rw, suid, nosuid, dev, nodev, exec, noexec, atime,
+noatime, sync async, dirsync).  Filesystems are mounted with
+'-onodev,nosuid' by default, which can only be overridden by a
+privileged user.
+
+These are FUSE specific mount options that can be specified for all
+filesystems:
+
+default_permissions
+
+  By default FUSE doesn't check file access permissions, the
+  filesystem is free to implement it's access policy or leave it to
+  the underlying file access mechanism (e.g. in case of network
+  filesystems).  This option enables permission checking, restricting
+  access based on file mode.  This is option is usually useful
+  together with the 'allow_other' mount option.
+
+allow_other
+
+  This option overrides the security measure restricting file access
+  to the user mounting the filesystem.  So all users (including root)
+  can access the files.  This option is by default only allowed to
+  root, but this restriction can be removed with a configuration
+  option described in the previous section.
+
+allow_root
+
+  This option is similar to 'allow_other' but file access is limited
+  to the user mounting the filesystem and root.  This option and
+  'allow_other' are mutually exclusive.
+
+kernel_cache
+
+  This option disables flushing the cache of the file contents on
+  every open().  This should only be enabled on filesystems, where the
+  file data is never changed externally (not through the mounted FUSE
+  filesystem).  Thus it is not suitable for network filesystems and
+  other "intermediate" filesystems.
+
+  NOTE: if this option is not specified (and neither 'direct_io') data
+  is still cached after the open(), so a read() system call will not
+  always initiate a read operation.
+
+auto_cache
+
+  This option enables automatic flushing of the data cache on open().
+  The cache will only be flushed if the modification time or the size
+  of the file has changed.
+
+large_read
+
+  Issue large read requests.  This can improve performance for some
+  filesystems, but can also degrade performance.  This option is only
+  useful on 2.4.X kernels, as on 2.6 kernels requests size is
+  automatically determined for optimum performance.
+
+direct_io
+
+  This option disables the use of page cache (file content cache) in
+  the kernel for this filesystem.  This has several affects:
+
+     - Each read() or write() system call will initiate one or more
+       read or write operations, data will not be cached in the
+       kernel.
+
+     - The return value of the read() and write() system calls will
+       correspond to the return values of the read and write
+       operations.  This is useful for example if the file size is not
+       known in advance (before reading it).
+
+max_read=N
+
+  With this option the maximum size of read operations can be set.
+  The default is infinite.  Note that the size of read requests is
+  limited anyway to 32 pages (which is 128kbyte on i386).
+
+max_readahead=N
+
+  Set the maximum number of bytes to read-ahead.  The default is
+  determined by the kernel.  On linux-2.6.22 or earlier it's 131072
+  (128kbytes)
+
+max_write=N
+
+  Set the maximum number of bytes in a single write operation.  The
+  default is 128kbytes.  Note, that due to various limitations, the
+  size of write requests can be much smaller (4kbytes).  This
+  limitation will be removed in the future.
+
+async_read
+
+  Perform reads asynchronously. This is the default
+
+sync_read
+
+  Perform all reads (even read-ahead) synchronously.
+
+hard_remove
+
+  The default behavior is that if an open file is deleted, the file is
+  renamed to a hidden file (.fuse_hiddenXXX), and only removed when
+  the file is finally released.  This relieves the filesystem
+  implementation of having to deal with this problem.  This option
+  disables the hiding behavior, and files are removed immediately in
+  an unlink operation (or in a rename operation which overwrites an
+  existing file).
+
+  It is recommended that you not use the hard_remove option. When
+  hard_remove is set, the following libc functions fail on unlinked
+  files (returning errno of ENOENT):
+     - read()
+     - write()
+     - fsync()
+     - close()
+     - f*xattr()
+     - ftruncate()
+     - fstat()
+     - fchmod()
+     - fchown()
+
+debug
+
+  Turns on debug information printing by the library.
+
+fsname=NAME
+
+  Sets the filesystem source (first field in /etc/mtab).  The default
+  is the program name.
+
+subtype=TYPE
+
+  Sets the filesystem type (third field in /etc/mtab).  The default is
+  the program name.
+
+  If the kernel suppports it, /etc/mtab and /proc/mounts will show the
+  filesystem type as "fuse.TYPE"
+
+  If the kernel doesn't support subtypes, the source filed will be
+  "TYPE#NAME", or if fsname option is not specified, just "TYPE".
+
+use_ino
+
+  Honor the 'st_ino' field in getattr() and fill_dir().  This value is
+  used to fill in the 'st_ino' field in the stat()/lstat()/fstat()
+  functions and the 'd_ino' field in the readdir() function.  The
+  filesystem does not have to guarantee uniqueness, however some
+  applications rely on this value being unique for the whole
+  filesystem.
+
+readdir_ino
+
+  If 'use_ino' option is not given, still try to fill in the 'd_ino'
+  field in readdir().  If the name was previously looked up, and is
+  still in the cache, the inode number found there will be used.
+  Otherwise it will be set to '-1'.  If 'use_ino' option is given,
+  this option is ignored.
+
+nonempty
+
+  Allows mounts over a non-empty file or directory.  By default these
+  mounts are rejected (from version 2.3.1) to prevent accidental
+  covering up of data, which could for example prevent automatic
+  backup.
+
+umask=M
+
+  Override the permission bits in 'st_mode' set by the filesystem.
+  The resulting permission bits are the ones missing from the given
+  umask value.  The value is given in octal representation.
+
+uid=N
+
+  Override the 'st_uid' field set by the filesystem.
+
+gid=N
+
+  Override the 'st_gid' field set by the filesystem.
+
+blkdev
+
+  Mount a filesystem backed by a block device.  This is a privileged
+  option.  The device must be specified with the 'fsname=NAME' option.
+
+entry_timeout=T
+
+  The timeout in seconds for which name lookups will be cached. The
+  default is 1.0 second.  For all the timeout options, it is possible
+  to give fractions of a second as well (e.g. "-oentry_timeout=2.8")
+
+negative_timeout=T
+
+  The timeout in seconds for which a negative lookup will be cached.
+  This means, that if file did not exist (lookup retuned ENOENT), the
+  lookup will only be redone after the timeout, and the file/directory
+  will be assumed to not exist until then.  The default is 0.0 second,
+  meaning that caching negative lookups are disabled.
+
+attr_timeout=T
+
+  The timeout in seconds for which file/directory attributes are
+  cached.  The default is 1.0 second.
+
+ac_attr_timeout=T
+
+  The timeout in seconds for which file attributes are cached for the
+  purpose of checking if "auto_cache" should flush the file data on
+  open.   The default is the value of 'attr_timeout'
+
+intr
+
+  Allow requests to be interrupted.  Turning on this option may result
+  in unexpected behavior, if the filesystem does not support request
+  interruption.
+
+intr_signal=NUM
+
+  Specify which signal number to send to the filesystem when a request
+  is interrupted.  The default is 10 (USR1).
+
+modules=M1[:M2...]
+
+  Add modules to the filesystem stack.  Modules are pushed in the
+  order they are specified, with the original filesystem being on the
+  bottom of the stack.
+
+
+Modules distributed with fuse
+-----------------------------
+
+iconv
+`````
+Perform file name character set conversion.  Options are:
+
+from_code=CHARSET
+
+  Character set to convert from (see iconv -l for a list of possible
+  values).  Default is UTF-8.
+
+to_code=CHARSET
+
+  Character set to convert to.  Default is determined by the current
+  locale.
+
+
+subdir
+``````
+Prepend a given directory to each path. Options are:
+
+subdir=DIR
+
+  Directory to prepend to all paths.  This option is mandatory.
+
+rellinks
+
+  Transform absolute symlinks into relative
+
+norellinks
+
+  Do not transform absolute symlinks into relative.  This is the default.
+
+
+Reporting bugs
+==============
+
+Please send bug reports to the <fuse-devel@lists.sourceforge.net>
+mailing list.
+
+The list is open, you need not be subscribed to post.