diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2007-05-22 11:09:01 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2007-05-22 11:09:01 +0000 |
commit | a2776e73f2acd9299bd762ae469bce2c676ebe0b (patch) | |
tree | 532b0f391917bb699d088f4d6a06d98c6df4b1e4 | |
parent | 53bce657d27d8afab36dd7b6d611a1be9ace59bd (diff) | |
download | libfuse-a2776e73f2acd9299bd762ae469bce2c676ebe0b.tar.gz |
Fix Oops or error if a regular file is created with mknod(2)...
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | include/fuse.h | 2 | ||||
-rw-r--r-- | kernel/dir.c | 2 | ||||
-rw-r--r-- | kernel/fuse_kernel.h | 2 |
4 files changed, 9 insertions, 3 deletions
@@ -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(). 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) |