Upgrade fuse-2.7.1 to fuse-2.7.3 to fix breakage (#3246)

Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>

SVN-Revision: 10698
This commit is contained in:
Florian Fainelli 2008-04-01 20:02:27 +00:00
parent ec02c6dd90
commit 3b72dadac9
6 changed files with 354 additions and 600 deletions

View File

@ -10,12 +10,12 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=fuse PKG_NAME:=fuse
PKG_VERSION:=2.7.1 PKG_VERSION:=2.7.3
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/$(PKG_NAME) PKG_SOURCE_URL:=@SF/$(PKG_NAME)
PKG_MD5SUM:=f95b4a238a3df5a92e9013ecb55c2c17 PKG_MD5SUM:=98563fc7b265b7479a3178181cbcf59a
include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/package.mk

View File

@ -1,7 +1,6 @@
Index: fuse-2.6.5/kernel/configure diff -Nru fuse-2.7.3.orig/kernel/configure fuse-2.7.3/kernel/configure
=================================================================== --- fuse-2.7.3.orig/kernel/configure 2008-02-19 15:00:19.000000000 -0500
--- fuse-2.6.5.orig/kernel/configure 2007-06-23 13:03:50.000000000 +0200 +++ fuse-2.7.3/kernel/configure 2008-03-17 14:10:14.000000000 -0400
+++ fuse-2.6.5/kernel/configure 2007-06-23 13:03:50.000000000 +0200
@@ -1851,7 +1851,9 @@ @@ -1851,7 +1851,9 @@
{ echo "$as_me:$LINENO: checking kernel source version" >&5 { echo "$as_me:$LINENO: checking kernel source version" >&5

View File

@ -1,7 +1,6 @@
Index: fuse-2.6.5/kernel/Makefile.in diff -Nru fuse-2.7.3.orig/kernel/Makefile.in fuse-2.7.3/kernel/Makefile.in
=================================================================== --- fuse-2.7.3.orig/kernel/Makefile.in 2006-12-09 13:51:13.000000000 -0500
--- fuse-2.6.5.orig/kernel/Makefile.in 2007-06-23 13:03:50.000000000 +0200 +++ fuse-2.7.3/kernel/Makefile.in 2008-03-17 14:12:32.000000000 -0400
+++ fuse-2.6.5/kernel/Makefile.in 2007-06-23 13:03:50.000000000 +0200
@@ -25,11 +25,9 @@ @@ -25,11 +25,9 @@
install-y: all install-y: all
$(mkdir_p) $(DESTDIR)$(fusemoduledir) $(mkdir_p) $(DESTDIR)$(fusemoduledir)

View File

@ -1,8 +1,6 @@
Index: fuse-2.6.5/util/Makefile.in --- fuse-2.7.3.orig/util/Makefile.in 2008-02-19 15:00:55.000000000 -0500
=================================================================== +++ fuse-2.7.3/util/Makefile.in 2008-03-17 14:14:10.000000000 -0400
--- fuse-2.6.5.orig/util/Makefile.in 2007-06-23 13:03:50.000000000 +0200 @@ -528,7 +528,7 @@
+++ fuse-2.6.5/util/Makefile.in 2007-06-23 13:03:50.000000000 +0200
@@ -489,7 +489,7 @@
install-exec-hook: install-exec-hook:
-chown root $(DESTDIR)$(bindir)/fusermount -chown root $(DESTDIR)$(bindir)/fusermount
-chmod u+s $(DESTDIR)$(bindir)/fusermount -chmod u+s $(DESTDIR)$(bindir)/fusermount

View File

@ -1,25 +1,22 @@
Index: fuse-2.7.1/include/fuse_common_compat.h diff -Nru fuse-2.7.3.orig/include/fuse_common_compat.h fuse-2.7.3/include/fuse_common_compat.h
=================================================================== --- fuse-2.7.3.orig/include/fuse_common_compat.h 2008-02-19 14:51:23.000000000 -0500
--- fuse-2.7.1.orig/include/fuse_common_compat.h 2007-10-20 17:13:51.409738304 +0200 +++ fuse-2.7.3/include/fuse_common_compat.h 2008-03-17 14:55:01.000000000 -0400
+++ fuse-2.7.1/include/fuse_common_compat.h 2007-10-20 17:14:26.323727941 +0200
@@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
unsigned int keep_cache : 1; unsigned int keep_cache : 1;
}; };
+#ifndef DISABLE_COMPAT +#ifndef DISABLE_COMPAT
int fuse_mount_compat25(const char *mountpoint, struct fuse_args *args); int fuse_mount_compat25(const char *mountpoint, struct fuse_args *args);
int fuse_mount_compat22(const char *mountpoint, const char *opts); int fuse_mount_compat22(const char *mountpoint, const char *opts);
@@ -24,4 +25,4 @@ @@ -24,3 +25,4 @@
int fuse_mount_compat1(const char *mountpoint, const char *args[]); int fuse_mount_compat1(const char *mountpoint, const char *args[]);
void fuse_unmount_compat22(const char *mountpoint); void fuse_unmount_compat22(const char *mountpoint);
-
+#endif +#endif
Index: fuse-2.7.1/lib/fuse.c diff -Nru fuse-2.7.3.orig/lib/fuse.c fuse-2.7.3/lib/fuse.c
=================================================================== --- fuse-2.7.3.orig/lib/fuse.c 2008-02-19 14:51:25.000000000 -0500
--- fuse-2.7.1.orig/lib/fuse.c 2007-10-20 17:13:51.417738760 +0200 +++ fuse-2.7.3/lib/fuse.c 2008-03-17 15:04:54.000000000 -0400
+++ fuse-2.7.1/lib/fuse.c 2007-10-20 17:26:30.657005340 +0200
@@ -14,8 +14,6 @@ @@ -14,8 +14,6 @@
#include "fuse_lowlevel.h" #include "fuse_lowlevel.h"
#include "fuse_opt.h" #include "fuse_opt.h"
@ -29,284 +26,288 @@ Index: fuse-2.7.1/lib/fuse.c
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@@ -621,127 +619,6 @@ @@ -626,129 +624,6 @@
fuse_do_prepare_interrupt(req, d); fuse_do_prepare_interrupt(req, d);
} }
-#ifndef __FreeBSD__ -#ifndef __FreeBSD__
- -
-static int fuse_compat_open(struct fuse_fs *fs, const char *path, -static int fuse_compat_open(struct fuse_fs *fs, const char *path,
- struct fuse_file_info *fi) - struct fuse_file_info *fi)
-{ -{
- int err; - int err;
- if (!fs->compat || fs->compat >= 25) - if (!fs->compat || fs->compat >= 25)
- err = fs->op.open(path, fi); - err = fs->op.open(path, fi);
- else if (fs->compat == 22) { - else if (fs->compat == 22) {
- struct fuse_file_info_compat tmp; - struct fuse_file_info_compat tmp;
- memcpy(&tmp, fi, sizeof(tmp)); - memcpy(&tmp, fi, sizeof(tmp));
- err = ((struct fuse_operations_compat22 *) &fs->op)->open(path, &tmp); - err = ((struct fuse_operations_compat22 *) &fs->op)->open(path,
- memcpy(fi, &tmp, sizeof(tmp)); - &tmp);
- fi->fh = tmp.fh; - memcpy(fi, &tmp, sizeof(tmp));
- } else - fi->fh = tmp.fh;
- err = ((struct fuse_operations_compat2 *) &fs->op) - } else
- ->open(path, fi->flags); - err = ((struct fuse_operations_compat2 *) &fs->op)
- return err; - ->open(path, fi->flags);
- return err;
-} -}
- -
-static int fuse_compat_release(struct fuse_fs *fs, const char *path, -static int fuse_compat_release(struct fuse_fs *fs, const char *path,
- struct fuse_file_info *fi) - struct fuse_file_info *fi)
-{ -{
- if (!fs->compat || fs->compat >= 22) - if (!fs->compat || fs->compat >= 22)
- return fs->op.release(path, fi); - return fs->op.release(path, fi);
- else - else
- return ((struct fuse_operations_compat2 *) &fs->op) - return ((struct fuse_operations_compat2 *) &fs->op)
- ->release(path, fi->flags); - ->release(path, fi->flags);
-} -}
- -
-static int fuse_compat_opendir(struct fuse_fs *fs, const char *path, -static int fuse_compat_opendir(struct fuse_fs *fs, const char *path,
- struct fuse_file_info *fi) - struct fuse_file_info *fi)
-{ -{
- if (!fs->compat || fs->compat >= 25) - if (!fs->compat || fs->compat >= 25)
- return fs->op.opendir(path, fi); - return fs->op.opendir(path, fi);
- else { - else {
- int err; - int err;
- struct fuse_file_info_compat tmp; - struct fuse_file_info_compat tmp;
- memcpy(&tmp, fi, sizeof(tmp)); - memcpy(&tmp, fi, sizeof(tmp));
- err = ((struct fuse_operations_compat22 *) &fs->op) - err = ((struct fuse_operations_compat22 *) &fs->op)
- ->opendir(path, &tmp); - ->opendir(path, &tmp);
- memcpy(fi, &tmp, sizeof(tmp)); - memcpy(fi, &tmp, sizeof(tmp));
- fi->fh = tmp.fh; - fi->fh = tmp.fh;
- return err; - return err;
- } - }
-} -}
- -
-static void convert_statfs_compat(struct fuse_statfs_compat1 *compatbuf, -static void convert_statfs_compat(struct fuse_statfs_compat1 *compatbuf,
- struct statvfs *stbuf) - struct statvfs *stbuf)
-{ -{
- stbuf->f_bsize = compatbuf->block_size; - stbuf->f_bsize = compatbuf->block_size;
- stbuf->f_blocks = compatbuf->blocks; - stbuf->f_blocks = compatbuf->blocks;
- stbuf->f_bfree = compatbuf->blocks_free; - stbuf->f_bfree = compatbuf->blocks_free;
- stbuf->f_bavail = compatbuf->blocks_free; - stbuf->f_bavail = compatbuf->blocks_free;
- stbuf->f_files = compatbuf->files; - stbuf->f_files = compatbuf->files;
- stbuf->f_ffree = compatbuf->files_free; - stbuf->f_ffree = compatbuf->files_free;
- stbuf->f_namemax = compatbuf->namelen; - stbuf->f_namemax = compatbuf->namelen;
-} -}
- -
-static void convert_statfs_old(struct statfs *oldbuf, struct statvfs *stbuf) -static void convert_statfs_old(struct statfs *oldbuf, struct statvfs *stbuf)
-{ -{
- stbuf->f_bsize = oldbuf->f_bsize; - stbuf->f_bsize = oldbuf->f_bsize;
- stbuf->f_blocks = oldbuf->f_blocks; - stbuf->f_blocks = oldbuf->f_blocks;
- stbuf->f_bfree = oldbuf->f_bfree; - stbuf->f_bfree = oldbuf->f_bfree;
- stbuf->f_bavail = oldbuf->f_bavail; - stbuf->f_bavail = oldbuf->f_bavail;
- stbuf->f_files = oldbuf->f_files; - stbuf->f_files = oldbuf->f_files;
- stbuf->f_ffree = oldbuf->f_ffree; - stbuf->f_ffree = oldbuf->f_ffree;
- stbuf->f_namemax = oldbuf->f_namelen; - stbuf->f_namemax = oldbuf->f_namelen;
-} -}
- -
-static int fuse_compat_statfs(struct fuse_fs *fs, const char *path, -static int fuse_compat_statfs(struct fuse_fs *fs, const char *path,
- struct statvfs *buf) - struct statvfs *buf)
-{ -{
- int err; - int err;
- -
- if (!fs->compat || fs->compat >= 25) { - if (!fs->compat || fs->compat >= 25) {
- err = fs->op.statfs(fs->compat == 25 ? "/" : path, buf); - err = fs->op.statfs(fs->compat == 25 ? "/" : path, buf);
- } else if (fs->compat > 11) { - } else if (fs->compat > 11) {
- struct statfs oldbuf; - struct statfs oldbuf;
- err = ((struct fuse_operations_compat22 *) &fs->op) - err = ((struct fuse_operations_compat22 *) &fs->op)
- ->statfs("/", &oldbuf); - ->statfs("/", &oldbuf);
- if (!err) - if (!err)
- convert_statfs_old(&oldbuf, buf); - convert_statfs_old(&oldbuf, buf);
- } else { - } else {
- struct fuse_statfs_compat1 compatbuf; - struct fuse_statfs_compat1 compatbuf;
- memset(&compatbuf, 0, sizeof(struct fuse_statfs_compat1)); - memset(&compatbuf, 0, sizeof(struct fuse_statfs_compat1));
- err = ((struct fuse_operations_compat1 *) &fs->op)->statfs(&compatbuf); - err = ((struct fuse_operations_compat1 *) &fs->op)
- if (!err) - ->statfs(&compatbuf);
- convert_statfs_compat(&compatbuf, buf); - if (!err)
- } - convert_statfs_compat(&compatbuf, buf);
- return err; - }
- return err;
-} -}
- -
-#else /* __FreeBSD__ */ -#else /* __FreeBSD__ */
- -
-static inline int fuse_compat_open(struct fuse_fs *fs, char *path, -static inline int fuse_compat_open(struct fuse_fs *fs, char *path,
- struct fuse_file_info *fi) - struct fuse_file_info *fi)
-{ -{
- return fs->op.open(path, fi); - return fs->op.open(path, fi);
-} -}
- -
-static inline int fuse_compat_release(struct fuse_fs *fs, const char *path, -static inline int fuse_compat_release(struct fuse_fs *fs, const char *path,
- struct fuse_file_info *fi) - struct fuse_file_info *fi)
-{ -{
- return fs->op.release(path, fi); - return fs->op.release(path, fi);
-} -}
- -
-static inline int fuse_compat_opendir(struct fuse_fs *fs, const char *path, -static inline int fuse_compat_opendir(struct fuse_fs *fs, const char *path,
- struct fuse_file_info *fi) - struct fuse_file_info *fi)
-{ -{
- return fs->op.opendir(path, fi); - return fs->op.opendir(path, fi);
-} -}
- -
-static inline int fuse_compat_statfs(struct fuse_fs *fs, const char *path, -static inline int fuse_compat_statfs(struct fuse_fs *fs, const char *path,
- struct statvfs *buf) - struct statvfs *buf)
-{ -{
- return fs->op.statfs(fs->compat == 25 ? "/" : path, buf); - return fs->op.statfs(fs->compat == 25 ? "/" : path, buf);
-} -}
- -
-#endif /* __FreeBSD__ */ -#endif /* __FreeBSD__ */
- -
int fuse_fs_getattr(struct fuse_fs *fs, const char *path, struct stat *buf) int fuse_fs_getattr(struct fuse_fs *fs, const char *path, struct stat *buf)
{ {
fuse_get_context()->private_data = fs->user_data; fuse_get_context()->private_data = fs->user_data;
@@ -814,7 +691,7 @@ @@ -821,7 +696,7 @@
{ {
fuse_get_context()->private_data = fs->user_data; fuse_get_context()->private_data = fs->user_data;
if (fs->op.release) if (fs->op.release)
- return fuse_compat_release(fs, path, fi); - return fuse_compat_release(fs, path, fi);
+ return fs->op.release(path, fi); + return fs->op.release(path, fi);
else else
return 0; return 0;
} }
@@ -824,7 +701,7 @@ @@ -831,7 +706,7 @@
{ {
fuse_get_context()->private_data = fs->user_data; fuse_get_context()->private_data = fs->user_data;
if (fs->op.opendir) if (fs->op.opendir)
- return fuse_compat_opendir(fs, path, fi); - return fuse_compat_opendir(fs, path, fi);
+ return fs->op.opendir(path, fi); + return fs->op.opendir(path, fi);
else else
return 0; return 0;
} }
@@ -834,7 +711,7 @@ @@ -841,7 +716,7 @@
{ {
fuse_get_context()->private_data = fs->user_data; fuse_get_context()->private_data = fs->user_data;
if (fs->op.open) if (fs->op.open)
- return fuse_compat_open(fs, path, fi); - return fuse_compat_open(fs, path, fi);
+ return fs->op.open(path, fi); + return fs->op.open(path, fi);
else else
return 0; return 0;
} }
@@ -893,7 +770,7 @@ @@ -900,7 +775,7 @@
{ {
fuse_get_context()->private_data = fs->user_data; fuse_get_context()->private_data = fs->user_data;
if (fs->op.statfs) if (fs->op.statfs)
- return fuse_compat_statfs(fs, path, buf); - return fuse_compat_statfs(fs, path, buf);
+ return fs->op.statfs(path, buf); + return fs->op.statfs(path, buf);
else { else {
buf->f_namemax = 255; buf->f_namemax = 255;
buf->f_bsize = 512; buf->f_bsize = 512;
@@ -3037,7 +2914,6 @@ @@ -3070,7 +2945,6 @@
if (!fs) if (!fs)
goto out_free; goto out_free;
- fs->compat = compat; - fs->compat = compat;
f->fs = fs; f->fs = fs;
/* Oh f**k, this is ugly! */ /* Oh f**k, this is ugly! */
@@ -3079,11 +2955,6 @@ @@ -3114,11 +2988,6 @@
f->conf.readdir_ino = 1; f->conf.readdir_ino = 1;
#endif #endif
- if (compat && compat <= 25) { - if (compat && compat <= 25) {
- if (fuse_sync_compat_args(args) == -1) - if (fuse_sync_compat_args(args) == -1)
- goto out_free_fs; - goto out_free_fs;
- } - }
- -
f->se = fuse_lowlevel_new_common(args, &llop, sizeof(llop), f); f->se = fuse_lowlevel_new_common(args, &llop, sizeof(llop), f);
if (f->se == NULL) { if (f->se == NULL) {
if (f->conf.help) if (f->conf.help)
@@ -3217,19 +3088,6 @@ @@ -3254,19 +3123,6 @@
fuse_delete_context_key(); fuse_delete_context_key();
} }
-static struct fuse *fuse_new_common_compat25(int fd, struct fuse_args *args, -static struct fuse *fuse_new_common_compat25(int fd, struct fuse_args *args,
- const struct fuse_operations *op, - const struct fuse_operations *op,
- size_t op_size, int compat) - size_t op_size, int compat)
-{ -{
- struct fuse *f = NULL; - struct fuse *f = NULL;
- struct fuse_chan *ch = fuse_kern_chan_new(fd); - struct fuse_chan *ch = fuse_kern_chan_new(fd);
- -
- if (ch) - if (ch)
- f = fuse_new_common(ch, args, op, op_size, NULL, compat); - f = fuse_new_common(ch, args, op, op_size, NULL, compat);
- -
- return f; - return f;
-} -}
- -
/* called with fuse_context_lock held or during initialization (before /* called with fuse_context_lock held or during initialization (before
main() has been called) */ main() has been called) */
void fuse_register_module(struct fuse_module *mod) void fuse_register_module(struct fuse_module *mod)
@@ -3242,69 +3100,3 @@ @@ -3278,72 +3134,3 @@
fuse_modules = mod; mod->next = fuse_modules;
fuse_modules = mod;
} }
-
-#ifndef __FreeBSD__ -#ifndef __FreeBSD__
- -
-static struct fuse *fuse_new_common_compat(int fd, const char *opts, -static struct fuse *fuse_new_common_compat(int fd, const char *opts,
- const struct fuse_operations *op, - const struct fuse_operations *op,
- size_t op_size, int compat) - size_t op_size, int compat)
-{ -{
- struct fuse *f; - struct fuse *f;
- struct fuse_args args = FUSE_ARGS_INIT(0, NULL); - struct fuse_args args = FUSE_ARGS_INIT(0, NULL);
- -
- if (fuse_opt_add_arg(&args, "") == -1) - if (fuse_opt_add_arg(&args, "") == -1)
- return NULL; - return NULL;
- if (opts && - if (opts &&
- (fuse_opt_add_arg(&args, "-o") == -1 || - (fuse_opt_add_arg(&args, "-o") == -1 ||
- fuse_opt_add_arg(&args, opts) == -1)) { - fuse_opt_add_arg(&args, opts) == -1)) {
- fuse_opt_free_args(&args); - fuse_opt_free_args(&args);
- return NULL; - return NULL;
- } - }
- f = fuse_new_common_compat25(fd, &args, op, op_size, compat); - f = fuse_new_common_compat25(fd, &args, op, op_size, compat);
- fuse_opt_free_args(&args); - fuse_opt_free_args(&args);
- -
- return f; - return f;
-} -}
- -
-struct fuse *fuse_new_compat22(int fd, const char *opts, -struct fuse *fuse_new_compat22(int fd, const char *opts,
- const struct fuse_operations_compat22 *op, - const struct fuse_operations_compat22 *op,
- size_t op_size) - size_t op_size)
-{ -{
- return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op, - return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op,
- op_size, 22); - op_size, 22);
-} -}
- -
-struct fuse *fuse_new_compat2(int fd, const char *opts, -struct fuse *fuse_new_compat2(int fd, const char *opts,
- const struct fuse_operations_compat2 *op) - const struct fuse_operations_compat2 *op)
-{ -{
- return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op, - return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op,
- sizeof(struct fuse_operations_compat2), 21); - sizeof(struct fuse_operations_compat2),
- 21);
-} -}
- -
-struct fuse *fuse_new_compat1(int fd, int flags, -struct fuse *fuse_new_compat1(int fd, int flags,
- const struct fuse_operations_compat1 *op) - const struct fuse_operations_compat1 *op)
-{ -{
- const char *opts = NULL; - const char *opts = NULL;
- if (flags & FUSE_DEBUG_COMPAT1) - if (flags & FUSE_DEBUG_COMPAT1)
- opts = "debug"; - opts = "debug";
- return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op, - return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op,
- sizeof(struct fuse_operations_compat1), 11); - sizeof(struct fuse_operations_compat1),
- 11);
-} -}
- -
-__asm__(".symver fuse_exited,__fuse_exited@"); -FUSE_SYMVER(".symver fuse_exited,__fuse_exited@");
-__asm__(".symver fuse_process_cmd,__fuse_process_cmd@"); -FUSE_SYMVER(".symver fuse_process_cmd,__fuse_process_cmd@");
-__asm__(".symver fuse_read_cmd,__fuse_read_cmd@"); -FUSE_SYMVER(".symver fuse_read_cmd,__fuse_read_cmd@");
-__asm__(".symver fuse_set_getcontext_func,__fuse_set_getcontext_func@"); -FUSE_SYMVER(".symver fuse_set_getcontext_func,__fuse_set_getcontext_func@");
-__asm__(".symver fuse_new_compat2,fuse_new@"); -FUSE_SYMVER(".symver fuse_new_compat2,fuse_new@");
-__asm__(".symver fuse_new_compat22,fuse_new@FUSE_2.2"); -FUSE_SYMVER(".symver fuse_new_compat22,fuse_new@FUSE_2.2");
- -
-#endif /* __FreeBSD__ */ -#endif /* __FreeBSD__ */
- -
-struct fuse *fuse_new_compat25(int fd, struct fuse_args *args, -struct fuse *fuse_new_compat25(int fd, struct fuse_args *args,
- const struct fuse_operations_compat25 *op, - const struct fuse_operations_compat25 *op,
- size_t op_size) - size_t op_size)
-{ -{
- return fuse_new_common_compat25(fd, args, (struct fuse_operations *) op, - return fuse_new_common_compat25(fd, args, (struct fuse_operations *) op,
- op_size, 25); - op_size, 25);
-} -}
- -
-__asm__(".symver fuse_new_compat25,fuse_new@FUSE_2.5"); -FUSE_SYMVER(".symver fuse_new_compat25,fuse_new@FUSE_2.5");
Index: fuse-2.7.1/lib/fuse_lowlevel.c diff -Nru fuse-2.7.3.orig/lib/fuse_lowlevel.c fuse-2.7.3/lib/fuse_lowlevel.c
=================================================================== --- fuse-2.7.3.orig/lib/fuse_lowlevel.c 2008-02-19 14:51:26.000000000 -0500
--- fuse-2.7.1.orig/lib/fuse_lowlevel.c 2007-10-20 17:13:51.425739218 +0200 +++ fuse-2.7.3/lib/fuse_lowlevel.c 2008-03-17 15:07:40.000000000 -0400
+++ fuse-2.7.1/lib/fuse_lowlevel.c 2007-10-20 17:22:46.396225455 +0200
@@ -11,8 +11,6 @@ @@ -11,8 +11,6 @@
#include "fuse_opt.h" #include "fuse_opt.h"
#include "fuse_i.h" #include "fuse_i.h"
@ -316,160 +317,160 @@ Index: fuse-2.7.1/lib/fuse_lowlevel.c
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -1310,129 +1308,3 @@ @@ -1319,130 +1317,3 @@
return fuse_lowlevel_new_common(args, op, op_size, userdata); {
return fuse_lowlevel_new_common(args, op, op_size, userdata);
} }
-
- -
-#ifndef __FreeBSD__ -#ifndef __FreeBSD__
- -
-static void fill_open_compat(struct fuse_open_out *arg, -static void fill_open_compat(struct fuse_open_out *arg,
- const struct fuse_file_info_compat *f) - const struct fuse_file_info_compat *f)
-{ -{
- arg->fh = f->fh; - arg->fh = f->fh;
- if (f->direct_io) - if (f->direct_io)
- arg->open_flags |= FOPEN_DIRECT_IO; - arg->open_flags |= FOPEN_DIRECT_IO;
- if (f->keep_cache) - if (f->keep_cache)
- arg->open_flags |= FOPEN_KEEP_CACHE; - arg->open_flags |= FOPEN_KEEP_CACHE;
-} -}
- -
-static void convert_statfs_compat(const struct statfs *compatbuf, -static void convert_statfs_compat(const struct statfs *compatbuf,
- struct statvfs *buf) - struct statvfs *buf)
-{ -{
- buf->f_bsize = compatbuf->f_bsize; - buf->f_bsize = compatbuf->f_bsize;
- buf->f_blocks = compatbuf->f_blocks; - buf->f_blocks = compatbuf->f_blocks;
- buf->f_bfree = compatbuf->f_bfree; - buf->f_bfree = compatbuf->f_bfree;
- buf->f_bavail = compatbuf->f_bavail; - buf->f_bavail = compatbuf->f_bavail;
- buf->f_files = compatbuf->f_files; - buf->f_files = compatbuf->f_files;
- buf->f_ffree = compatbuf->f_ffree; - buf->f_ffree = compatbuf->f_ffree;
- buf->f_namemax = compatbuf->f_namelen; - buf->f_namemax = compatbuf->f_namelen;
-} -}
- -
-int fuse_reply_open_compat(fuse_req_t req, -int fuse_reply_open_compat(fuse_req_t req,
- const struct fuse_file_info_compat *f) - const struct fuse_file_info_compat *f)
-{ -{
- struct fuse_open_out arg; - struct fuse_open_out arg;
- -
- memset(&arg, 0, sizeof(arg)); - memset(&arg, 0, sizeof(arg));
- fill_open_compat(&arg, f); - fill_open_compat(&arg, f);
- return send_reply_ok(req, &arg, sizeof(arg)); - return send_reply_ok(req, &arg, sizeof(arg));
-} -}
- -
-int fuse_reply_statfs_compat(fuse_req_t req, const struct statfs *stbuf) -int fuse_reply_statfs_compat(fuse_req_t req, const struct statfs *stbuf)
-{ -{
- struct statvfs newbuf; - struct statvfs newbuf;
- -
- memset(&newbuf, 0, sizeof(newbuf)); - memset(&newbuf, 0, sizeof(newbuf));
- convert_statfs_compat(stbuf, &newbuf); - convert_statfs_compat(stbuf, &newbuf);
- -
- return fuse_reply_statfs(req, &newbuf); - return fuse_reply_statfs(req, &newbuf);
-} -}
- -
-struct fuse_session *fuse_lowlevel_new_compat(const char *opts, -struct fuse_session *fuse_lowlevel_new_compat(const char *opts,
- const struct fuse_lowlevel_ops_compat *op, - const struct fuse_lowlevel_ops_compat *op,
- size_t op_size, void *userdata) - size_t op_size, void *userdata)
-{ -{
- struct fuse_session *se; - struct fuse_session *se;
- struct fuse_args args = FUSE_ARGS_INIT(0, NULL); - struct fuse_args args = FUSE_ARGS_INIT(0, NULL);
- -
- if (opts && - if (opts &&
- (fuse_opt_add_arg(&args, "") == -1 || - (fuse_opt_add_arg(&args, "") == -1 ||
- fuse_opt_add_arg(&args, "-o") == -1 || - fuse_opt_add_arg(&args, "-o") == -1 ||
- fuse_opt_add_arg(&args, opts) == -1)) { - fuse_opt_add_arg(&args, opts) == -1)) {
- fuse_opt_free_args(&args); - fuse_opt_free_args(&args);
- return NULL; - return NULL;
- } - }
- se = fuse_lowlevel_new(&args, (const struct fuse_lowlevel_ops *) op, - se = fuse_lowlevel_new(&args, (const struct fuse_lowlevel_ops *) op,
- op_size, userdata); - op_size, userdata);
- fuse_opt_free_args(&args); - fuse_opt_free_args(&args);
- -
- return se; - return se;
-} -}
- -
-struct fuse_ll_compat_conf { -struct fuse_ll_compat_conf {
- unsigned max_read; - unsigned max_read;
- int set_max_read; - int set_max_read;
-}; -};
- -
-static const struct fuse_opt fuse_ll_opts_compat[] = { -static const struct fuse_opt fuse_ll_opts_compat[] = {
- { "max_read=", offsetof(struct fuse_ll_compat_conf, set_max_read), 1 }, - { "max_read=", offsetof(struct fuse_ll_compat_conf, set_max_read), 1 },
- { "max_read=%u", offsetof(struct fuse_ll_compat_conf, max_read), 0 }, - { "max_read=%u", offsetof(struct fuse_ll_compat_conf, max_read), 0 },
- FUSE_OPT_KEY("max_read=", FUSE_OPT_KEY_KEEP), - FUSE_OPT_KEY("max_read=", FUSE_OPT_KEY_KEEP),
- FUSE_OPT_END - FUSE_OPT_END
-}; -};
- -
-int fuse_sync_compat_args(struct fuse_args *args) -int fuse_sync_compat_args(struct fuse_args *args)
-{ -{
- struct fuse_ll_compat_conf conf; - struct fuse_ll_compat_conf conf;
- -
- memset(&conf, 0, sizeof(conf)); - memset(&conf, 0, sizeof(conf));
- if (fuse_opt_parse(args, &conf, fuse_ll_opts_compat, NULL) == -1) - if (fuse_opt_parse(args, &conf, fuse_ll_opts_compat, NULL) == -1)
- return -1; - return -1;
- -
- if (fuse_opt_insert_arg(args, 1, "-osync_read")) - if (fuse_opt_insert_arg(args, 1, "-osync_read"))
- return -1; - return -1;
- -
- if (conf.set_max_read) { - if (conf.set_max_read) {
- char tmpbuf[64]; - char tmpbuf[64];
- -
- sprintf(tmpbuf, "-omax_readahead=%u", conf.max_read); - sprintf(tmpbuf, "-omax_readahead=%u", conf.max_read);
- if (fuse_opt_insert_arg(args, 1, tmpbuf) == -1) - if (fuse_opt_insert_arg(args, 1, tmpbuf) == -1)
- return -1; - return -1;
- } - }
- return 0; - return 0;
-} -}
- -
-__asm__(".symver fuse_reply_statfs_compat,fuse_reply_statfs@FUSE_2.4"); -FUSE_SYMVER(".symver fuse_reply_statfs_compat,fuse_reply_statfs@FUSE_2.4");
-__asm__(".symver fuse_reply_open_compat,fuse_reply_open@FUSE_2.4"); -FUSE_SYMVER(".symver fuse_reply_open_compat,fuse_reply_open@FUSE_2.4");
-__asm__(".symver fuse_lowlevel_new_compat,fuse_lowlevel_new@FUSE_2.4"); -FUSE_SYMVER(".symver fuse_lowlevel_new_compat,fuse_lowlevel_new@FUSE_2.4");
- -
-#else /* __FreeBSD__ */ -#else /* __FreeBSD__ */
- -
-int fuse_sync_compat_args(struct fuse_args *args) -int fuse_sync_compat_args(struct fuse_args *args)
-{ -{
- (void) args; - (void) args;
- return 0; - return 0;
-} -}
- -
-#endif /* __FreeBSD__ */ -#endif /* __FreeBSD__ */
- -
-struct fuse_session *fuse_lowlevel_new_compat25(struct fuse_args *args, -struct fuse_session *fuse_lowlevel_new_compat25(struct fuse_args *args,
- const struct fuse_lowlevel_ops_compat25 *op, - const struct fuse_lowlevel_ops_compat25 *op,
- size_t op_size, void *userdata) - size_t op_size, void *userdata)
-{ -{
- if (fuse_sync_compat_args(args) == -1) - if (fuse_sync_compat_args(args) == -1)
- return NULL; - return NULL;
- -
- return fuse_lowlevel_new_common(args, - return fuse_lowlevel_new_common(args,
- (const struct fuse_lowlevel_ops *) op, - (const struct fuse_lowlevel_ops *) op,
- op_size, userdata); - op_size, userdata);
-} -}
- -
-__asm__(".symver fuse_lowlevel_new_compat25,fuse_lowlevel_new@FUSE_2.5"); -FUSE_SYMVER(".symver fuse_lowlevel_new_compat25,fuse_lowlevel_new@FUSE_2.5");
Index: fuse-2.7.1/lib/helper.c diff -Nru fuse-2.7.3.orig/lib/helper.c fuse-2.7.3/lib/helper.c
=================================================================== --- fuse-2.7.3.orig/lib/helper.c 2008-02-19 14:51:27.000000000 -0500
--- fuse-2.7.1.orig/lib/helper.c 2007-10-20 17:13:51.433739673 +0200 +++ fuse-2.7.3/lib/helper.c 2008-03-17 15:10:18.000000000 -0400
+++ fuse-2.7.1/lib/helper.c 2007-10-20 17:21:32.508014797 +0200 @@ -11,7 +11,6 @@
@@ -10,7 +10,6 @@ #include "fuse_misc.h"
#include "fuse_i.h"
#include "fuse_opt.h" #include "fuse_opt.h"
#include "fuse_lowlevel.h" #include "fuse_lowlevel.h"
-#include "fuse_common_compat.h" -#include "fuse_common_compat.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -202,7 +201,7 @@ @@ -206,7 +205,7 @@
close(fd); close(fd);
} while (fd >= 0 && fd <= 2); } while (fd >= 0 && fd <= 2);
- fd = fuse_mount_compat25(mountpoint, args); - fd = fuse_mount_compat25(mountpoint, args);
+ fd = fuse_kern_mount(mountpoint, args); + fd = fuse_kern_mount(mountpoint, args);
if (fd == -1) if (fd == -1)
return NULL; return NULL;
@@ -349,97 +348,3 @@ @@ -353,100 +352,3 @@
{ {
return FUSE_VERSION; return FUSE_VERSION;
} }
- -
-#include "fuse_compat.h" -#include "fuse_compat.h"
@ -477,133 +478,136 @@ Index: fuse-2.7.1/lib/helper.c
-#ifndef __FreeBSD__ -#ifndef __FreeBSD__
- -
-struct fuse *fuse_setup_compat22(int argc, char *argv[], -struct fuse *fuse_setup_compat22(int argc, char *argv[],
- const struct fuse_operations_compat22 *op, - const struct fuse_operations_compat22 *op,
- size_t op_size, char **mountpoint, - size_t op_size, char **mountpoint,
- int *multithreaded, int *fd) - int *multithreaded, int *fd)
-{ -{
- return fuse_setup_common(argc, argv, (struct fuse_operations *) op, - return fuse_setup_common(argc, argv, (struct fuse_operations *) op,
- op_size, mountpoint, multithreaded, fd, NULL, 22); - op_size, mountpoint, multithreaded, fd, NULL,
- 22);
-} -}
- -
-struct fuse *fuse_setup_compat2(int argc, char *argv[], -struct fuse *fuse_setup_compat2(int argc, char *argv[],
- const struct fuse_operations_compat2 *op, - const struct fuse_operations_compat2 *op,
- char **mountpoint, int *multithreaded, - char **mountpoint, int *multithreaded,
- int *fd) - int *fd)
-{ -{
- return fuse_setup_common(argc, argv, (struct fuse_operations *) op, - return fuse_setup_common(argc, argv, (struct fuse_operations *) op,
- sizeof(struct fuse_operations_compat2), - sizeof(struct fuse_operations_compat2),
- mountpoint, multithreaded, fd, NULL, 21); - mountpoint, multithreaded, fd, NULL, 21);
-} -}
- -
-int fuse_main_real_compat22(int argc, char *argv[], -int fuse_main_real_compat22(int argc, char *argv[],
- const struct fuse_operations_compat22 *op, - const struct fuse_operations_compat22 *op,
- size_t op_size) - size_t op_size)
-{ -{
- return fuse_main_common(argc, argv, (struct fuse_operations *) op, op_size, - return fuse_main_common(argc, argv, (struct fuse_operations *) op,
- NULL, 22); - op_size, NULL, 22);
-} -}
- -
-void fuse_main_compat1(int argc, char *argv[], -void fuse_main_compat1(int argc, char *argv[],
- const struct fuse_operations_compat1 *op) - const struct fuse_operations_compat1 *op)
-{ -{
- fuse_main_common(argc, argv, (struct fuse_operations *) op, - fuse_main_common(argc, argv, (struct fuse_operations *) op,
- sizeof(struct fuse_operations_compat1), NULL, 11); - sizeof(struct fuse_operations_compat1), NULL, 11);
-} -}
- -
-int fuse_main_compat2(int argc, char *argv[], -int fuse_main_compat2(int argc, char *argv[],
- const struct fuse_operations_compat2 *op) - const struct fuse_operations_compat2 *op)
-{ -{
- return fuse_main_common(argc, argv, (struct fuse_operations *) op, - return fuse_main_common(argc, argv, (struct fuse_operations *) op,
- sizeof(struct fuse_operations_compat2), NULL, 21); - sizeof(struct fuse_operations_compat2), NULL,
- 21);
-} -}
- -
-int fuse_mount_compat1(const char *mountpoint, const char *args[]) -int fuse_mount_compat1(const char *mountpoint, const char *args[])
-{ -{
- /* just ignore mount args for now */ - /* just ignore mount args for now */
- (void) args; - (void) args;
- return fuse_mount_compat22(mountpoint, NULL); - return fuse_mount_compat22(mountpoint, NULL);
-} -}
- -
-__asm__(".symver fuse_setup_compat2,__fuse_setup@"); -FUSE_SYMVER(".symver fuse_setup_compat2,__fuse_setup@");
-__asm__(".symver fuse_setup_compat22,fuse_setup@FUSE_2.2"); -FUSE_SYMVER(".symver fuse_setup_compat22,fuse_setup@FUSE_2.2");
-__asm__(".symver fuse_teardown,__fuse_teardown@"); -FUSE_SYMVER(".symver fuse_teardown,__fuse_teardown@");
-__asm__(".symver fuse_main_compat2,fuse_main@"); -FUSE_SYMVER(".symver fuse_main_compat2,fuse_main@");
-__asm__(".symver fuse_main_real_compat22,fuse_main_real@FUSE_2.2"); -FUSE_SYMVER(".symver fuse_main_real_compat22,fuse_main_real@FUSE_2.2");
- -
-#endif /* __FreeBSD__ */ -#endif /* __FreeBSD__ */
- -
- -
-struct fuse *fuse_setup_compat25(int argc, char *argv[], -struct fuse *fuse_setup_compat25(int argc, char *argv[],
- const struct fuse_operations_compat25 *op, - const struct fuse_operations_compat25 *op,
- size_t op_size, char **mountpoint, - size_t op_size, char **mountpoint,
- int *multithreaded, int *fd) - int *multithreaded, int *fd)
-{ -{
- return fuse_setup_common(argc, argv, (struct fuse_operations *) op, - return fuse_setup_common(argc, argv, (struct fuse_operations *) op,
- op_size, mountpoint, multithreaded, fd, NULL, 25); - op_size, mountpoint, multithreaded, fd, NULL,
- 25);
-} -}
- -
-int fuse_main_real_compat25(int argc, char *argv[], -int fuse_main_real_compat25(int argc, char *argv[],
- const struct fuse_operations_compat25 *op, - const struct fuse_operations_compat25 *op,
- size_t op_size) - size_t op_size)
-{ -{
- return fuse_main_common(argc, argv, (struct fuse_operations *) op, op_size, - return fuse_main_common(argc, argv, (struct fuse_operations *) op,
- NULL, 25); - op_size, NULL, 25);
-} -}
- -
-void fuse_teardown_compat22(struct fuse *fuse, int fd, char *mountpoint) -void fuse_teardown_compat22(struct fuse *fuse, int fd, char *mountpoint)
-{ -{
- (void) fd; - (void) fd;
- fuse_teardown_common(fuse, mountpoint); - fuse_teardown_common(fuse, mountpoint);
-} -}
- -
-int fuse_mount_compat25(const char *mountpoint, struct fuse_args *args) -int fuse_mount_compat25(const char *mountpoint, struct fuse_args *args)
-{ -{
- return fuse_kern_mount(mountpoint, args); - return fuse_kern_mount(mountpoint, args);
-} -}
- -
-__asm__(".symver fuse_setup_compat25,fuse_setup@FUSE_2.5"); -FUSE_SYMVER(".symver fuse_setup_compat25,fuse_setup@FUSE_2.5");
-__asm__(".symver fuse_teardown_compat22,fuse_teardown@FUSE_2.2"); -FUSE_SYMVER(".symver fuse_teardown_compat22,fuse_teardown@FUSE_2.2");
-__asm__(".symver fuse_main_real_compat25,fuse_main_real@FUSE_2.5"); -FUSE_SYMVER(".symver fuse_main_real_compat25,fuse_main_real@FUSE_2.5");
-__asm__(".symver fuse_mount_compat25,fuse_mount@FUSE_2.5"); -FUSE_SYMVER(".symver fuse_mount_compat25,fuse_mount@FUSE_2.5");
Index: fuse-2.7.1/lib/mount.c diff -Nru fuse-2.7.3.orig/lib/mount.c fuse-2.7.3/lib/mount.c
=================================================================== --- fuse-2.7.3.orig/lib/mount.c 2008-02-19 14:51:27.000000000 -0500
--- fuse-2.7.1.orig/lib/mount.c 2007-10-20 17:13:51.441740129 +0200 +++ fuse-2.7.3/lib/mount.c 2008-03-17 15:11:02.000000000 -0400
+++ fuse-2.7.1/lib/mount.c 2007-10-20 17:22:07.209992349 +0200 @@ -10,7 +10,6 @@
@@ -9,7 +9,6 @@
#include "config.h"
#include "fuse_i.h" #include "fuse_i.h"
#include "fuse_misc.h"
#include "fuse_opt.h" #include "fuse_opt.h"
-#include "fuse_common_compat.h" -#include "fuse_common_compat.h"
#include "mount_util.h" #include "mount_util.h"
#include <stdio.h> #include <stdio.h>
@@ -308,11 +307,6 @@ @@ -312,11 +311,6 @@
waitpid(pid, NULL, 0); waitpid(pid, NULL, 0);
} }
-void fuse_unmount_compat22(const char *mountpoint) -void fuse_unmount_compat22(const char *mountpoint)
-{ -{
- fuse_kern_unmount(mountpoint, -1); - fuse_kern_unmount(mountpoint, -1);
-} -}
- -
static int fuse_mount_fusermount(const char *mountpoint, const char *opts, static int fuse_mount_fusermount(const char *mountpoint, const char *opts,
int quiet) int quiet)
{ {
@@ -376,11 +370,6 @@ @@ -380,11 +374,6 @@
return rv; return rv;
} }
-int fuse_mount_compat22(const char *mountpoint, const char *opts) -int fuse_mount_compat22(const char *mountpoint, const char *opts)
-{ -{
- return fuse_mount_fusermount(mountpoint, opts, 0); - return fuse_mount_fusermount(mountpoint, opts, 0);
-} -}
- -
static int fuse_mount_sys(const char *mnt, struct mount_opts *mo, static int fuse_mount_sys(const char *mnt, struct mount_opts *mo,
const char *mnt_opts) const char *mnt_opts)
{ {
@@ -579,5 +568,3 @@ @@ -587,6 +576,3 @@
return res; free(mo.mtab_opts);
return res;
} }
-
-__asm__(".symver fuse_mount_compat22,fuse_mount@FUSE_2.2"); -FUSE_SYMVER(".symver fuse_mount_compat22,fuse_mount@FUSE_2.2");
-__asm__(".symver fuse_unmount_compat22,fuse_unmount@FUSE_2.2"); -FUSE_SYMVER(".symver fuse_unmount_compat22,fuse_unmount@FUSE_2.2");

View File

@ -1,246 +0,0 @@
# HG changeset patch
# User mszeredi
# Date 1197485983 0
# Node ID 5b8914cfe0fb7ccfb6e7f61512374d8541f2a193
# Parent 81a85541800582144b7381e0b022c10245facc61
Fix kernel module compile for 2.6.24
--- a/kernel/dir.c Wed Dec 12 14:33:17 2007 +0000
+++ b/kernel/dir.c Wed Dec 12 18:59:43 2007 +0000
@@ -191,7 +191,7 @@ static int invalid_nodeid(u64 nodeid)
return !nodeid || nodeid == FUSE_ROOT_ID;
}
-static struct dentry_operations fuse_dentry_operations = {
+struct dentry_operations fuse_dentry_operations = {
.d_revalidate = fuse_dentry_revalidate,
};
@@ -378,6 +378,7 @@ static int fuse_create_open(struct inode
}
fuse_put_request(fc, forget_req);
d_instantiate(entry, inode);
+ fuse_invalidate_attr(dir);
fuse_change_timeout(entry, &outentry);
file = lookup_instantiate_filp(nd, entry, generic_file_open);
if (IS_ERR(file)) {
@@ -619,6 +620,9 @@ static int fuse_rename(struct inode *old
err = req->out.h.error;
fuse_put_request(fc, req);
if (!err) {
+ /* ctime changes */
+ fuse_invalidate_attr(oldent->d_inode);
+
fuse_invalidate_attr(olddir);
if (olddir != newdir)
fuse_invalidate_attr(newdir);
--- a/kernel/fuse_i.h Wed Dec 12 14:33:17 2007 +0000
+++ b/kernel/fuse_i.h Wed Dec 12 18:59:43 2007 +0000
@@ -47,6 +47,9 @@
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
# define KERNEL_2_6_23_PLUS
+#endif
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+# define KERNEL_2_6_24_PLUS
#endif
#if defined(__arm__) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
@@ -647,3 +650,5 @@ int fuse_valid_type(int m);
* Is task allowed to perform filesystem operation?
*/
int fuse_allow_task(struct fuse_conn *fc, struct task_struct *task);
+
+extern struct dentry_operations fuse_dentry_operations;
--- a/kernel/inode.c Wed Dec 12 14:33:17 2007 +0000
+++ b/kernel/inode.c Wed Dec 12 18:59:43 2007 +0000
@@ -520,21 +520,26 @@ static struct inode *get_root_inode(stru
#ifdef HAVE_EXPORTFS_H
#include <linux/exportfs.h>
#endif
-static struct dentry *fuse_get_dentry(struct super_block *sb, void *vobjp)
+
+struct fuse_inode_handle
{
- __u32 *objp = vobjp;
- unsigned long nodeid = objp[0];
- __u32 generation = objp[1];
+ u64 nodeid;
+ u32 generation;
+};
+
+static struct dentry *fuse_get_dentry(struct super_block *sb,
+ struct fuse_inode_handle *handle)
+{
struct inode *inode;
struct dentry *entry;
- if (nodeid == 0)
+ if (handle->nodeid == 0)
return ERR_PTR(-ESTALE);
- inode = ilookup5(sb, nodeid, fuse_inode_eq, &nodeid);
+ inode = ilookup5(sb, handle->nodeid, fuse_inode_eq, &handle->nodeid);
if (!inode)
return ERR_PTR(-ESTALE);
- if (inode->i_generation != generation) {
+ if (inode->i_generation != handle->generation) {
iput(inode);
return ERR_PTR(-ESTALE);
}
@@ -544,42 +549,130 @@ static struct dentry *fuse_get_dentry(st
iput(inode);
return ERR_PTR(-ENOMEM);
}
+ entry->d_op = &fuse_dentry_operations;
return entry;
}
-static int fuse_encode_fh(struct dentry *dentry, __u32 *fh, int *max_len,
- int connectable)
+static int fuse_encode_fh(struct dentry *dentry, u32 *fh, int *max_len,
+ int connectable)
{
struct inode *inode = dentry->d_inode;
int len = *max_len;
int type = 1;
+ u64 nodeid;
+ u32 generation;
- if (len < 2 || (connectable && len < 4))
- return 255;
+ if (len < 3 || (connectable && len < 6))
+ return 255;
- len = 2;
- fh[0] = get_fuse_inode(inode)->nodeid;
- fh[1] = inode->i_generation;
+ nodeid = get_fuse_inode(inode)->nodeid;
+ generation = inode->i_generation;
+
+ len = 3;
+ fh[0] = (u32)(nodeid >> 32);
+ fh[1] = (u32)(nodeid & 0xffffffff);
+ fh[2] = generation;
+
if (connectable && !S_ISDIR(inode->i_mode)) {
struct inode *parent;
spin_lock(&dentry->d_lock);
parent = dentry->d_parent->d_inode;
- fh[2] = get_fuse_inode(parent)->nodeid;
- fh[3] = parent->i_generation;
+ nodeid = get_fuse_inode(parent)->nodeid;
+ generation = parent->i_generation;
+
+ fh[3] = (u32)(nodeid >> 32);
+ fh[4] = (u32)(nodeid & 0xffffffff);
+ fh[5] = generation;
spin_unlock(&dentry->d_lock);
- len = 4;
+
+ len = 6;
type = 2;
}
+
*max_len = len;
return type;
}
+#ifdef KERNEL_2_6_24_PLUS
+static struct dentry *fuse_fh_to_dentry(struct super_block *sb,
+ struct fid *fid, int fh_len, int fh_type)
+{
+ struct fuse_inode_handle handle;
+
+ if (fh_len < 3 || fh_type > 2)
+ return NULL;
+
+ handle.nodeid = (u64) fid->raw[0] << 32;
+ handle.nodeid |= (u64) fid->raw[1];
+ handle.generation = fid->raw[2];
+ return fuse_get_dentry(sb, &handle);
+}
+
+static struct dentry *fuse_fh_to_parent(struct super_block *sb,
+ struct fid *fid, int fh_len, int fh_type)
+{
+ struct fuse_inode_handle parent;
+
+ if (fh_type != 2 || fh_len < 6)
+ return NULL;
+
+ parent.nodeid = (u64) fid->raw[3] << 32;
+ parent.nodeid |= (u64) fid->raw[4];
+ parent.generation = fid->raw[5];
+ return fuse_get_dentry(sb, &parent);
+}
+
+
+static const struct export_operations fuse_export_operations = {
+ .fh_to_dentry = fuse_fh_to_dentry,
+ .fh_to_parent = fuse_fh_to_parent,
+ .encode_fh = fuse_encode_fh,
+};
+#else
+static struct dentry *fuse_get_dentry_old(struct super_block *sb, void *objp)
+{
+ return fuse_get_dentry(sb, objp);
+}
+
+static struct dentry *fuse_decode_fh(struct super_block *sb, u32 *fh,
+ int fh_len, int fileid_type,
+ int (*acceptable)(void *context, struct dentry *de),
+ void *context)
+{
+ struct fuse_inode_handle handle;
+ struct fuse_inode_handle parent;
+
+ if (fh_len < 3 || fileid_type > 2)
+ return NULL;
+
+ if (fileid_type == 2) {
+ if (fh_len < 6)
+ return NULL;
+
+ parent.nodeid = (u64) fh[3] << 32;
+ parent.nodeid |= (u64) fh[4];
+ parent.generation = fh[5];
+ } else {
+ parent.nodeid = 0;
+ parent.generation = 0;
+ }
+
+ handle.nodeid = (u64) fh[0] << 32;
+ handle.nodeid |= (u64) fh[1];
+ handle.generation = fh[2];
+
+ return ret = fuse_export_operations.
+ find_exported_dentry(sb, &handle, &parent, acceptable, context);
+}
+
static struct export_operations fuse_export_operations = {
- .get_dentry = fuse_get_dentry,
+ .get_dentry = fuse_get_dentry_old,
.encode_fh = fuse_encode_fh,
+ .decode_fh = fuse_decode_fh,
};
+#endif
#endif
static struct super_operations fuse_super_operations = {
@@ -845,8 +938,12 @@ static decl_subsys(fuse, NULL, NULL);
static decl_subsys(fuse, NULL, NULL);
static decl_subsys(connections, NULL, NULL);
+#ifdef KERNEL_2_6_24_PLUS
+static void fuse_inode_init_once(struct kmem_cache *cachep, void *foo)
+#else
static void fuse_inode_init_once(void *foo, struct kmem_cache *cachep,
unsigned long flags)
+#endif
{
struct inode * inode = foo;