From 4e1dfd70be5ad817c8820d0a2a973c64e1a704f5 Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Tue, 1 Apr 2008 20:02:27 +0000 Subject: [PATCH] Upgrade fuse-2.7.1 to fuse-2.7.3 to fix breakage (#3246) Signed-off-by: Robert P. J. Day SVN-Revision: 10698 --- package/fuse/Makefile | 4 +- package/fuse/patches/100-cross_compile.patch | 7 +- package/fuse/patches/102-no_depmod.patch | 7 +- .../fuse/patches/112-no_break_on_mknod.patch | 8 +- package/fuse/patches/200-disable_compat.patch | 692 +++++++++--------- package/fuse/patches/300-2.6.24_fixes.patch | 246 ------- 6 files changed, 359 insertions(+), 605 deletions(-) delete mode 100644 package/fuse/patches/300-2.6.24_fixes.patch diff --git a/package/fuse/Makefile b/package/fuse/Makefile index 8d280e163e..2376eaae33 100644 --- a/package/fuse/Makefile +++ b/package/fuse/Makefile @@ -10,12 +10,12 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=fuse -PKG_VERSION:=2.7.1 +PKG_VERSION:=2.7.3 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=@SF/$(PKG_NAME) -PKG_MD5SUM:=f95b4a238a3df5a92e9013ecb55c2c17 +PKG_MD5SUM:=98563fc7b265b7479a3178181cbcf59a include $(INCLUDE_DIR)/package.mk diff --git a/package/fuse/patches/100-cross_compile.patch b/package/fuse/patches/100-cross_compile.patch index 2ce83c46f6..54a4d590cf 100644 --- a/package/fuse/patches/100-cross_compile.patch +++ b/package/fuse/patches/100-cross_compile.patch @@ -1,7 +1,6 @@ -Index: fuse-2.6.5/kernel/configure -=================================================================== ---- fuse-2.6.5.orig/kernel/configure 2007-06-23 13:03:50.000000000 +0200 -+++ fuse-2.6.5/kernel/configure 2007-06-23 13:03:50.000000000 +0200 +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.7.3/kernel/configure 2008-03-17 14:10:14.000000000 -0400 @@ -1851,7 +1851,9 @@ { echo "$as_me:$LINENO: checking kernel source version" >&5 diff --git a/package/fuse/patches/102-no_depmod.patch b/package/fuse/patches/102-no_depmod.patch index 899d3077d4..ee86942203 100644 --- a/package/fuse/patches/102-no_depmod.patch +++ b/package/fuse/patches/102-no_depmod.patch @@ -1,7 +1,6 @@ -Index: fuse-2.6.5/kernel/Makefile.in -=================================================================== ---- fuse-2.6.5.orig/kernel/Makefile.in 2007-06-23 13:03:50.000000000 +0200 -+++ fuse-2.6.5/kernel/Makefile.in 2007-06-23 13:03:50.000000000 +0200 +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.7.3/kernel/Makefile.in 2008-03-17 14:12:32.000000000 -0400 @@ -25,11 +25,9 @@ install-y: all $(mkdir_p) $(DESTDIR)$(fusemoduledir) diff --git a/package/fuse/patches/112-no_break_on_mknod.patch b/package/fuse/patches/112-no_break_on_mknod.patch index 93e3242254..911d25c12f 100644 --- a/package/fuse/patches/112-no_break_on_mknod.patch +++ b/package/fuse/patches/112-no_break_on_mknod.patch @@ -1,8 +1,6 @@ -Index: fuse-2.6.5/util/Makefile.in -=================================================================== ---- fuse-2.6.5.orig/util/Makefile.in 2007-06-23 13:03:50.000000000 +0200 -+++ fuse-2.6.5/util/Makefile.in 2007-06-23 13:03:50.000000000 +0200 -@@ -489,7 +489,7 @@ +--- 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 +@@ -528,7 +528,7 @@ install-exec-hook: -chown root $(DESTDIR)$(bindir)/fusermount -chmod u+s $(DESTDIR)$(bindir)/fusermount diff --git a/package/fuse/patches/200-disable_compat.patch b/package/fuse/patches/200-disable_compat.patch index d4bb978605..12203d3d3d 100644 --- a/package/fuse/patches/200-disable_compat.patch +++ b/package/fuse/patches/200-disable_compat.patch @@ -1,25 +1,22 @@ -Index: fuse-2.7.1/include/fuse_common_compat.h -=================================================================== ---- fuse-2.7.1.orig/include/fuse_common_compat.h 2007-10-20 17:13:51.409738304 +0200 -+++ fuse-2.7.1/include/fuse_common_compat.h 2007-10-20 17:14:26.323727941 +0200 +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.3/include/fuse_common_compat.h 2008-03-17 14:55:01.000000000 -0400 @@ -17,6 +17,7 @@ - unsigned int keep_cache : 1; + unsigned int keep_cache : 1; }; +#ifndef DISABLE_COMPAT int fuse_mount_compat25(const char *mountpoint, struct fuse_args *args); 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[]); void fuse_unmount_compat22(const char *mountpoint); -- +#endif -Index: fuse-2.7.1/lib/fuse.c -=================================================================== ---- fuse-2.7.1.orig/lib/fuse.c 2007-10-20 17:13:51.417738760 +0200 -+++ fuse-2.7.1/lib/fuse.c 2007-10-20 17:26:30.657005340 +0200 +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.3/lib/fuse.c 2008-03-17 15:04:54.000000000 -0400 @@ -14,8 +14,6 @@ #include "fuse_lowlevel.h" #include "fuse_opt.h" @@ -29,284 +26,288 @@ Index: fuse-2.7.1/lib/fuse.c #include #include -@@ -621,127 +619,6 @@ - fuse_do_prepare_interrupt(req, d); +@@ -626,129 +624,6 @@ + fuse_do_prepare_interrupt(req, d); } -#ifndef __FreeBSD__ - -static int fuse_compat_open(struct fuse_fs *fs, const char *path, -- struct fuse_file_info *fi) --{ -- int err; -- if (!fs->compat || fs->compat >= 25) -- err = fs->op.open(path, fi); -- else if (fs->compat == 22) { -- struct fuse_file_info_compat tmp; -- memcpy(&tmp, fi, sizeof(tmp)); -- err = ((struct fuse_operations_compat22 *) &fs->op)->open(path, &tmp); -- memcpy(fi, &tmp, sizeof(tmp)); -- fi->fh = tmp.fh; -- } else -- err = ((struct fuse_operations_compat2 *) &fs->op) -- ->open(path, fi->flags); -- return err; +- struct fuse_file_info *fi) +-{ +- int err; +- if (!fs->compat || fs->compat >= 25) +- err = fs->op.open(path, fi); +- else if (fs->compat == 22) { +- struct fuse_file_info_compat tmp; +- memcpy(&tmp, fi, sizeof(tmp)); +- err = ((struct fuse_operations_compat22 *) &fs->op)->open(path, +- &tmp); +- memcpy(fi, &tmp, sizeof(tmp)); +- fi->fh = tmp.fh; +- } else +- err = ((struct fuse_operations_compat2 *) &fs->op) +- ->open(path, fi->flags); +- return err; -} - -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) -- return fs->op.release(path, fi); -- else -- return ((struct fuse_operations_compat2 *) &fs->op) -- ->release(path, fi->flags); +- if (!fs->compat || fs->compat >= 22) +- return fs->op.release(path, fi); +- else +- return ((struct fuse_operations_compat2 *) &fs->op) +- ->release(path, fi->flags); -} - -static int fuse_compat_opendir(struct fuse_fs *fs, const char *path, -- struct fuse_file_info *fi) --{ -- if (!fs->compat || fs->compat >= 25) -- return fs->op.opendir(path, fi); -- else { -- int err; -- struct fuse_file_info_compat tmp; -- memcpy(&tmp, fi, sizeof(tmp)); -- err = ((struct fuse_operations_compat22 *) &fs->op) -- ->opendir(path, &tmp); -- memcpy(fi, &tmp, sizeof(tmp)); -- fi->fh = tmp.fh; -- return err; -- } +- struct fuse_file_info *fi) +-{ +- if (!fs->compat || fs->compat >= 25) +- return fs->op.opendir(path, fi); +- else { +- int err; +- struct fuse_file_info_compat tmp; +- memcpy(&tmp, fi, sizeof(tmp)); +- err = ((struct fuse_operations_compat22 *) &fs->op) +- ->opendir(path, &tmp); +- memcpy(fi, &tmp, sizeof(tmp)); +- fi->fh = tmp.fh; +- return err; +- } -} - -static void convert_statfs_compat(struct fuse_statfs_compat1 *compatbuf, -- struct statvfs *stbuf) +- struct statvfs *stbuf) -{ -- stbuf->f_bsize = compatbuf->block_size; -- stbuf->f_blocks = compatbuf->blocks; -- stbuf->f_bfree = compatbuf->blocks_free; -- stbuf->f_bavail = compatbuf->blocks_free; -- stbuf->f_files = compatbuf->files; -- stbuf->f_ffree = compatbuf->files_free; -- stbuf->f_namemax = compatbuf->namelen; +- stbuf->f_bsize = compatbuf->block_size; +- stbuf->f_blocks = compatbuf->blocks; +- stbuf->f_bfree = compatbuf->blocks_free; +- stbuf->f_bavail = compatbuf->blocks_free; +- stbuf->f_files = compatbuf->files; +- stbuf->f_ffree = compatbuf->files_free; +- stbuf->f_namemax = compatbuf->namelen; -} - -static void convert_statfs_old(struct statfs *oldbuf, struct statvfs *stbuf) -{ -- stbuf->f_bsize = oldbuf->f_bsize; -- stbuf->f_blocks = oldbuf->f_blocks; -- stbuf->f_bfree = oldbuf->f_bfree; -- stbuf->f_bavail = oldbuf->f_bavail; -- stbuf->f_files = oldbuf->f_files; -- stbuf->f_ffree = oldbuf->f_ffree; -- stbuf->f_namemax = oldbuf->f_namelen; +- stbuf->f_bsize = oldbuf->f_bsize; +- stbuf->f_blocks = oldbuf->f_blocks; +- stbuf->f_bfree = oldbuf->f_bfree; +- stbuf->f_bavail = oldbuf->f_bavail; +- stbuf->f_files = oldbuf->f_files; +- stbuf->f_ffree = oldbuf->f_ffree; +- stbuf->f_namemax = oldbuf->f_namelen; -} - -static int fuse_compat_statfs(struct fuse_fs *fs, const char *path, -- struct statvfs *buf) --{ -- int err; -- -- if (!fs->compat || fs->compat >= 25) { -- err = fs->op.statfs(fs->compat == 25 ? "/" : path, buf); -- } else if (fs->compat > 11) { -- struct statfs oldbuf; -- err = ((struct fuse_operations_compat22 *) &fs->op) -- ->statfs("/", &oldbuf); -- if (!err) -- convert_statfs_old(&oldbuf, buf); -- } else { -- struct fuse_statfs_compat1 compatbuf; -- memset(&compatbuf, 0, sizeof(struct fuse_statfs_compat1)); -- err = ((struct fuse_operations_compat1 *) &fs->op)->statfs(&compatbuf); -- if (!err) -- convert_statfs_compat(&compatbuf, buf); -- } -- return err; +- struct statvfs *buf) +-{ +- int err; +- +- if (!fs->compat || fs->compat >= 25) { +- err = fs->op.statfs(fs->compat == 25 ? "/" : path, buf); +- } else if (fs->compat > 11) { +- struct statfs oldbuf; +- err = ((struct fuse_operations_compat22 *) &fs->op) +- ->statfs("/", &oldbuf); +- if (!err) +- convert_statfs_old(&oldbuf, buf); +- } else { +- struct fuse_statfs_compat1 compatbuf; +- memset(&compatbuf, 0, sizeof(struct fuse_statfs_compat1)); +- err = ((struct fuse_operations_compat1 *) &fs->op) +- ->statfs(&compatbuf); +- if (!err) +- convert_statfs_compat(&compatbuf, buf); +- } +- return err; -} - -#else /* __FreeBSD__ */ - -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, -- 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, -- 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, -- 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__ */ - int fuse_fs_getattr(struct fuse_fs *fs, const char *path, struct stat *buf) { - fuse_get_context()->private_data = fs->user_data; -@@ -814,7 +691,7 @@ + fuse_get_context()->private_data = fs->user_data; +@@ -821,7 +696,7 @@ { - fuse_get_context()->private_data = fs->user_data; - if (fs->op.release) -- return fuse_compat_release(fs, path, fi); -+ return fs->op.release(path, fi); - else - return 0; + fuse_get_context()->private_data = fs->user_data; + if (fs->op.release) +- return fuse_compat_release(fs, path, fi); ++ return fs->op.release(path, fi); + else + return 0; } -@@ -824,7 +701,7 @@ +@@ -831,7 +706,7 @@ { - fuse_get_context()->private_data = fs->user_data; - if (fs->op.opendir) -- return fuse_compat_opendir(fs, path, fi); -+ return fs->op.opendir(path, fi); - else - return 0; + fuse_get_context()->private_data = fs->user_data; + if (fs->op.opendir) +- return fuse_compat_opendir(fs, path, fi); ++ return fs->op.opendir(path, fi); + else + return 0; } -@@ -834,7 +711,7 @@ +@@ -841,7 +716,7 @@ { - fuse_get_context()->private_data = fs->user_data; - if (fs->op.open) -- return fuse_compat_open(fs, path, fi); -+ return fs->op.open(path, fi); - else - return 0; + fuse_get_context()->private_data = fs->user_data; + if (fs->op.open) +- return fuse_compat_open(fs, path, fi); ++ return fs->op.open(path, fi); + else + return 0; } -@@ -893,7 +770,7 @@ +@@ -900,7 +775,7 @@ { - fuse_get_context()->private_data = fs->user_data; - if (fs->op.statfs) -- return fuse_compat_statfs(fs, path, buf); -+ return fs->op.statfs(path, buf); - else { - buf->f_namemax = 255; - buf->f_bsize = 512; -@@ -3037,7 +2914,6 @@ - if (!fs) - goto out_free; + fuse_get_context()->private_data = fs->user_data; + if (fs->op.statfs) +- return fuse_compat_statfs(fs, path, buf); ++ return fs->op.statfs(path, buf); + else { + buf->f_namemax = 255; + buf->f_bsize = 512; +@@ -3070,7 +2945,6 @@ + if (!fs) + goto out_free; -- fs->compat = compat; - f->fs = fs; +- fs->compat = compat; + f->fs = fs; - /* Oh f**k, this is ugly! */ -@@ -3079,11 +2955,6 @@ - f->conf.readdir_ino = 1; + /* Oh f**k, this is ugly! */ +@@ -3114,11 +2988,6 @@ + f->conf.readdir_ino = 1; #endif -- if (compat && compat <= 25) { -- if (fuse_sync_compat_args(args) == -1) -- goto out_free_fs; -- } -- - f->se = fuse_lowlevel_new_common(args, &llop, sizeof(llop), f); - if (f->se == NULL) { - if (f->conf.help) -@@ -3217,19 +3088,6 @@ - fuse_delete_context_key(); +- if (compat && compat <= 25) { +- if (fuse_sync_compat_args(args) == -1) +- goto out_free_fs; +- } +- + f->se = fuse_lowlevel_new_common(args, &llop, sizeof(llop), f); + if (f->se == NULL) { + if (f->conf.help) +@@ -3254,19 +3123,6 @@ + fuse_delete_context_key(); } -static struct fuse *fuse_new_common_compat25(int fd, struct fuse_args *args, -- const struct fuse_operations *op, -- size_t op_size, int compat) +- const struct fuse_operations *op, +- size_t op_size, int compat) -{ -- struct fuse *f = NULL; -- struct fuse_chan *ch = fuse_kern_chan_new(fd); +- struct fuse *f = NULL; +- struct fuse_chan *ch = fuse_kern_chan_new(fd); - -- if (ch) -- f = fuse_new_common(ch, args, op, op_size, NULL, compat); +- if (ch) +- 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 main() has been called) */ void fuse_register_module(struct fuse_module *mod) -@@ -3242,69 +3100,3 @@ - fuse_modules = mod; +@@ -3278,72 +3134,3 @@ + mod->next = fuse_modules; + fuse_modules = mod; } - +- -#ifndef __FreeBSD__ - -static struct fuse *fuse_new_common_compat(int fd, const char *opts, -- const struct fuse_operations *op, -- size_t op_size, int compat) +- const struct fuse_operations *op, +- size_t op_size, int compat) -{ -- struct fuse *f; -- struct fuse_args args = FUSE_ARGS_INIT(0, NULL); +- struct fuse *f; +- struct fuse_args args = FUSE_ARGS_INIT(0, NULL); - -- if (fuse_opt_add_arg(&args, "") == -1) -- return NULL; -- if (opts && -- (fuse_opt_add_arg(&args, "-o") == -1 || -- fuse_opt_add_arg(&args, opts) == -1)) { -- fuse_opt_free_args(&args); -- return NULL; -- } -- f = fuse_new_common_compat25(fd, &args, op, op_size, compat); -- fuse_opt_free_args(&args); +- if (fuse_opt_add_arg(&args, "") == -1) +- return NULL; +- if (opts && +- (fuse_opt_add_arg(&args, "-o") == -1 || +- fuse_opt_add_arg(&args, opts) == -1)) { +- fuse_opt_free_args(&args); +- return NULL; +- } +- f = fuse_new_common_compat25(fd, &args, op, op_size, compat); +- fuse_opt_free_args(&args); - -- return f; +- return f; -} - -struct fuse *fuse_new_compat22(int fd, const char *opts, -- const struct fuse_operations_compat22 *op, -- size_t op_size) +- const struct fuse_operations_compat22 *op, +- size_t op_size) -{ -- return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op, -- op_size, 22); +- return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op, +- op_size, 22); -} - -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, -- sizeof(struct fuse_operations_compat2), 21); +- return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op, +- sizeof(struct fuse_operations_compat2), +- 21); -} - -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; -- if (flags & FUSE_DEBUG_COMPAT1) -- opts = "debug"; -- return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op, -- sizeof(struct fuse_operations_compat1), 11); +- const char *opts = NULL; +- if (flags & FUSE_DEBUG_COMPAT1) +- opts = "debug"; +- return fuse_new_common_compat(fd, opts, (struct fuse_operations *) op, +- sizeof(struct fuse_operations_compat1), +- 11); -} - --__asm__(".symver fuse_exited,__fuse_exited@"); --__asm__(".symver fuse_process_cmd,__fuse_process_cmd@"); --__asm__(".symver fuse_read_cmd,__fuse_read_cmd@"); --__asm__(".symver fuse_set_getcontext_func,__fuse_set_getcontext_func@"); --__asm__(".symver fuse_new_compat2,fuse_new@"); --__asm__(".symver fuse_new_compat22,fuse_new@FUSE_2.2"); +-FUSE_SYMVER(".symver fuse_exited,__fuse_exited@"); +-FUSE_SYMVER(".symver fuse_process_cmd,__fuse_process_cmd@"); +-FUSE_SYMVER(".symver fuse_read_cmd,__fuse_read_cmd@"); +-FUSE_SYMVER(".symver fuse_set_getcontext_func,__fuse_set_getcontext_func@"); +-FUSE_SYMVER(".symver fuse_new_compat2,fuse_new@"); +-FUSE_SYMVER(".symver fuse_new_compat22,fuse_new@FUSE_2.2"); - -#endif /* __FreeBSD__ */ - -struct fuse *fuse_new_compat25(int fd, struct fuse_args *args, -- const struct fuse_operations_compat25 *op, -- size_t op_size) +- const struct fuse_operations_compat25 *op, +- size_t op_size) -{ -- return fuse_new_common_compat25(fd, args, (struct fuse_operations *) op, -- op_size, 25); +- return fuse_new_common_compat25(fd, args, (struct fuse_operations *) op, +- op_size, 25); -} - --__asm__(".symver fuse_new_compat25,fuse_new@FUSE_2.5"); -Index: fuse-2.7.1/lib/fuse_lowlevel.c -=================================================================== ---- fuse-2.7.1.orig/lib/fuse_lowlevel.c 2007-10-20 17:13:51.425739218 +0200 -+++ fuse-2.7.1/lib/fuse_lowlevel.c 2007-10-20 17:22:46.396225455 +0200 +-FUSE_SYMVER(".symver fuse_new_compat25,fuse_new@FUSE_2.5"); +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.3/lib/fuse_lowlevel.c 2008-03-17 15:07:40.000000000 -0400 @@ -11,8 +11,6 @@ #include "fuse_opt.h" #include "fuse_i.h" @@ -316,160 +317,160 @@ Index: fuse-2.7.1/lib/fuse_lowlevel.c #include #include -@@ -1310,129 +1308,3 @@ - return fuse_lowlevel_new_common(args, op, op_size, userdata); +@@ -1319,130 +1317,3 @@ + { + return fuse_lowlevel_new_common(args, op, op_size, userdata); } - +- - -#ifndef __FreeBSD__ - -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; -- if (f->direct_io) -- arg->open_flags |= FOPEN_DIRECT_IO; -- if (f->keep_cache) -- arg->open_flags |= FOPEN_KEEP_CACHE; +- arg->fh = f->fh; +- if (f->direct_io) +- arg->open_flags |= FOPEN_DIRECT_IO; +- if (f->keep_cache) +- arg->open_flags |= FOPEN_KEEP_CACHE; -} - -static void convert_statfs_compat(const struct statfs *compatbuf, -- struct statvfs *buf) +- struct statvfs *buf) -{ -- buf->f_bsize = compatbuf->f_bsize; -- buf->f_blocks = compatbuf->f_blocks; -- buf->f_bfree = compatbuf->f_bfree; -- buf->f_bavail = compatbuf->f_bavail; -- buf->f_files = compatbuf->f_files; -- buf->f_ffree = compatbuf->f_ffree; -- buf->f_namemax = compatbuf->f_namelen; +- buf->f_bsize = compatbuf->f_bsize; +- buf->f_blocks = compatbuf->f_blocks; +- buf->f_bfree = compatbuf->f_bfree; +- buf->f_bavail = compatbuf->f_bavail; +- buf->f_files = compatbuf->f_files; +- buf->f_ffree = compatbuf->f_ffree; +- buf->f_namemax = compatbuf->f_namelen; -} - -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)); -- fill_open_compat(&arg, f); -- return send_reply_ok(req, &arg, sizeof(arg)); +- memset(&arg, 0, sizeof(arg)); +- fill_open_compat(&arg, f); +- return send_reply_ok(req, &arg, sizeof(arg)); -} - -int fuse_reply_statfs_compat(fuse_req_t req, const struct statfs *stbuf) -{ -- struct statvfs newbuf; +- struct statvfs newbuf; - -- memset(&newbuf, 0, sizeof(newbuf)); -- convert_statfs_compat(stbuf, &newbuf); +- memset(&newbuf, 0, sizeof(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, -- const struct fuse_lowlevel_ops_compat *op, -- size_t op_size, void *userdata) +- const struct fuse_lowlevel_ops_compat *op, +- size_t op_size, void *userdata) -{ -- struct fuse_session *se; -- struct fuse_args args = FUSE_ARGS_INIT(0, NULL); +- struct fuse_session *se; +- struct fuse_args args = FUSE_ARGS_INIT(0, NULL); - -- if (opts && -- (fuse_opt_add_arg(&args, "") == -1 || -- fuse_opt_add_arg(&args, "-o") == -1 || -- fuse_opt_add_arg(&args, opts) == -1)) { -- fuse_opt_free_args(&args); -- return NULL; -- } -- se = fuse_lowlevel_new(&args, (const struct fuse_lowlevel_ops *) op, -- op_size, userdata); -- fuse_opt_free_args(&args); +- if (opts && +- (fuse_opt_add_arg(&args, "") == -1 || +- fuse_opt_add_arg(&args, "-o") == -1 || +- fuse_opt_add_arg(&args, opts) == -1)) { +- fuse_opt_free_args(&args); +- return NULL; +- } +- se = fuse_lowlevel_new(&args, (const struct fuse_lowlevel_ops *) op, +- op_size, userdata); +- fuse_opt_free_args(&args); - -- return se; +- return se; -} - -struct fuse_ll_compat_conf { -- unsigned max_read; -- int set_max_read; +- unsigned max_read; +- int set_max_read; -}; - -static const struct fuse_opt fuse_ll_opts_compat[] = { -- { "max_read=", offsetof(struct fuse_ll_compat_conf, set_max_read), 1 }, -- { "max_read=%u", offsetof(struct fuse_ll_compat_conf, max_read), 0 }, -- FUSE_OPT_KEY("max_read=", FUSE_OPT_KEY_KEEP), -- FUSE_OPT_END +- { "max_read=", offsetof(struct fuse_ll_compat_conf, set_max_read), 1 }, +- { "max_read=%u", offsetof(struct fuse_ll_compat_conf, max_read), 0 }, +- FUSE_OPT_KEY("max_read=", FUSE_OPT_KEY_KEEP), +- FUSE_OPT_END -}; - -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)); -- if (fuse_opt_parse(args, &conf, fuse_ll_opts_compat, NULL) == -1) -- return -1; +- memset(&conf, 0, sizeof(conf)); +- if (fuse_opt_parse(args, &conf, fuse_ll_opts_compat, NULL) == -1) +- return -1; - -- if (fuse_opt_insert_arg(args, 1, "-osync_read")) -- return -1; +- if (fuse_opt_insert_arg(args, 1, "-osync_read")) +- return -1; - -- if (conf.set_max_read) { -- char tmpbuf[64]; +- if (conf.set_max_read) { +- char tmpbuf[64]; - -- sprintf(tmpbuf, "-omax_readahead=%u", conf.max_read); -- if (fuse_opt_insert_arg(args, 1, tmpbuf) == -1) -- return -1; -- } -- return 0; +- sprintf(tmpbuf, "-omax_readahead=%u", conf.max_read); +- if (fuse_opt_insert_arg(args, 1, tmpbuf) == -1) +- return -1; +- } +- return 0; -} - --__asm__(".symver fuse_reply_statfs_compat,fuse_reply_statfs@FUSE_2.4"); --__asm__(".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_reply_statfs_compat,fuse_reply_statfs@FUSE_2.4"); +-FUSE_SYMVER(".symver fuse_reply_open_compat,fuse_reply_open@FUSE_2.4"); +-FUSE_SYMVER(".symver fuse_lowlevel_new_compat,fuse_lowlevel_new@FUSE_2.4"); - -#else /* __FreeBSD__ */ - -int fuse_sync_compat_args(struct fuse_args *args) -{ -- (void) args; -- return 0; +- (void) args; +- return 0; -} - -#endif /* __FreeBSD__ */ - -struct fuse_session *fuse_lowlevel_new_compat25(struct fuse_args *args, -- const struct fuse_lowlevel_ops_compat25 *op, -- size_t op_size, void *userdata) +- const struct fuse_lowlevel_ops_compat25 *op, +- size_t op_size, void *userdata) -{ -- if (fuse_sync_compat_args(args) == -1) -- return NULL; +- if (fuse_sync_compat_args(args) == -1) +- return NULL; - -- return fuse_lowlevel_new_common(args, -- (const struct fuse_lowlevel_ops *) op, -- op_size, userdata); +- return fuse_lowlevel_new_common(args, +- (const struct fuse_lowlevel_ops *) op, +- op_size, userdata); -} - --__asm__(".symver fuse_lowlevel_new_compat25,fuse_lowlevel_new@FUSE_2.5"); -Index: fuse-2.7.1/lib/helper.c -=================================================================== ---- fuse-2.7.1.orig/lib/helper.c 2007-10-20 17:13:51.433739673 +0200 -+++ fuse-2.7.1/lib/helper.c 2007-10-20 17:21:32.508014797 +0200 -@@ -10,7 +10,6 @@ - #include "fuse_i.h" +-FUSE_SYMVER(".symver fuse_lowlevel_new_compat25,fuse_lowlevel_new@FUSE_2.5"); +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.3/lib/helper.c 2008-03-17 15:10:18.000000000 -0400 +@@ -11,7 +11,6 @@ + #include "fuse_misc.h" #include "fuse_opt.h" #include "fuse_lowlevel.h" -#include "fuse_common_compat.h" #include #include -@@ -202,7 +201,7 @@ - close(fd); - } while (fd >= 0 && fd <= 2); +@@ -206,7 +205,7 @@ + close(fd); + } while (fd >= 0 && fd <= 2); -- fd = fuse_mount_compat25(mountpoint, args); -+ fd = fuse_kern_mount(mountpoint, args); - if (fd == -1) - return NULL; +- fd = fuse_mount_compat25(mountpoint, args); ++ fd = fuse_kern_mount(mountpoint, args); + if (fd == -1) + return NULL; -@@ -349,97 +348,3 @@ +@@ -353,100 +352,3 @@ { - return FUSE_VERSION; + return FUSE_VERSION; } - -#include "fuse_compat.h" @@ -477,133 +478,136 @@ Index: fuse-2.7.1/lib/helper.c -#ifndef __FreeBSD__ - -struct fuse *fuse_setup_compat22(int argc, char *argv[], -- const struct fuse_operations_compat22 *op, -- size_t op_size, char **mountpoint, -- int *multithreaded, int *fd) +- const struct fuse_operations_compat22 *op, +- size_t op_size, char **mountpoint, +- int *multithreaded, int *fd) -{ -- return fuse_setup_common(argc, argv, (struct fuse_operations *) op, -- op_size, mountpoint, multithreaded, fd, NULL, 22); +- return fuse_setup_common(argc, argv, (struct fuse_operations *) op, +- op_size, mountpoint, multithreaded, fd, NULL, +- 22); -} - -struct fuse *fuse_setup_compat2(int argc, char *argv[], -- const struct fuse_operations_compat2 *op, -- char **mountpoint, int *multithreaded, -- int *fd) +- const struct fuse_operations_compat2 *op, +- char **mountpoint, int *multithreaded, +- int *fd) -{ -- return fuse_setup_common(argc, argv, (struct fuse_operations *) op, -- sizeof(struct fuse_operations_compat2), -- mountpoint, multithreaded, fd, NULL, 21); +- return fuse_setup_common(argc, argv, (struct fuse_operations *) op, +- sizeof(struct fuse_operations_compat2), +- mountpoint, multithreaded, fd, NULL, 21); -} - -int fuse_main_real_compat22(int argc, char *argv[], -- const struct fuse_operations_compat22 *op, -- size_t op_size) +- const struct fuse_operations_compat22 *op, +- size_t op_size) -{ -- return fuse_main_common(argc, argv, (struct fuse_operations *) op, op_size, -- NULL, 22); +- return fuse_main_common(argc, argv, (struct fuse_operations *) op, +- op_size, NULL, 22); -} - -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, -- sizeof(struct fuse_operations_compat1), NULL, 11); +- fuse_main_common(argc, argv, (struct fuse_operations *) op, +- sizeof(struct fuse_operations_compat1), NULL, 11); -} - -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, -- sizeof(struct fuse_operations_compat2), NULL, 21); +- return fuse_main_common(argc, argv, (struct fuse_operations *) op, +- sizeof(struct fuse_operations_compat2), NULL, +- 21); -} - -int fuse_mount_compat1(const char *mountpoint, const char *args[]) -{ -- /* just ignore mount args for now */ -- (void) args; -- return fuse_mount_compat22(mountpoint, NULL); +- /* just ignore mount args for now */ +- (void) args; +- return fuse_mount_compat22(mountpoint, NULL); -} - --__asm__(".symver fuse_setup_compat2,__fuse_setup@"); --__asm__(".symver fuse_setup_compat22,fuse_setup@FUSE_2.2"); --__asm__(".symver fuse_teardown,__fuse_teardown@"); --__asm__(".symver fuse_main_compat2,fuse_main@"); --__asm__(".symver fuse_main_real_compat22,fuse_main_real@FUSE_2.2"); +-FUSE_SYMVER(".symver fuse_setup_compat2,__fuse_setup@"); +-FUSE_SYMVER(".symver fuse_setup_compat22,fuse_setup@FUSE_2.2"); +-FUSE_SYMVER(".symver fuse_teardown,__fuse_teardown@"); +-FUSE_SYMVER(".symver fuse_main_compat2,fuse_main@"); +-FUSE_SYMVER(".symver fuse_main_real_compat22,fuse_main_real@FUSE_2.2"); - -#endif /* __FreeBSD__ */ - - -struct fuse *fuse_setup_compat25(int argc, char *argv[], -- const struct fuse_operations_compat25 *op, -- size_t op_size, char **mountpoint, -- int *multithreaded, int *fd) +- const struct fuse_operations_compat25 *op, +- size_t op_size, char **mountpoint, +- int *multithreaded, int *fd) -{ -- return fuse_setup_common(argc, argv, (struct fuse_operations *) op, -- op_size, mountpoint, multithreaded, fd, NULL, 25); +- return fuse_setup_common(argc, argv, (struct fuse_operations *) op, +- op_size, mountpoint, multithreaded, fd, NULL, +- 25); -} - -int fuse_main_real_compat25(int argc, char *argv[], -- const struct fuse_operations_compat25 *op, -- size_t op_size) +- const struct fuse_operations_compat25 *op, +- size_t op_size) -{ -- return fuse_main_common(argc, argv, (struct fuse_operations *) op, op_size, -- NULL, 25); +- return fuse_main_common(argc, argv, (struct fuse_operations *) op, +- op_size, NULL, 25); -} - -void fuse_teardown_compat22(struct fuse *fuse, int fd, char *mountpoint) -{ -- (void) fd; -- fuse_teardown_common(fuse, mountpoint); +- (void) fd; +- fuse_teardown_common(fuse, mountpoint); -} - -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"); --__asm__(".symver fuse_teardown_compat22,fuse_teardown@FUSE_2.2"); --__asm__(".symver fuse_main_real_compat25,fuse_main_real@FUSE_2.5"); --__asm__(".symver fuse_mount_compat25,fuse_mount@FUSE_2.5"); -Index: fuse-2.7.1/lib/mount.c -=================================================================== ---- fuse-2.7.1.orig/lib/mount.c 2007-10-20 17:13:51.441740129 +0200 -+++ fuse-2.7.1/lib/mount.c 2007-10-20 17:22:07.209992349 +0200 -@@ -9,7 +9,6 @@ - #include "config.h" +-FUSE_SYMVER(".symver fuse_setup_compat25,fuse_setup@FUSE_2.5"); +-FUSE_SYMVER(".symver fuse_teardown_compat22,fuse_teardown@FUSE_2.2"); +-FUSE_SYMVER(".symver fuse_main_real_compat25,fuse_main_real@FUSE_2.5"); +-FUSE_SYMVER(".symver fuse_mount_compat25,fuse_mount@FUSE_2.5"); +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.3/lib/mount.c 2008-03-17 15:11:02.000000000 -0400 +@@ -10,7 +10,6 @@ #include "fuse_i.h" + #include "fuse_misc.h" #include "fuse_opt.h" -#include "fuse_common_compat.h" #include "mount_util.h" #include -@@ -308,11 +307,6 @@ - waitpid(pid, NULL, 0); +@@ -312,11 +311,6 @@ + waitpid(pid, NULL, 0); } -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, - int quiet) + int quiet) { -@@ -376,11 +370,6 @@ - return rv; +@@ -380,11 +374,6 @@ + return rv; } -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, - const char *mnt_opts) + const char *mnt_opts) { -@@ -579,5 +568,3 @@ - return res; +@@ -587,6 +576,3 @@ + free(mo.mtab_opts); + return res; } - --__asm__(".symver fuse_mount_compat22,fuse_mount@FUSE_2.2"); --__asm__(".symver fuse_unmount_compat22,fuse_unmount@FUSE_2.2"); +- +-FUSE_SYMVER(".symver fuse_mount_compat22,fuse_mount@FUSE_2.2"); +-FUSE_SYMVER(".symver fuse_unmount_compat22,fuse_unmount@FUSE_2.2"); diff --git a/package/fuse/patches/300-2.6.24_fixes.patch b/package/fuse/patches/300-2.6.24_fixes.patch deleted file mode 100644 index e8f761e371..0000000000 --- a/package/fuse/patches/300-2.6.24_fixes.patch +++ /dev/null @@ -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 - #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; - - -- 2.30.2