aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2007-05-22 11:09:01 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2007-05-22 11:09:01 +0000
commita2776e73f2acd9299bd762ae469bce2c676ebe0b (patch)
tree532b0f391917bb699d088f4d6a06d98c6df4b1e4
parent53bce657d27d8afab36dd7b6d611a1be9ace59bd (diff)
downloadlibfuse-a2776e73f2acd9299bd762ae469bce2c676ebe0b.tar.gz
Fix Oops or error if a regular file is created with mknod(2)...
-rw-r--r--ChangeLog6
-rw-r--r--include/fuse.h2
-rw-r--r--kernel/dir.c2
-rw-r--r--kernel/fuse_kernel.h2
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 <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)