Fix Oops or error if a regular file is created with mknod(2)...
authorMiklos Szeredi <miklos@szeredi.hu>
Tue, 22 May 2007 11:09:01 +0000 (11:09 +0000)
committerMiklos Szeredi <miklos@szeredi.hu>
Tue, 22 May 2007 11:09:01 +0000 (11:09 +0000)
ChangeLog
include/fuse.h
kernel/dir.c
kernel/fuse_kernel.h

index d43e088a7ebadf6dcad762d6bf31128ea2ade93b..284b7979c9f4c72d4dd35d275363321828b2be1c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-05-21  Miklos Szeredi <miklos@szeredi.hu>
+
+       * Fix Oops or error if a regular file is created with mknod(2) on
+       a fuse filesystem.  Kernels 2.6.18 onward are affected.  Thanks to
+       J. Cameijo Cerdeira for the report
+
 2007-05-11  Csaba Henk <csaba.henk@creo.hu>
 
        * libfuse: fix return value of fuse_loop()/fuse_loop_mt().
index 614293341ab758009787f71d9ead1557bbb258ab..19b38b37b833236541e8874fe10e5d9bf0b313bb 100644 (file)
@@ -132,7 +132,7 @@ struct fuse_operations {
 
     /** Change the access and/or modification times of a file
      *
-     * Deprecated, use utimes() instead.
+     * Deprecated, use utimens() instead.
      */
     int (*utime) (const char *, struct utimbuf *);
 
index 121a35004303710c1931bafb2bb25660f21d92df..b493e4e29f11aca820332f19835245c90630efc9 100644 (file)
@@ -491,7 +491,7 @@ static int fuse_create(struct inode *dir, struct dentry *entry, int mode,
                       struct nameidata *nd)
 {
 #ifdef HAVE_LOOKUP_INSTANTIATE_FILP
-       if (nd && (nd->flags & LOOKUP_CREATE)) {
+       if (nd && (nd->flags & LOOKUP_OPEN)) {
                int err = fuse_create_open(dir, entry, mode, nd);
                if (err != -ENOSYS)
                        return err;
index f909df68a7d56b54b1a57288a9c7410cb1981658..7ebff8b22f9f09795e2811a079471e3c1039614b 100644 (file)
@@ -374,7 +374,7 @@ struct fuse_dirent {
        char name[0];
 };
 
-#define FUSE_NAME_OFFSET ((unsigned) ((struct fuse_dirent *) 0)->name)
+#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
 #define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
 #define FUSE_DIRENT_SIZE(d) \
        FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)