From a2776e73f2acd9299bd762ae469bce2c676ebe0b Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Tue, 22 May 2007 11:09:01 +0000 Subject: Fix Oops or error if a regular file is created with mknod(2)... --- ChangeLog | 6 ++++++ include/fuse.h | 2 +- kernel/dir.c | 2 +- kernel/fuse_kernel.h | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index d43e088..284b797 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-05-21 Miklos Szeredi + + * 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 * libfuse: fix return value of fuse_loop()/fuse_loop_mt(). diff --git a/include/fuse.h b/include/fuse.h index 6142933..19b38b3 100644 --- a/include/fuse.h +++ b/include/fuse.h @@ -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 *); diff --git a/kernel/dir.c b/kernel/dir.c index 121a350..b493e4e 100644 --- a/kernel/dir.c +++ b/kernel/dir.c @@ -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; diff --git a/kernel/fuse_kernel.h b/kernel/fuse_kernel.h index f909df6..7ebff8b 100644 --- a/kernel/fuse_kernel.h +++ b/kernel/fuse_kernel.h @@ -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) -- cgit v1.2.3