From f2732edc60c4d9f4866f6d258c1682b6ee34b4b7 Mon Sep 17 00:00:00 2001 From: thepeople Date: Sun, 14 Mar 2010 02:01:14 +0000 Subject: find attached the announced patch for fuse. changes: - latest fuse 2.8.3 - includes now the kernel module for kernel 2.4 - builds parallel - fuse-utils includes now ulockmgr_server fuse24 should be deleted from trunk. bud git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20190 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/fuse/Makefile | 176 ++++-- package/fuse/patches-kernel24/101-kmod_build.patch | 45 ++ package/fuse/patches-kernel24/102-no_depmod.patch | 14 + .../patches-kernel24/112-no_break_on_mknod.patch | 11 + package/fuse/patches-kernel24/113-DCACHE_BUG.patch | 73 +++ package/fuse/patches/100-cross_compile.patch | 14 - package/fuse/patches/102-no_depmod.patch | 15 - package/fuse/patches/112-no_break_on_mknod.patch | 7 +- package/fuse/patches/200-disable_compat.patch | 613 --------------------- .../300-workaround-uclibc-pthread-breakage.patch | 7 +- 10 files changed, 281 insertions(+), 694 deletions(-) create mode 100644 package/fuse/patches-kernel24/101-kmod_build.patch create mode 100644 package/fuse/patches-kernel24/102-no_depmod.patch create mode 100644 package/fuse/patches-kernel24/112-no_break_on_mknod.patch create mode 100644 package/fuse/patches-kernel24/113-DCACHE_BUG.patch (limited to 'package/fuse') diff --git a/package/fuse/Makefile b/package/fuse/Makefile index 152c5402d..17c526913 100644 --- a/package/fuse/Makefile +++ b/package/fuse/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2006-2009 OpenWrt.org +# Copyright (C) 2006-2010 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -9,12 +9,22 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=fuse -PKG_VERSION:=2.7.4 -PKG_RELEASE:=2 +PKG_VERSION:=2.8.3 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=@SF/$(PKG_NAME) -PKG_MD5SUM:=4879f06570d2225667534c37fea04213 +PKG_MD5SUM:=517c8384f915e40647bda9f71579fd97 + +PKG_INSTALL:=1 + +# Kernel 2.4 Module +FUSE24_VERSION=2.5.3 +FUSE24_SOURCE:=$(PKG_NAME)-$(FUSE24_VERSION).tar.gz +FUSE24_MD5SUM:=9c7e8b6606b9f158ae20b8521ba2867c +FUSE24_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(FUSE24_VERSION) +FUSE24_INSTALL_DIR:=$(FUSE24_BUILD_DIR)/ipkg-install +FUSE24_PATCH_DIR:=./patches-kernel24 include $(INCLUDE_DIR)/package.mk @@ -38,18 +48,24 @@ endef define Package/fuse-utils/description $(call Package/fuse/Default/description) - This package contains the FUSE utility 'fusermount'. + This package contains the FUSE utilities. + - fusermount + - ulockmgr_server endef define KernelPackage/fuse -$(call Package/fuse/Default) - SUBMENU:=Filesystems - DEPENDS:=@LINUX_2_6 - TITLE+= (kernel module) - KCONFIG:= CONFIG_FUSE_FS - FILES:=$(LINUX_DIR)/fs/fuse/fuse.$(LINUX_KMOD_SUFFIX) - AUTOLOAD:=$(call AutoLoad,80,fuse) - VERSION:=$(LINUX_VERSION) + $(call Package/fuse/Default) + SUBMENU:=Filesystems + TITLE+= (kernel module) + ifeq ($(KERNEL),2.4) + FILES:=$(FUSE24_INSTALL_DIR)/lib/modules/$(LINUX_VERSION)/kernel/fs/fuse/fuse.$(LINUX_KMOD_SUFFIX) + VERSION:=$(LINUX_VERSION)+$(FUSE24_VERSION)-$(PKG_RELEASE) + else + KCONFIG:= CONFIG_FUSE_FS + FILES:=$(LINUX_DIR)/fs/fuse/fuse.$(LINUX_KMOD_SUFFIX) + VERSION:=$(LINUX_VERSION)-$(LINUX_RELEASE) + endif + AUTOLOAD:=$(call AutoLoad,80,fuse) endef define KernelPackage/fuse/description @@ -62,76 +78,144 @@ $(call Package/fuse/Default) SECTION:=libs CATEGORY:=Libraries TITLE+= (library) - DEPENDS:=+LINUX_2_4:kmod-fuse24 +LINUX_2_6:kmod-fuse + DEPENDS:=kmod-fuse SUBMENU:=Filesystem endef define Package/libfuse/description $(call Package/fuse/Default/description) - This package contains the FUSE shared library, needed by other programs. + This package contains the FUSE shared libraries, needed by other programs. + - libfuse + - libulockmgr endef -CONFIGURE_VARS += \ - kernsrcver="$(LINUX_VERSION)" - +# generic args CONFIGURE_ARGS += \ --enable-shared \ --enable-static \ --disable-rpath \ - --enable-lib \ - --enable-util \ --disable-example \ - --disable-auto-modprobe \ - --with-kernel="$(LINUX_DIR)" \ --disable-mtab -# Since kernel 2.6.14 the fuse module is officially part of the kernel. -# Generally it is better to use the kernel's module. Because it is patched -# against the DCACHE BUG on arm architectures (currently brcm-2.4, brcm-47xx) -# and from fuse 2.8.0 on it will be removed from the fuse package anyway. -# -CONFIGURE_ARGS += --disable-kernel-module +# kmod 2.4 args +FUSE24_CONFIGURE_ARGS := $(CONFIGURE_ARGS) \ + --disable-lib --disable-util \ + --enable-kernel-module --disable-auto-modprobe \ + --with-kernel="$(LINUX_DIR)" + +# generic package uses lib & utils +CONFIGURE_ARGS += --enable-lib --enable-util + +####### FUSE24 - START ###### +### if we're on kernel 2.4 build a kernel 2.4 compatible fuse module from older version, see also +### http://sourceforge.net/apps/mediawiki/fuse/index.php?title=FAQ#What_version_of_FUSE_do_I_need_to_use_FUSE_with_Linux_2.4.3F +ifeq ($(KERNEL),2.4) + +define Download/fuse24 + FILE:=$(FUSE24_SOURCE) + URL:=$(PKG_SOURCE_URL) + MD5SUM:=$(FUSE24_MD5SUM) +endef +$(eval $(call Download,fuse24)) + +define Build/Prepare/fuse24 + rm -rf $(FUSE24_BUILD_DIR)/ + mkdir -p $(FUSE24_BUILD_DIR)/ + $(TAR) -xzf $(DL_DIR)/$(FUSE24_SOURCE) -C $(FUSE24_BUILD_DIR)/.. +endef + +define Build/Patch/fuse24 + $(call PatchDir,$(FUSE24_BUILD_DIR),$(FUSE24_PATCH_DIR),) +endef + +define Build/Configure/fuse24 + (cd $(FUSE24_BUILD_DIR); \ + rm -rf config.{cache,status} ; \ + $(CONFIGURE_VARS) \ + ./configure \ + $(FUSE24_CONFIGURE_ARGS) \ + ); +endef + +define Build/Compile/fuse24 + $(MAKE) -C $(FUSE24_BUILD_DIR)/$(MAKE_PATH) \ + ARCH="$(LINUX_KARCH)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + all; +endef + +define Build/Install/fuse24 + rm -rf $(FUSE24_INSTALL_DIR) + mkdir -p $(FUSE24_INSTALL_DIR) + $(MAKE) -C $(FUSE24_BUILD_DIR) \ + ARCH="$(LINUX_KARCH)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + DESTDIR="$(FUSE24_INSTALL_DIR)" \ + install +endef + +define Build/Prepare + @echo "--> Build/Prepare enter" + $(call Build/Prepare/fuse24) + $(call Build/Patch/fuse24) + $(call Build/Prepare/Default) + @echo "--> Build/Prepare leave" +endef define Build/Configure - (cd $(PKG_BUILD_DIR); rm -f config.cache; \ - touch configure.in ; \ - touch aclocal.m4 ; \ - touch Makefile.in ; \ - touch include/config.h.in ; \ - touch configure ; \ - ) + @echo "--> Build/Configure enter" + $(call Build/Configure/fuse24) $(call Build/Configure/Default) + @echo "--> Build/Configure leave" endef define Build/Compile - $(MAKE) -C $(PKG_BUILD_DIR) \ - ARCH="$(LINUX_KARCH)" \ - CROSS_COMPILE="$(TARGET_CROSS)" \ - DESTDIR="$(PKG_INSTALL_DIR)" \ - AM_CFLAGS="$(TARGET_CFLAGS) -DDISABLE_COMPAT=1" \ - EXTRA_DIST="" \ - all install + @echo "--> Build/Compile enter" + $(call Build/Compile/fuse24) + $(call Build/Compile/Default) + @echo "--> Build/Compile leave" +endef + +define Build/Install + @echo "--> Build/Install enter" + $(call Build/Install/fuse24) + $(call Build/Install/Default) + @echo "--> Build/Install leave" endef +endif +####### FUSE24 - END ###### + define Build/InstallDev + @echo "--> Build/InstallDev enter" mkdir -p $(1)/usr/include - $(CP) $(PKG_INSTALL_DIR)/usr/include/fuse{,.h} $(1)/usr/include/ + $(CP) $(PKG_INSTALL_DIR)/usr/include/{fuse,*.h} $(1)/usr/include/ mkdir -p $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfuse.{a,so*} $(1)/usr/lib/ + $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.{a,so*} $(1)/usr/lib/ mkdir -p $(1)/usr/lib/pkgconfig $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/fuse.pc $(1)/usr/lib/pkgconfig/ $(SED) 's,-I$$$${includedir}/fuse,,g' $(1)/usr/lib/pkgconfig/fuse.pc $(SED) 's,-L$$$${libdir},,g' $(1)/usr/lib/pkgconfig/fuse.pc + @echo "--> Build/InstallDev leave" endef define Package/fuse-utils/install + @echo "--> Package/fuse-utils/install enter" $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/fusermount $(1)/usr/bin/ + # use cp and keep fusermount sticky bit + $(FIND) $(PKG_INSTALL_DIR)/usr/bin/ -type f -exec $(CP) -a {} $(1)/usr/bin/ \; + @echo "--> Package/fuse-utils/install leave" endef define Package/libfuse/install + @echo "--> Package/libfuse/install enter" $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/libfuse.so.* $(1)/usr/lib/ + $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so.* $(1)/usr/lib/ + @echo "--> Package/libfuse/install leave" +endef + +define Package/kmod-fuse/install + @echo "--> Package/kmod-fuse/install enter/leave" endef $(eval $(call BuildPackage,fuse-utils)) diff --git a/package/fuse/patches-kernel24/101-kmod_build.patch b/package/fuse/patches-kernel24/101-kmod_build.patch new file mode 100644 index 000000000..08cf0a8f7 --- /dev/null +++ b/package/fuse/patches-kernel24/101-kmod_build.patch @@ -0,0 +1,45 @@ +--- a/kernel/Makefile.in ++++ b/kernel/Makefile.in +@@ -54,23 +54,8 @@ distdir: $(DISTFILES) $(COMPATDISTFILES) + + ifeq ($(majver), 2.4) + +-CC = gcc +-LD = ld +-CFLAGS = -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -pipe @KERNELCFLAGS@ +-CPPFLAGS = -I@kernelsrc@/include -I. -D__KERNEL__ -DMODULE -D_LOOSE_KERNEL_NAMES -DFUSE_VERSION=\"$(VERSION)\" @KERNELCPPFLAGS@ +- + fuse_objs = dev.o dir.o file.o inode.o compat/parser.o + +-SUFFIXES = .c .o .s +- +-all-spec: fuse.o +- +-.c.o: +- $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ +- +-fuse.o: $(fuse_objs) +- $(LD) -r -o fuse.o $(fuse_objs) +- + fuse_headers = fuse_i.h fuse_kernel.h + + dev.o: $(fuse_headers) +@@ -78,6 +63,18 @@ dir.o: $(fuse_headers) + file.o: $(fuse_headers) + inode.o: $(fuse_headers) + ++EXTRA_CFLAGS += -DFUSE_VERSION=\"$(VERSION)\" ++ ++O_TARGET := fuse.o ++ ++obj-y := $(fuse_objs) ++obj-m := $(O_TARGET) ++ ++-include $(TOPDIR)/Rules.make ++ ++all-spec: ++ $(MAKE) -C @kernelsrc@ TOPDIR=@kernelsrc@ SUBDIRS=$(PWD) modules ++ + else + + EXTRA_CFLAGS += -DFUSE_VERSION=\"$(VERSION)\" diff --git a/package/fuse/patches-kernel24/102-no_depmod.patch b/package/fuse/patches-kernel24/102-no_depmod.patch new file mode 100644 index 000000000..e0a14490c --- /dev/null +++ b/package/fuse/patches-kernel24/102-no_depmod.patch @@ -0,0 +1,14 @@ +--- a/kernel/Makefile.in ++++ b/kernel/Makefile.in +@@ -31,11 +31,9 @@ all-y: all-spec + install-y: all + $(mkdir_p) $(DESTDIR)$(fusemoduledir) + $(INSTALL) -m 644 $(fusemodule) $(DESTDIR)$(fusemoduledir)/$(fusemodule) +- -/sbin/depmod -a + + uninstall-y: + rm -f $(DESTDIR)$(fusemoduledir)/$(fusemodule) +- -/sbin/depmod -a + + clean: + -rm -f $(fusemodule) *.o .*.cmd *.mod.c *.ko *.s */*.o diff --git a/package/fuse/patches-kernel24/112-no_break_on_mknod.patch b/package/fuse/patches-kernel24/112-no_break_on_mknod.patch new file mode 100644 index 000000000..1c1e466fa --- /dev/null +++ b/package/fuse/patches-kernel24/112-no_break_on_mknod.patch @@ -0,0 +1,11 @@ +--- a/util/Makefile.in ++++ b/util/Makefile.in +@@ -453,7 +453,7 @@ uninstall-am: uninstall-binPROGRAMS unin + install-exec-hook: + -chown root $(DESTDIR)$(bindir)/fusermount + -chmod u+s $(DESTDIR)$(bindir)/fusermount +- @if test ! -e $(DESTDIR)/dev/fuse; then \ ++ -@if test ! -e $(DESTDIR)/dev/fuse; then \ + $(mkdir_p) $(DESTDIR)/dev; \ + echo "mknod $(DESTDIR)/dev/fuse -m 0666 c 10 229"; \ + mknod $(DESTDIR)/dev/fuse -m 0666 c 10 229; \ diff --git a/package/fuse/patches-kernel24/113-DCACHE_BUG.patch b/package/fuse/patches-kernel24/113-DCACHE_BUG.patch new file mode 100644 index 000000000..da0d27cd2 --- /dev/null +++ b/package/fuse/patches-kernel24/113-DCACHE_BUG.patch @@ -0,0 +1,73 @@ +--- a/kernel/dev.c ++++ b/kernel/dev.c +@@ -512,6 +512,9 @@ static int fuse_copy_fill(struct fuse_co + { + unsigned long offset; + int err; ++#ifdef DCACHE_BUG ++ struct vm_area_struct *vma; ++#endif + + unlock_request(cs->req); + fuse_copy_finish(cs); +@@ -523,14 +526,22 @@ static int fuse_copy_fill(struct fuse_co + cs->nr_segs --; + } + down_read(¤t->mm->mmap_sem); ++#ifndef DCACHE_BUG + err = get_user_pages(current, current->mm, cs->addr, 1, cs->write, 0, + &cs->pg, NULL); ++#else ++ err = get_user_pages(current, current->mm, cs->addr, 1, cs->write, 0, ++ &cs->pg, &vma); ++#endif + up_read(¤t->mm->mmap_sem); + if (err < 0) + return err; + BUG_ON(err != 1); + offset = cs->addr % PAGE_SIZE; + cs->mapaddr = kmap_atomic(cs->pg, KM_USER0); ++#ifdef DCACHE_BUG ++ r4k_flush_cache_page(vma, cs->addr); ++#endif + cs->buf = cs->mapaddr + offset; + cs->len = min(PAGE_SIZE - offset, cs->seglen); + cs->seglen -= cs->len; +@@ -545,6 +556,11 @@ static inline int fuse_copy_do(struct fu + { + unsigned ncpy = min(*size, cs->len); + if (val) { ++#ifdef DCACHE_BUG ++ // patch from mailing list, it is very important, otherwise, ++ // can't mount, or ls mount point will hang ++ flush_cache_all(); ++#endif + if (cs->write) + memcpy(cs->buf, *val, ncpy); + else +--- a/kernel/fuse_i.h ++++ b/kernel/fuse_i.h +@@ -45,6 +45,10 @@ + # endif + #endif + ++//#if defined(__arm__) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) ++#define DCACHE_BUG ++//#endif ++ + #include "config.h" + #ifndef KERNEL_2_6 + # include +--- a/kernel/inode.c ++++ b/kernel/inode.c +@@ -739,6 +739,10 @@ static int __init fuse_init(void) + printk("fuse distribution version: %s\n", FUSE_VERSION); + #endif + ++#ifdef DCACHE_BUG ++printk("fuse init: DCACHE_BUG enabled\n"); ++#endif ++ + spin_lock_init(&fuse_lock); + res = fuse_fs_init(); + if (res) diff --git a/package/fuse/patches/100-cross_compile.patch b/package/fuse/patches/100-cross_compile.patch index 54a4d590c..e69de29bb 100644 --- a/package/fuse/patches/100-cross_compile.patch +++ b/package/fuse/patches/100-cross_compile.patch @@ -1,14 +0,0 @@ -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 - echo $ECHO_N "checking kernel source version... $ECHO_C" >&6; } -- if test -r $kernelbuild/include/linux/version.h && fgrep -q UTS_RELEASE $kernelbuild/include/linux/version.h; then -+ if [ -n "$kernsrcver" ]; then -+ echo "$kernsrcver (cached)" -+ elif test -r $kernelbuild/include/linux/version.h && fgrep -q UTS_RELEASE $kernelbuild/include/linux/version.h; then - kernsrcver=`(echo "#include "; echo "kernsrcver=UTS_RELEASE") | cpp -I $kernelbuild/include | grep "^kernsrcver=" | cut -d \" -f 2` - elif test -r $kernelbuild/include/linux/utsrelease.h && fgrep -q UTS_RELEASE $kernelbuild/include/linux/utsrelease.h; then - kernsrcver=`(echo "#include "; echo "kernsrcver=UTS_RELEASE") | cpp -I $kernelbuild/include | grep "^kernsrcver=" | cut -d \" -f 2` diff --git a/package/fuse/patches/102-no_depmod.patch b/package/fuse/patches/102-no_depmod.patch index ee8694220..e69de29bb 100644 --- a/package/fuse/patches/102-no_depmod.patch +++ b/package/fuse/patches/102-no_depmod.patch @@ -1,15 +0,0 @@ -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) - $(INSTALL) -m 644 $(fusemodule) $(DESTDIR)$(fusemoduledir)/$(fusemodule) -- -/sbin/depmod -a - - uninstall-y: - rm -f $(DESTDIR)$(fusemoduledir)/$(fusemodule) -- -/sbin/depmod -a - - clean: - -rm -f $(fusemodule) *.o .*.cmd *.mod.c *.ko *.s */*.o diff --git a/package/fuse/patches/112-no_break_on_mknod.patch b/package/fuse/patches/112-no_break_on_mknod.patch index 911d25c12..a992d8c8e 100644 --- a/package/fuse/patches/112-no_break_on_mknod.patch +++ b/package/fuse/patches/112-no_break_on_mknod.patch @@ -1,6 +1,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 @@ +diff -Nurp fuse-2.8.1.orig/util/Makefile.in fuse-2.8.1/util/Makefile.in +--- fuse-2.8.1.orig/util/Makefile.in 2009-09-11 12:50:00.000000000 +0200 ++++ fuse-2.8.1/util/Makefile.in 2009-12-17 01:05:15.720554385 +0100 +@@ -543,7 +543,7 @@ uninstall-am: uninstall-binPROGRAMS unin 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 12203d3d3..e69de29bb 100644 --- a/package/fuse/patches/200-disable_compat.patch +++ b/package/fuse/patches/200-disable_compat.patch @@ -1,613 +0,0 @@ -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; - }; - -+#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,3 +25,4 @@ - int fuse_mount_compat1(const char *mountpoint, const char *args[]); - - void fuse_unmount_compat22(const char *mountpoint); -+#endif -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" - #include "fuse_misc.h" --#include "fuse_common_compat.h" --#include "fuse_compat.h" - - #include - #include -@@ -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; --} -- --static int fuse_compat_release(struct fuse_fs *fs, const char *path, -- 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); --} -- --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; -- } --} -- --static void convert_statfs_compat(struct fuse_statfs_compat1 *compatbuf, -- 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; --} -- --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; --} -- --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; --} -- --#else /* __FreeBSD__ */ -- --static inline int fuse_compat_open(struct fuse_fs *fs, char *path, -- struct fuse_file_info *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) --{ -- return fs->op.release(path, fi); --} -- --static inline int fuse_compat_opendir(struct fuse_fs *fs, const char *path, -- struct fuse_file_info *fi) --{ -- return fs->op.opendir(path, fi); --} -- --static inline int fuse_compat_statfs(struct fuse_fs *fs, const char *path, -- struct statvfs *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; -@@ -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; - } -@@ -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; - } -@@ -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; - } -@@ -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; -@@ -3070,7 +2945,6 @@ - if (!fs) - goto out_free; - -- fs->compat = compat; - f->fs = fs; - - /* 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) -@@ -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) --{ -- 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); -- -- return f; --} -- - /* called with fuse_context_lock held or during initialization (before - main() has been called) */ - void fuse_register_module(struct fuse_module *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) --{ -- 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); -- -- return f; --} -- --struct fuse *fuse_new_compat22(int fd, const char *opts, -- const struct fuse_operations_compat22 *op, -- size_t op_size) --{ -- 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) --{ -- 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 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); --} -- --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) --{ -- return fuse_new_common_compat25(fd, args, (struct fuse_operations *) op, -- op_size, 25); --} -- --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" - #include "fuse_misc.h" --#include "fuse_common_compat.h" --#include "fuse_lowlevel_compat.h" - - #include - #include -@@ -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) --{ -- 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) --{ -- 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) --{ -- struct fuse_open_out 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; -- -- memset(&newbuf, 0, sizeof(newbuf)); -- convert_statfs_compat(stbuf, &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) --{ -- 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); -- -- return se; --} -- --struct fuse_ll_compat_conf { -- 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 --}; -- --int fuse_sync_compat_args(struct fuse_args *args) --{ -- 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; -- -- if (fuse_opt_insert_arg(args, 1, "-osync_read")) -- return -1; -- -- 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; --} -- --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; --} -- --#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) --{ -- if (fuse_sync_compat_args(args) == -1) -- return NULL; -- -- return fuse_lowlevel_new_common(args, -- (const struct fuse_lowlevel_ops *) op, -- op_size, userdata); --} -- --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 -@@ -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; - -@@ -353,100 +352,3 @@ - { - return FUSE_VERSION; - } -- --#include "fuse_compat.h" -- --#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) --{ -- 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) --{ -- 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) --{ -- 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) --{ -- 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) --{ -- 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); --} -- --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) --{ -- 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) --{ -- 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); --} -- --int fuse_mount_compat25(const char *mountpoint, struct fuse_args *args) --{ -- return fuse_kern_mount(mountpoint, args); --} -- --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 -@@ -312,11 +311,6 @@ - waitpid(pid, NULL, 0); - } - --void fuse_unmount_compat22(const char *mountpoint) --{ -- fuse_kern_unmount(mountpoint, -1); --} -- - static int fuse_mount_fusermount(const char *mountpoint, const char *opts, - int quiet) - { -@@ -380,11 +374,6 @@ - return rv; - } - --int fuse_mount_compat22(const char *mountpoint, const char *opts) --{ -- return fuse_mount_fusermount(mountpoint, opts, 0); --} -- - static int fuse_mount_sys(const char *mnt, struct mount_opts *mo, - const char *mnt_opts) - { -@@ -587,6 +576,3 @@ - free(mo.mtab_opts); - return res; - } -- --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-workaround-uclibc-pthread-breakage.patch b/package/fuse/patches/300-workaround-uclibc-pthread-breakage.patch index cef5ce2db..dded4d850 100644 --- a/package/fuse/patches/300-workaround-uclibc-pthread-breakage.patch +++ b/package/fuse/patches/300-workaround-uclibc-pthread-breakage.patch @@ -1,6 +1,7 @@ ---- fuse-2.7.3.orig/lib/helper.c 2008-11-22 03:25:11.000000000 +0100 -+++ fuse-2.7.3/lib/helper.c 2008-11-22 04:06:35.000000000 +0100 -@@ -178,13 +178,41 @@ +diff -Nurp fuse-2.8.1.orig/lib/helper.c fuse-2.8.1/lib/helper.c +--- fuse-2.8.1.orig/lib/helper.c 2009-06-18 13:14:09.000000000 +0200 ++++ fuse-2.8.1/lib/helper.c 2009-12-17 01:11:32.773356000 +0100 +@@ -180,13 +180,41 @@ err: int fuse_daemonize(int foreground) { int res; -- cgit v1.2.3