add stuff to bugfix branch
authorMiklos Szeredi <miklos@szeredi.hu>
Sat, 5 Mar 2005 17:25:28 +0000 (17:25 +0000)
committerMiklos Szeredi <miklos@szeredi.hu>
Sat, 5 Mar 2005 17:25:28 +0000 (17:25 +0000)
14 files changed:
ChangeLog
NEWS
README
configure.in
fuse.pc.in
kernel/configure.ac
kernel/dev.c
kernel/dir.c
kernel/file.c
kernel/inode.c
lib/Makefile.am
lib/fuse.c
lib/helper.c
util/fusermount.c

index 54871d77de9725531a6d289c93204a6e8c99bde8..15835f55cc575a11963cc7a26311bc785d8ee269 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,36 @@
+2005-03-05  Miklos Szeredi <miklos@szeredi.hu>
+
+       * Released 2.2.1
+
+2005-03-04  Miklos Szeredi <miklos@szeredi.hu>
+
+       * kernel: fix nasty bug which could cause an Oops under certain
+       situations.  Found by Magnus Johansson
+
+2005-02-28  Miklos Szeredi <miklos@szeredi.hu>
+
+       * kernel: llseek() method for files and directories made explicit
+
+       * kernel: fixed inode leak in NFS export in case of nodeid
+       wrapping
+
+2005-02-15  Miklos Szeredi <miklos@szeredi.hu>
+
+       * libfuse: clean up some unitialized memory found with valgrind
+
+       * Add -lpthread to Libs in fuse.pc.  Valgrind seems to need an
+       explicitly linked libpthread for applications
+
+2005-02-10  Miklos Szeredi <miklos@szeredi.hu>
+
+       * fusermount: set umask, otherwise /etc/mtab will have
+       unpredictable permission.  Spotted by Jindrich Kolorenc
+
+       * fusermount: set owner and group of /etc/mtab to original values
+       on unmount
+
+       * libfuse: add 'use_ino' option to help.  Patch by Valient Gough
+       
 2005-02-02  Miklos Szeredi <miklos@szeredi.hu>
 
        * Released 2.2
diff --git a/NEWS b/NEWS
index d69c41040aa0c16b2b6637ba53c47eb63491f9fe..ff632a9c63312887c751aad5f9d133abe37a4542 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,7 @@
+What is new in 2.2.1
+
+ - Bug fixes
+
 What is new in 2.2
 
 Userspace changes:
diff --git a/README b/README
index 14eed403f9404425219406b42e1ea1e887aaf1b9..e14e37e2f886b5e490c685d050dc7e1f791e58c9 100644 (file)
--- a/README
+++ b/README
@@ -25,7 +25,10 @@ make
 make install
 modprobe fuse
 
-Also see the file 'INSTALL'
+You may also need to add '/usr/local/lib' to '/etc/ld.so.conf' and/or
+run ldconfig.
+
+For more details see the file 'INSTALL'
 
 How To Use
 ==========
index d8a9f050efd576e7023e6ffb75c7b4f895726bf8..93c2f13a08c3679c6f8172c868c0945eb3f85a5f 100644 (file)
@@ -1,4 +1,4 @@
-AC_INIT(fuse, 2.2)
+AC_INIT(fuse, 2.2.1)
 AM_INIT_AUTOMAKE
 AM_CONFIG_HEADER(include/config.h)
 
index 54f0c494a1bceea4a6c40a15ac4d85ca5e1646b5..669d33f7e2f11abff7c484c67b52acd0d2c40ce5 100644 (file)
@@ -6,5 +6,5 @@ includedir=@includedir@
 Name: fuse
 Description: Filesystem in Userspace
 Version: @VERSION@
-Libs: -L${libdir} -lfuse
+Libs: -L${libdir} -lfuse -lpthread
 Cflags: -I${includedir}/fuse -D_FILE_OFFSET_BITS=64
index 62c2b2ffef82cdb0206c78e4af801116a561348d..a27cecaedf79c58dfd69c72cf83351f117e1cf08 100644 (file)
@@ -1,4 +1,4 @@
-AC_INIT(fuse-kernel, 2.2)
+AC_INIT(fuse-kernel, 2.2.1)
 AC_CONFIG_HEADERS([config.h])
 
 AC_PROG_INSTALL
index f6e8b1f2c307ab37419157a18a656900f0ebecf6..f3de9de71746cb2e25f0f00f1245d8686e753f6e 100644 (file)
@@ -159,12 +159,11 @@ struct fuse_req *fuse_get_request_nonint(struct fuse_conn *fc)
 
 static void fuse_putback_request(struct fuse_conn *fc, struct fuse_req *req)
 {
-       if (!req->preallocated)
-               fuse_request_free(req);
-
        spin_lock(&fuse_lock);
        if (req->preallocated)
                list_add(&req->list, &fc->unused_list);
+       else
+               fuse_request_free(req);
 
        if (fc->outstanding_debt)
                fc->outstanding_debt--;
index 7903a6675c89072509002a44032911a54682dd20..be513093a013591537fdfe34b689940ddd5b4d15 100644 (file)
@@ -1016,6 +1016,7 @@ static struct inode_operations fuse_dir_inode_operations = {
 };
 
 static struct file_operations fuse_dir_operations = {
+       .llseek         = generic_file_llseek,
        .read           = generic_read_dir,
        .readdir        = fuse_readdir,
        .open           = fuse_dir_open,
index 3adcb3055869c6d41f99e11225fafd35b93ccc95..74921d63864ff2a59eed2ba2bc42f4219b556f09 100644 (file)
@@ -641,6 +641,7 @@ static int fuse_set_page_dirty(struct page *page)
 #endif
 
 static struct file_operations fuse_file_operations = {
+       .llseek         = generic_file_llseek,
        .read           = fuse_file_read,
        .write          = fuse_file_write,
        .mmap           = fuse_file_mmap,
index 67bc755432e7d2ba875306a60a62d9c091a6f796..d935d588f6133ddfc2d99c39f0dd601798b0e3d2 100644 (file)
@@ -530,8 +530,12 @@ static struct dentry *fuse_get_dentry(struct super_block *sb, void *vobjp)
                return ERR_PTR(-ESTALE);
 
        inode = ilookup5(sb, nodeid, fuse_inode_eq, &nodeid);
-       if (!inode || inode->i_generation != generation)
+       if (!inode)
+               return ERR_PTR(-ESTALE);
+       if (inode->i_generation != generation) {
+               iput(inode);
                return ERR_PTR(-ESTALE);
+       }
 
        entry = d_alloc_anon(inode);
        if (!entry) {
index 952dcd8ef678d0d60f843aefa9303994b693cfec..5dcb9e63d6020aa4a4d8e8f43d2d5f282740436c 100644 (file)
@@ -9,7 +9,7 @@ libfuse_la_SOURCES =    \
        mount.c         \
        fuse_i.h
 
-libfuse_la_LDFLAGS = -lpthread -version-number 2:2:0 \
+libfuse_la_LDFLAGS = -lpthread -version-number 2:2:1 \
        -Wl,--version-script,fuse_versionscript
 
 EXTRA_DIST = fuse_versionscript
index 0980388e9ae3e3db189fd48c0314d600e0e0d7df..a7ba0ee50073c9d7d68f463f803938d44702788e 100644 (file)
@@ -1076,6 +1076,7 @@ static void do_open(struct fuse *f, struct fuse_in_header *in,
     struct fuse_open_out outarg;
     struct fuse_file_info fi;
 
+    memset(&outarg, 0, sizeof(outarg));
     memset(&fi, 0, sizeof(fi));
     fi.flags = arg->flags;
     res = -ENOENT;
@@ -1552,9 +1553,11 @@ static void do_opendir(struct fuse *f, struct fuse_in_header *in,
 
     (void) arg;
 
+    memset(&outarg, 0, sizeof(outarg));
     res = -ENOMEM;
     dh = (struct fuse_dirhandle *) malloc(sizeof(struct fuse_dirhandle));
     if (dh != NULL) {
+        memset(dh, 0, sizeof(struct fuse_dirhandle));
         dh->fuse = f;
         dh->fp = tmpfile();
         dh->filled = 0;
index 879a694465b0a1f23359dcf6e406564af8e0e11a..42fe44caee8a28fd2c149c5e255ba7377a377eaa 100644 (file)
@@ -26,12 +26,12 @@ static void usage(const char *progname)
 
     fprintf(stderr,
             "FUSE options:\n"
-            "    -d                  enable debug output (implies -f)\n"
-            "    -f                  foreground operation\n"
-            "    -s                  disable multithreaded operation\n"
-            "    -r                  mount read only (equivalent to '-o ro')\n"
-            "    -o opt,[opt...]     mount options\n"
-            "    -h                  print help\n"
+            "    -d                     enable debug output (implies -f)\n"
+            "    -f                     foreground operation\n"
+            "    -s                     disable multithreaded operation\n"
+            "    -r                     mount read only (equivalent to '-o ro')\n"
+            "    -o opt,[opt...]        mount options\n"
+            "    -h                     print help\n"
             "\n"
             "Mount options:\n"
             "    default_permissions    enable permission checking\n"
@@ -43,7 +43,8 @@ static void usage(const char *progname)
             "    max_read=N             set maximum size of read requests\n"
             "    hard_remove            immediate removal (don't hide files)\n"
             "    debug                  enable debug output\n"
-            "    fsname=NAME            set filesystem name in mtab\n");
+            "    fsname=NAME            set filesystem name in mtab\n"
+            "    use_ino                let filesystem set inode numbers\n");
 }
 
 static void invalid_option(const char *argv[], int argctr)
index 4f9ed2fdc12d1807d4c3e6da1e87c743afae1c47..1b79446eb43741869186bad4bf004b5adfdb3e3a 100644 (file)
@@ -240,6 +240,7 @@ static int unmount_rename(const char *mnt, int quiet, int lazy,
                           const char *mtab, const char *mtab_new)
 {
     int res;
+    struct stat sbuf;
 
     if (getuid() != 0) {
         res = drop_privs();
@@ -253,6 +254,9 @@ static int unmount_rename(const char *mnt, int quiet, int lazy,
     if (getuid() != 0)
         restore_privs();
 
+    if (stat(mtab, &sbuf) == 0)
+        chown(mtab_new, sbuf.st_uid, sbuf.st_gid);
+
     res = rename(mtab_new, mtab);
     if (res == -1) {
         fprintf(stderr, "%s: failed to rename %s to %s: %s\n", progname,
@@ -1046,6 +1050,7 @@ int main(int argc, char *argv[])
     if (getuid() != 0)
         restore_privs();
 
+    umask(033);
     if (unmount) {
         if (geteuid() == 0) {
             int mtablock = lock_mtab();