Forgot comitting patches
authorFlorian Fainelli <florian@openwrt.org>
Tue, 8 May 2007 21:45:02 +0000 (21:45 +0000)
committerFlorian Fainelli <florian@openwrt.org>
Tue, 8 May 2007 21:45:02 +0000 (21:45 +0000)
SVN-Revision: 7142

13 files changed:
package/shfs/patches/100-kmod_build.patch [new file with mode: 0644]
package/shfs/patches/101-kmod_build.patch [deleted file]
package/shfs/patches/101-shfs_0.35_2.6.18_dentry.patch [new file with mode: 0644]
package/shfs/patches/102-gcc4_fix.patch [deleted file]
package/shfs/patches/102-shfs_0.35_clean_inode_clear.patch [new file with mode: 0644]
package/shfs/patches/103-dentry.patch [deleted file]
package/shfs/patches/103-shfs_0.35_gcc4.patch [new file with mode: 0644]
package/shfs/patches/104-linux_2.6.19.patch [deleted file]
package/shfs/patches/104-shfs_0.35_inode_and_fs.patch [new file with mode: 0644]
package/shfs/patches/105-space_chars.patch [new file with mode: 0644]
package/shfs/patches/106-uidgid32.patch [new file with mode: 0644]
package/shfs/patches/107-df.patch [new file with mode: 0644]
package/shfs/patches/108-no_update_mtab.patch [new file with mode: 0644]

diff --git a/package/shfs/patches/100-kmod_build.patch b/package/shfs/patches/100-kmod_build.patch
new file mode 100644 (file)
index 0000000..1170103
--- /dev/null
@@ -0,0 +1,98 @@
+--- shfs-0.35-orig/shfs/Linux-2.4/Makefile     2004-06-01 15:16:19.000000000 +0200
++++ shfs-0.35-2/shfs/Linux-2.4/Makefile        2005-04-09 02:34:35.000000000 +0200
+@@ -1,3 +1,13 @@
++#
++# the original Makefile was trashed and replaced by this one
++# The main reason is that loadable modules should be built with
++# the same compile flags the kernel was built with, so we'd better
++# let the kernel tree build the module for us, like that :
++#
++#   make -C $(KERNEL_DIR) SUBDIRS="$(shell pwd)" modules
++#   make -C $(KERNEL_DIR) SUBDIRS="$(shell pwd)" modules_install
++#
++
+ ifndef KERNEL
+ KERNEL=$(shell uname -r)
+ endif
+@@ -10,67 +24,29 @@
+ KERNEL_SOURCES=${MODULESDIR}/build
+ endif
+-ifeq (${MODVERSIONS},detect)
+-  ifeq ($(shell test -e ${KERNEL_SOURCES}/include/linux/modversions.h; echo $$?),0)
+-    MODVERSIONS=yes
+-  endif
+-endif
+-
+-ifeq (${MODVERSIONS},yes)
+-MVER=-DMODVERSIONS -DEXPORT_SYMTAB
+-endif
+-
+-LINVER=linux-${KERNEL}
+-
+-ALL_TARGETS := shfs.o
+-
+-SEARCHDIRS := -I- -I. -I${KERNEL_SOURCES}/include #-I/usr/src/linux/include/
++all: all-y
+-CC     := gcc
+-CFLAGS  = -O2 -fomit-frame-pointer -fno-strict-aliasing -pipe -Wall ${SEARCHDIRS} -DMODULE ${MVER} -D__KERNEL__ -DLINUX
+-LINKER    := ld
+-LDFLAGS    = -r
+-LOADLIBES := 
++O_TARGET := shfs.o
+-all: ${ALL_TARGETS}
++shfs-objs := dcache.o dir.o fcache.o file.o inode.o ioctl.o proc.o shell.o symlink.o
+-%.o: %.c $(wildcard *.h)
+-      ${CC} ${CFLAGS} -c $< -o $@
++obj-y := $(shfs-objs) 
++obj-m := $(O_TARGET)
+-shfs.o: dcache.o dir.o fcache.o file.o inode.o ioctl.o proc.o shell.o symlink.o
+-      ${LINKER} ${LDFLAGS} -o $@ ${filter-out %.a %.so, $^} ${LOADLIBES}
+-
+-tidy:
+-      ${RM} core dcache.o dir.o fcache.o file.o inode.o ioctl.o proc.o shell.o symlink.o
+-
+-clean: tidy patch-clean
+-      ${RM} shfs.o
++-include $(TOPDIR)/Rules.make
++all-y:
++      make -C ${KERNEL_SOURCES} TOPDIR="${KERNEL_SOURCES}" SUBDIRS="$(shell pwd)" modules
++      
+ install: shfs.o
+       rm -f ${MODULESDIR}/kernel/fs/shfs/shfs.o
+       install -m644 -b -D shfs.o ${MODULESDIR}/kernel/fs/shfs/shfs.o
+-      if [ -x /sbin/depmod -a "${ROOT}" = "/" ]; then /sbin/depmod -aq; fi
+ uninstall:
+       rm -rf ${MODULESDIR}/kernel/fs/shfs
+-      if [ -x /sbin/depmod -a "${ROOT}" = "/" ]; then /sbin/depmod -aq; fi
+-patch:
+-      rm -rf ${LINVER} ${LINVER}.orig; mkdir ${LINVER};
+-      for i in Documentation fs/shfs include/linux; do \
+-        mkdir -p ${LINVER}/$$i; \
+-      done
+-      cp ${KERNEL_SOURCES}/Documentation/Configure.help ${LINVER}/Documentation
+-      cp ${KERNEL_SOURCES}/fs/{Makefile,Config.in} ${LINVER}/fs
+-      cp -r ${LINVER} ${LINVER}.orig
+-      cp ../../Changelog *.c shfs_debug.h proc.h ${LINVER}/fs/shfs/
+-      cp shfs.h shfs_fs* ${LINVER}/include/linux/
+-      (cd ${LINVER}; patch -p1 <../kernel-config.diff)
+-      find . -type f -name "*.orig" -print | xargs rm -f
+-      diff -urN ${LINVER}.orig ${LINVER} >${LINVER}.diff; true
+-
+-patch-clean:
+-      rm -rf ${LINVER} ${LINVER}.orig;
+-      rm -f ${LINVER}.diff
+-      
+-.PHONY : all tidy clean install uninstall patch patch-clean
++clean:
++      rm -f core *.o *.a *.s
++
++shfs.o: $(shfs-objs)
++
diff --git a/package/shfs/patches/101-kmod_build.patch b/package/shfs/patches/101-kmod_build.patch
deleted file mode 100644 (file)
index 1170103..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
---- shfs-0.35-orig/shfs/Linux-2.4/Makefile     2004-06-01 15:16:19.000000000 +0200
-+++ shfs-0.35-2/shfs/Linux-2.4/Makefile        2005-04-09 02:34:35.000000000 +0200
-@@ -1,3 +1,13 @@
-+#
-+# the original Makefile was trashed and replaced by this one
-+# The main reason is that loadable modules should be built with
-+# the same compile flags the kernel was built with, so we'd better
-+# let the kernel tree build the module for us, like that :
-+#
-+#   make -C $(KERNEL_DIR) SUBDIRS="$(shell pwd)" modules
-+#   make -C $(KERNEL_DIR) SUBDIRS="$(shell pwd)" modules_install
-+#
-+
- ifndef KERNEL
- KERNEL=$(shell uname -r)
- endif
-@@ -10,67 +24,29 @@
- KERNEL_SOURCES=${MODULESDIR}/build
- endif
--ifeq (${MODVERSIONS},detect)
--  ifeq ($(shell test -e ${KERNEL_SOURCES}/include/linux/modversions.h; echo $$?),0)
--    MODVERSIONS=yes
--  endif
--endif
--
--ifeq (${MODVERSIONS},yes)
--MVER=-DMODVERSIONS -DEXPORT_SYMTAB
--endif
--
--LINVER=linux-${KERNEL}
--
--ALL_TARGETS := shfs.o
--
--SEARCHDIRS := -I- -I. -I${KERNEL_SOURCES}/include #-I/usr/src/linux/include/
-+all: all-y
--CC     := gcc
--CFLAGS  = -O2 -fomit-frame-pointer -fno-strict-aliasing -pipe -Wall ${SEARCHDIRS} -DMODULE ${MVER} -D__KERNEL__ -DLINUX
--LINKER    := ld
--LDFLAGS    = -r
--LOADLIBES := 
-+O_TARGET := shfs.o
--all: ${ALL_TARGETS}
-+shfs-objs := dcache.o dir.o fcache.o file.o inode.o ioctl.o proc.o shell.o symlink.o
--%.o: %.c $(wildcard *.h)
--      ${CC} ${CFLAGS} -c $< -o $@
-+obj-y := $(shfs-objs) 
-+obj-m := $(O_TARGET)
--shfs.o: dcache.o dir.o fcache.o file.o inode.o ioctl.o proc.o shell.o symlink.o
--      ${LINKER} ${LDFLAGS} -o $@ ${filter-out %.a %.so, $^} ${LOADLIBES}
--
--tidy:
--      ${RM} core dcache.o dir.o fcache.o file.o inode.o ioctl.o proc.o shell.o symlink.o
--
--clean: tidy patch-clean
--      ${RM} shfs.o
-+-include $(TOPDIR)/Rules.make
-+all-y:
-+      make -C ${KERNEL_SOURCES} TOPDIR="${KERNEL_SOURCES}" SUBDIRS="$(shell pwd)" modules
-+      
- install: shfs.o
-       rm -f ${MODULESDIR}/kernel/fs/shfs/shfs.o
-       install -m644 -b -D shfs.o ${MODULESDIR}/kernel/fs/shfs/shfs.o
--      if [ -x /sbin/depmod -a "${ROOT}" = "/" ]; then /sbin/depmod -aq; fi
- uninstall:
-       rm -rf ${MODULESDIR}/kernel/fs/shfs
--      if [ -x /sbin/depmod -a "${ROOT}" = "/" ]; then /sbin/depmod -aq; fi
--patch:
--      rm -rf ${LINVER} ${LINVER}.orig; mkdir ${LINVER};
--      for i in Documentation fs/shfs include/linux; do \
--        mkdir -p ${LINVER}/$$i; \
--      done
--      cp ${KERNEL_SOURCES}/Documentation/Configure.help ${LINVER}/Documentation
--      cp ${KERNEL_SOURCES}/fs/{Makefile,Config.in} ${LINVER}/fs
--      cp -r ${LINVER} ${LINVER}.orig
--      cp ../../Changelog *.c shfs_debug.h proc.h ${LINVER}/fs/shfs/
--      cp shfs.h shfs_fs* ${LINVER}/include/linux/
--      (cd ${LINVER}; patch -p1 <../kernel-config.diff)
--      find . -type f -name "*.orig" -print | xargs rm -f
--      diff -urN ${LINVER}.orig ${LINVER} >${LINVER}.diff; true
--
--patch-clean:
--      rm -rf ${LINVER} ${LINVER}.orig;
--      rm -f ${LINVER}.diff
--      
--.PHONY : all tidy clean install uninstall patch patch-clean
-+clean:
-+      rm -f core *.o *.a *.s
-+
-+shfs.o: $(shfs-objs)
-+
diff --git a/package/shfs/patches/101-shfs_0.35_2.6.18_dentry.patch b/package/shfs/patches/101-shfs_0.35_2.6.18_dentry.patch
new file mode 100644 (file)
index 0000000..25c3dc6
--- /dev/null
@@ -0,0 +1,156 @@
+--- shfs-0.35.orig/shfs/Linux-2.6/inode.c
++++ shfs-0.35/shfs/Linux-2.6/inode.c
+@@ -341,12 +341,21 @@ out:
+       return -EINVAL;
+ }
++#ifdef NEW_VFS_DENTRY_API
++static int
++shfs_get_sb(struct file_system_type *fs_type,
++          int flags, const char *dev_name, void *data, struct vfsmount *mnt)
++{
++      return get_sb_nodev(fs_type, flags, data, shfs_read_super, mnt);
++}
++#else
+ static struct super_block *
+ shfs_get_sb(struct file_system_type *fs_type,
+           int flags, const char *dev_name, void *data)
+ {
+       return get_sb_nodev(fs_type, flags, data, shfs_read_super);
+ }
++#endif
+ static struct file_system_type sh_fs_type = {
+       .owner          = THIS_MODULE,
+--- shfs-0.35.orig/shfs/Linux-2.6/file.c
++++ shfs-0.35/shfs/Linux-2.6/file.c
+@@ -199,7 +199,7 @@ shfs_file_open(struct inode *inode, stru
+ }
+ static int
+-shfs_file_flush(struct file *f)
++do_file_flush(struct file *f)
+ {
+       struct dentry *dentry = f->f_dentry;
+       struct shfs_sb_info *info = info_from_dentry(dentry);
+@@ -222,6 +222,16 @@ shfs_file_flush(struct file *f)
+ }
+ static int
++#ifdef FLUSH_HAS_LOCK_OWNER
++shfs_file_flush(struct file *f, fl_owner_t id)
++#else
++shfs_file_flush(struct file *f)
++#endif
++{
++      return do_file_flush(f);
++}
++
++static int
+ shfs_file_release(struct inode *inode, struct file *f)
+ {
+       struct dentry *dentry = f->f_dentry;
+@@ -311,7 +321,7 @@ shfs_slow_write(struct file *f, const ch
+       DEBUG("\n");
+       written = generic_file_write(f, buf, count, offset);
+       if (written > 0) {
+-              result = shfs_file_flush(f);
++              result = do_file_flush(f);
+               written = result < 0 ? result: written;
+       }
+       
+Index: shfs-0.35/shfs/Linux-2.6/proc.c
+===================================================================
+--- shfs-0.35.orig/shfs/Linux-2.6/proc.c
++++ shfs-0.35/shfs/Linux-2.6/proc.c
+@@ -570,6 +570,16 @@ error:
+       return result;
+ }
++#ifdef NEW_VFS_DENTRY_API
++int
++shfs_statfs(struct dentry *dentry, struct kstatfs *attr)
++{
++      struct shfs_sb_info *info = info_from_sb(dentry->d_sb);
++
++      DEBUG("\n");
++      return info->fops.statfs(info, attr);
++}
++#else
+ int
+ shfs_statfs(struct super_block *sb, struct kstatfs *attr)
+ {
+@@ -578,4 +588,5 @@ shfs_statfs(struct super_block *sb, stru
+       DEBUG("\n");
+       return info->fops.statfs(info, attr);
+ }
++#endif
+--- shfs-0.35.orig/shfs/Linux-2.6/shfs_fs.h
++++ shfs-0.35/shfs/Linux-2.6/shfs_fs.h
+@@ -9,6 +9,12 @@
+ #include <linux/ioctl.h>
+ #include <linux/pagemap.h>
++#include <linux/version.h>
++
++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17)
++#define NEW_VFS_DENTRY_API
++#define FLUSH_HAS_LOCK_OWNER
++#endif
+ #define SHFS_MAX_AGE(info)    (((info)->ttl * HZ) / 1000)
+ #define SOCKBUF_SIZE          (SHFS_PATH_MAX * 10)
+@@ -100,7 +106,12 @@ int reply(char *s);
+ void set_garbage(struct shfs_sb_info *info, int write, int count);
+ int get_name(struct dentry *d, char *name);
+ int shfs_notify_change(struct dentry *dentry, struct iattr *attr);
++
++#ifdef NEW_VFS_DENTRY_API
++int shfs_statfs(struct dentry *dentry, struct kstatfs *attr);
++#else
+ int shfs_statfs(struct super_block *sb, struct kstatfs *attr);
++#endif
+       
+ /* shfs/inode.c */
+ void shfs_set_inode_attr(struct inode *inode, struct shfs_fattr *fattr);
+--- shfs-0.35.orig/shfs/Linux-2.6/symlink.c
++++ shfs-0.35/shfs/Linux-2.6/symlink.c
+@@ -41,7 +41,7 @@ error:
+       return result;
+ }
+-static int
++static void *
+ shfs_follow_link(struct dentry *dentry, struct nameidata *nd)
+ {
+       struct shfs_sb_info *info = info_from_dentry(dentry);
+@@ -61,7 +61,7 @@ shfs_follow_link(struct dentry *dentry, 
+       DEBUG("%s\n", real_name);
+       result = vfs_follow_link(nd, real_name);
+ error:
+-      return result;
++      return NULL;
+ }
+ struct inode_operations shfs_symlink_inode_operations = {
+--- shfs-0.35.orig/shfs/Linux-2.6/dcache.c     2004-06-01 15:16:19.000000000 +0200
++++ shfs-0.35/shfs/Linux-2.6/dcache.c  2006-02-17 17:36:02.000000000 +0100
+@@ -68,7 +68,7 @@
+       spin_lock(&dcache_lock);
+       next = parent->d_subdirs.next;
+       while (next != &parent->d_subdirs) {
+-              dentry = list_entry(next, struct dentry, d_child);
++              dentry = list_entry(next, struct dentry, d_u.d_child);
+               dentry->d_fsdata = NULL;
+               shfs_age_dentry(info, dentry);
+               next = next->next;
+@@ -101,7 +101,7 @@
+       spin_lock(&dcache_lock);
+       next = parent->d_subdirs.next;
+       while (next != &parent->d_subdirs) {
+-              dent = list_entry(next, struct dentry, d_child);
++              dent = list_entry(next, struct dentry, d_u.d_child);
+               if ((unsigned long)dent->d_fsdata == fpos) {
+                       if (dent->d_inode)
+                               dget_locked(dent);
diff --git a/package/shfs/patches/102-gcc4_fix.patch b/package/shfs/patches/102-gcc4_fix.patch
deleted file mode 100644 (file)
index c4fd366..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-diff -ur shfs-0.35/shfs/Linux-2.6/dir.c shfs-0.35-new/shfs/Linux-2.6/dir.c
---- shfs-0.35/shfs/Linux-2.6/dir.c     2004-06-01 09:16:19.000000000 -0400
-+++ shfs-0.35-new/shfs/Linux-2.6/dir.c 2005-02-11 18:12:00.000000000 -0500
-@@ -19,6 +19,8 @@
- #include "shfs_debug.h"
- #include "proc.h"
-+static struct dentry_operations shfs_dentry_operations;
-+      
- static int
- shfs_dir_open(struct inode *inode, struct file *filp)
- {
-diff -ur shfs-0.35/shfs/Linux-2.6/shfs_fs.h shfs-0.35-new/shfs/Linux-2.6/shfs_fs.h
---- shfs-0.35/shfs/Linux-2.6/shfs_fs.h 2004-06-01 09:16:19.000000000 -0400
-+++ shfs-0.35-new/shfs/Linux-2.6/shfs_fs.h     2005-02-11 18:12:03.000000000 -0500
-@@ -50,7 +50,6 @@
- #define ROUND_TO_MINS(x) do { (x).tv_sec = ((x).tv_sec / 60) * 60; (x).tv_nsec = 0; } while (0)
- /* shfs/dir.c */
--extern struct dentry_operations shfs_dentry_operations;
- extern struct file_operations shfs_dir_operations;
- extern struct inode_operations shfs_dir_inode_operations;
- extern void shfs_new_dentry(struct dentry *dentry);
diff --git a/package/shfs/patches/102-shfs_0.35_clean_inode_clear.patch b/package/shfs/patches/102-shfs_0.35_clean_inode_clear.patch
new file mode 100644 (file)
index 0000000..6ca6ec0
--- /dev/null
@@ -0,0 +1,20 @@
+--- shfs-0.35.orig/shfs/Linux-2.6/inode.c.orig 2006-01-04 16:23:11.000000000 -0600
++++ shfs-0.35/shfs/Linux-2.6/inode.c   2006-01-04 16:24:45.000000000 -0600
+@@ -8,6 +8,7 @@
+ #include <linux/modversions.h>
+ #endif
++#include <linux/version.h>
+ #include <linux/kernel.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+@@ -118,6 +119,9 @@
+       }
+       KMEM_FREE("inode", inode_cache, i);
+ out:
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13))
++   truncate_inode_pages(&inode->i_data, 0);
++#endif
+       clear_inode(inode);
+ }
diff --git a/package/shfs/patches/103-dentry.patch b/package/shfs/patches/103-dentry.patch
deleted file mode 100644 (file)
index 83a406a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -urN shfs-0.35.orig/shfs/Linux-2.6/dcache.c shfs-0.35/shfs/Linux-2.6/dcache.c
---- shfs-0.35.orig/shfs/Linux-2.6/dcache.c     2004-06-01 09:16:19.000000000 -0400
-+++ shfs-0.35/shfs/Linux-2.6/dcache.c  2006-03-25 07:08:57.950752296 -0500
-@@ -68,7 +68,7 @@
-       spin_lock(&dcache_lock);
-       next = parent->d_subdirs.next;
-       while (next != &parent->d_subdirs) {
--              dentry = list_entry(next, struct dentry, d_child);
-+              dentry = list_entry(next, struct dentry, d_u.d_child);
-               dentry->d_fsdata = NULL;
-               shfs_age_dentry(info, dentry);
-               next = next->next;
-@@ -101,7 +101,7 @@
-       spin_lock(&dcache_lock);
-       next = parent->d_subdirs.next;
-       while (next != &parent->d_subdirs) {
--              dent = list_entry(next, struct dentry, d_child);
-+              dent = list_entry(next, struct dentry, d_u.d_child);
-               if ((unsigned long)dent->d_fsdata == fpos) {
-                       if (dent->d_inode)
-                               dget_locked(dent);
diff --git a/package/shfs/patches/103-shfs_0.35_gcc4.patch b/package/shfs/patches/103-shfs_0.35_gcc4.patch
new file mode 100644 (file)
index 0000000..846dcb0
--- /dev/null
@@ -0,0 +1,21 @@
+--- shfs-0.35/shfs/Linux-2.6/dir.c     2004-06-01 09:16:19.000000000 -0400
++++ shfs-0.35-new/shfs/Linux-2.6/dir.c 2005-02-11 18:12:00.000000000 -0500
+@@ -19,6 +19,8 @@
+ #include "shfs_debug.h"
+ #include "proc.h"
++static struct dentry_operations shfs_dentry_operations;
++      
+ static int
+ shfs_dir_open(struct inode *inode, struct file *filp)
+ {
+--- shfs-0.35/shfs/Linux-2.6/shfs_fs.h 2004-06-01 09:16:19.000000000 -0400
++++ shfs-0.35-new/shfs/Linux-2.6/shfs_fs.h     2005-02-11 18:12:03.000000000 -0500
+@@ -50,7 +50,6 @@
+ #define ROUND_TO_MINS(x) do { (x).tv_sec = ((x).tv_sec / 60) * 60; (x).tv_nsec = 0; } while (0)
+ /* shfs/dir.c */
+-extern struct dentry_operations shfs_dentry_operations;
+ extern struct file_operations shfs_dir_operations;
+ extern struct inode_operations shfs_dir_inode_operations;
+ extern void shfs_new_dentry(struct dentry *dentry);
diff --git a/package/shfs/patches/104-linux_2.6.19.patch b/package/shfs/patches/104-linux_2.6.19.patch
deleted file mode 100644 (file)
index 5776fbc..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-diff -urN shfs-0.35/shfs/Linux-2.6/dir.c shfs-0.35.new/shfs/Linux-2.6/dir.c
---- shfs-0.35/shfs/Linux-2.6/dir.c     2007-01-11 14:59:49.000000000 +0100
-+++ shfs-0.35.new/shfs/Linux-2.6/dir.c 2007-01-11 14:55:21.000000000 +0100
-@@ -302,8 +302,8 @@
-       
-       shfs_invalid_dir_cache(dir);
-       result = shfs_instantiate(dentry);
--      if (forced_write && dentry->d_inode && dentry->d_inode->u.generic_ip)
--              ((struct shfs_inode_info *)dentry->d_inode->u.generic_ip)->unset_write_on_close = 1;
-+      if (forced_write && dentry->d_inode && dentry->d_inode->i_private)
-+              ((struct shfs_inode_info *)dentry->d_inode->i_private)->unset_write_on_close = 1;
-       return result;
- }
-diff -urN shfs-0.35/shfs/Linux-2.6/fcache.c shfs-0.35.new/shfs/Linux-2.6/fcache.c
---- shfs-0.35/shfs/Linux-2.6/fcache.c  2004-06-01 15:16:19.000000000 +0200
-+++ shfs-0.35.new/shfs/Linux-2.6/fcache.c      2007-01-11 14:55:21.000000000 +0100
-@@ -100,7 +100,7 @@
-               VERBOSE("dir in file cache?\n");
-               return -EINVAL;
-       }
--      p = (struct shfs_inode_info *)inode->u.generic_ip;
-+      p = (struct shfs_inode_info *)inode->i_private;
-       if (!p) {
-               VERBOSE("inode without info\n");
-               return -EINVAL;
-@@ -127,7 +127,7 @@
-               VERBOSE("dir in file cache?\n");
-               return -EINVAL;
-       }
--      p = (struct shfs_inode_info *)inode->u.generic_ip;
-+      p = (struct shfs_inode_info *)inode->i_private;
-       if (!p) {
-               VERBOSE("inode without info\n");
-               return -EINVAL;
-@@ -160,7 +160,7 @@
-       if (result == 0) {
-               struct shfs_inode_info *p;
--              p = (struct shfs_inode_info *)f->f_dentry->d_inode->u.generic_ip;
-+              p = (struct shfs_inode_info *)f->f_dentry->d_inode->i_private;
-               if (!p) {
-                       VERBOSE("inode without info\n");
-                       return -EINVAL;
-@@ -184,7 +184,7 @@
-               return -EINVAL;
-       }
-       DEBUG("ino: %lu\n", inode->i_ino);
--      p = (struct shfs_inode_info *)inode->u.generic_ip;
-+      p = (struct shfs_inode_info *)inode->i_private;
-       if (!p) {
-               VERBOSE("inode without info\n");
-               return -EINVAL;
-@@ -226,7 +226,7 @@
-               VERBOSE("dir in file cache?\n");
-               return -EINVAL;
-       }
--      p = (struct shfs_inode_info *)inode->u.generic_ip;
-+      p = (struct shfs_inode_info *)inode->i_private;
-       if (!p) {
-               VERBOSE("inode without info\n");
-               return -EINVAL;
-@@ -327,7 +327,7 @@
-               VERBOSE("dir in file cache?\n");
-               return -EINVAL;
-       }
--      p = (struct shfs_inode_info *)inode->u.generic_ip;
-+      p = (struct shfs_inode_info *)inode->i_private;
-       if (!p) {
-               VERBOSE("inode without info\n");
-               return -EINVAL;
-diff -urN shfs-0.35/shfs/Linux-2.6/file.c shfs-0.35.new/shfs/Linux-2.6/file.c
---- shfs-0.35/shfs/Linux-2.6/file.c    2004-06-01 15:16:19.000000000 +0200
-+++ shfs-0.35.new/shfs/Linux-2.6/file.c        2007-01-11 14:55:21.000000000 +0100
-@@ -9,6 +9,7 @@
- #include <asm/fcntl.h>
- #include <linux/smp_lock.h>
- #include <linux/stat.h>
-+#include <linux/fs.h>
- #include "shfs_fs.h"
- #include "shfs_fs_sb.h"
-@@ -90,7 +91,7 @@
-       struct dentry *dentry = f->f_dentry;
-       struct shfs_sb_info *info = info_from_dentry(dentry);
-       struct inode *inode = p->mapping->host;
--      struct shfs_inode_info *i = (struct shfs_inode_info *)inode->u.generic_ip;
-+      struct shfs_inode_info *i = (struct shfs_inode_info *)inode->i_private;
-       char *buffer = kmap(p) + offset;
-       int written = 0, result;
-       unsigned count = to - offset;
-@@ -242,8 +243,8 @@
-               }
-       }
-       /* if file was forced to be writeable, change attrs back on close */
--      if (dentry->d_inode && dentry->d_inode->u.generic_ip) {
--              if  (((struct shfs_inode_info *)dentry->d_inode->u.generic_ip)->unset_write_on_close) {
-+      if (dentry->d_inode && dentry->d_inode->i_private) {
-+              if  (((struct shfs_inode_info *)dentry->d_inode->i_private)->unset_write_on_close) {
-                       char name[SHFS_PATH_MAX];
-                       if (get_name(dentry, name) < 0)
-@@ -320,8 +321,8 @@
- struct file_operations shfs_file_operations = {
-       .llseek         = generic_file_llseek,
--      .read           = generic_file_read,
--      .write          = generic_file_write,
-+      .read           = generic_file_aio_read,
-+      .write          = generic_file_aio_write,
-       .ioctl          = shfs_ioctl,
-       .mmap           = generic_file_mmap,
-       .open           = shfs_file_open,
-diff -urN shfs-0.35/shfs/Linux-2.6/inode.c shfs-0.35.new/shfs/Linux-2.6/inode.c
---- shfs-0.35/shfs/Linux-2.6/inode.c   2004-06-01 15:16:19.000000000 +0200
-+++ shfs-0.35.new/shfs/Linux-2.6/inode.c       2007-01-11 14:55:21.000000000 +0100
-@@ -35,7 +35,7 @@
- shfs_set_inode_attr(struct inode *inode, struct shfs_fattr *fattr)
- {
-       struct shfs_sb_info *info = info_from_inode(inode);
--      struct shfs_inode_info *i = inode->u.generic_ip;
-+      struct shfs_inode_info *i = inode->i_private;
-       struct timespec last_time = inode->i_mtime;
-       loff_t last_size = inode->i_size;
-@@ -52,7 +52,6 @@
-       inode->i_ctime  = fattr->f_ctime;
-       inode->i_atime  = fattr->f_atime;
-       inode->i_mtime  = fattr->f_mtime;
--      inode->i_blksize= fattr->f_blksize;
-       inode->i_blocks = fattr->f_blocks;
-       inode->i_size   = fattr->f_size;
-@@ -75,7 +74,7 @@
-       if (!inode)
-               return NULL;
-       inode->i_ino = fattr->f_ino;
--      i = inode->u.generic_ip = (struct shfs_inode_info *)KMEM_ALLOC("inode", inode_cache, GFP_KERNEL);
-+      i = inode->i_private = (struct shfs_inode_info *)KMEM_ALLOC("inode", inode_cache, GFP_KERNEL);
-       if (!i)
-               return NULL;
-       i->cache = NULL;
-@@ -107,7 +106,7 @@
-       struct shfs_inode_info *i;
-       DEBUG("ino: %lu\n", inode->i_ino);
--      i = (struct shfs_inode_info *)inode->u.generic_ip;
-+      i = (struct shfs_inode_info *)inode->i_private;
-       if (!i) {
-               VERBOSE("invalid inode\n");
-               goto out;
-@@ -172,7 +171,7 @@
- {
-       struct shfs_sb_info *info = info_from_dentry(dentry);
-       struct inode *inode = dentry->d_inode;
--      struct shfs_inode_info *i = (struct shfs_inode_info *)inode->u.generic_ip;
-+      struct shfs_inode_info *i = (struct shfs_inode_info *)inode->i_private;
-       int result;
-         DEBUG("%s\n", dentry->d_name.name);
-@@ -339,9 +338,9 @@
- static struct super_block *
- shfs_get_sb(struct file_system_type *fs_type,
--          int flags, const char *dev_name, void *data)
-+          int flags, const char *dev_name, void *data, struct vfsmount *mnt)
- {
--      return get_sb_nodev(fs_type, flags, data, shfs_read_super);
-+      return get_sb_nodev(fs_type, flags, data, shfs_read_super, mnt);
- }
- static struct file_system_type sh_fs_type = {
-diff -urN shfs-0.35/shfs/Linux-2.6/proc.c shfs-0.35.new/shfs/Linux-2.6/proc.c
---- shfs-0.35/shfs/Linux-2.6/proc.c    2004-06-01 15:16:19.000000000 +0200
-+++ shfs-0.35.new/shfs/Linux-2.6/proc.c        2007-01-11 14:55:21.000000000 +0100
-@@ -178,7 +178,7 @@
-               vec[0].iov_base = (void *)buffer;
-               vec[0].iov_len = c;
--              result = f->f_op->writev(f, (const struct iovec *) &vec, 1, &f->f_pos);
-+              result = f->f_op->aio_write(f, (const struct iovec *) &vec, 1, &f->f_pos);
-               if (result < 0) {
-                       DEBUG("error: %d\n", result);
-                       if (result == -EAGAIN)
-@@ -261,7 +261,7 @@
-               vec[0].iov_base = buffer;
-               vec[0].iov_len = c;
--              result = f->f_op->readv(f, (const struct iovec *)&vec, 1, &f->f_pos);
-+              result = f->f_op->aio_read(f, (const struct iovec *)&vec, 1, &f->f_pos);
-               if (!result) {
-                       /*  peer has closed socket */
-                       result = -EIO;
-@@ -350,7 +350,7 @@
-               vec[0].iov_base = BUFFER+LEN;
-               vec[0].iov_len = c;
--              result = f->f_op->readv(f, (const struct iovec *)&vec, 1, &f->f_pos);
-+              result = f->f_op->aio_read(f, (const struct iovec *)&vec, 1, &f->f_pos);
-               SIGLOCK(flags);
-               if (result == -EPIPE && !sigpipe) {
-                       sigdelset(&current->pending.signal, SIGPIPE);
diff --git a/package/shfs/patches/104-shfs_0.35_inode_and_fs.patch b/package/shfs/patches/104-shfs_0.35_inode_and_fs.patch
new file mode 100644 (file)
index 0000000..f7857bf
--- /dev/null
@@ -0,0 +1,367 @@
+--- shfs-0.35.orig/shfs/Linux-2.6/fcache.c     2007-01-03 22:29:26.000000000 -0600
++++ shfs-0.35/shfs/Linux-2.6/fcache.c  2007-01-03 22:34:21.000000000 -0600
+@@ -100,7 +100,11 @@
+               VERBOSE("dir in file cache?\n");
+               return -EINVAL;
+       }
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      p = (struct shfs_inode_info *)inode->i_private;
++#else
+       p = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+       if (!p) {
+               VERBOSE("inode without info\n");
+               return -EINVAL;
+@@ -127,7 +131,11 @@
+               VERBOSE("dir in file cache?\n");
+               return -EINVAL;
+       }
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      p = (struct shfs_inode_info *)inode->i_private;
++#else
+       p = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+       if (!p) {
+               VERBOSE("inode without info\n");
+               return -EINVAL;
+@@ -160,7 +168,11 @@
+       if (result == 0) {
+               struct shfs_inode_info *p;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++              p = (struct shfs_inode_info *)f->f_dentry->d_inode->i_private;
++#else
+               p = (struct shfs_inode_info *)f->f_dentry->d_inode->u.generic_ip;
++#endif
+               if (!p) {
+                       VERBOSE("inode without info\n");
+                       return -EINVAL;
+@@ -184,7 +196,11 @@
+               return -EINVAL;
+       }
+       DEBUG("ino: %lu\n", inode->i_ino);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      p = (struct shfs_inode_info *)inode->i_private;
++#else
+       p = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+       if (!p) {
+               VERBOSE("inode without info\n");
+               return -EINVAL;
+@@ -226,7 +242,11 @@
+               VERBOSE("dir in file cache?\n");
+               return -EINVAL;
+       }
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      p = (struct shfs_inode_info *)inode->i_private;
++#else
+       p = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+       if (!p) {
+               VERBOSE("inode without info\n");
+               return -EINVAL;
+@@ -327,7 +347,11 @@
+               VERBOSE("dir in file cache?\n");
+               return -EINVAL;
+       }
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      p = (struct shfs_inode_info *)inode->i_private;
++#else
+       p = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+       if (!p) {
+               VERBOSE("inode without info\n");
+               return -EINVAL;
+--- shfs-0.35.orig/shfs/Linux-2.6/inode.c      2004-06-01 08:16:19.000000000 -0500
++++ shfs-0.35/shfs/Linux-2.6/inode.c   2007-01-03 22:39:44.000000000 -0600
+@@ -35,7 +36,11 @@
+ shfs_set_inode_attr(struct inode *inode, struct shfs_fattr *fattr)
+ {
+       struct shfs_sb_info *info = info_from_inode(inode);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      struct shfs_inode_info *i = inode->i_private;
++#else
+       struct shfs_inode_info *i = inode->u.generic_ip;
++#endif
+       struct timespec last_time = inode->i_mtime;
+       loff_t last_size = inode->i_size;
+@@ -52,7 +57,9 @@
+       inode->i_ctime  = fattr->f_ctime;
+       inode->i_atime  = fattr->f_atime;
+       inode->i_mtime  = fattr->f_mtime;
++#ifdef STRUCT_INODE_HAS_I_BLKSIZE
+       inode->i_blksize= fattr->f_blksize;
++#endif
+       inode->i_blocks = fattr->f_blocks;
+       inode->i_size   = fattr->f_size;
+@@ -75,7 +82,11 @@
+       if (!inode)
+               return NULL;
+       inode->i_ino = fattr->f_ino;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      i = inode->i_private = (struct shfs_inode_info *)KMEM_ALLOC("inode", inode_cache, GFP_KERNEL);
++#else
+       i = inode->u.generic_ip = (struct shfs_inode_info *)KMEM_ALLOC("inode", inode_cache, GFP_KERNEL);
++#endif
+       if (!i)
+               return NULL;
+       i->cache = NULL;
+@@ -107,7 +118,11 @@
+       struct shfs_inode_info *i;
+       DEBUG("ino: %lu\n", inode->i_ino);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      i = (struct shfs_inode_info *)inode->i_private;
++#else
+       i = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+       if (!i) {
+               VERBOSE("invalid inode\n");
+               goto out;
+@@ -172,7 +190,11 @@
+ {
+       struct shfs_sb_info *info = info_from_dentry(dentry);
+       struct inode *inode = dentry->d_inode;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      struct shfs_inode_info *i = (struct shfs_inode_info *)inode->i_private;
++#else
+       struct shfs_inode_info *i = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+       int result;
+         DEBUG("%s\n", dentry->d_name.name);
+--- shfs-0.35.orig/shfs/Linux-2.6/dir.c        2007-01-03 22:38:23.000000000 -0600
++++ shfs-0.35/shfs/Linux-2.6/dir.c     2007-01-03 22:39:06.000000000 -0600
+@@ -302,8 +302,13 @@
+       
+       shfs_invalid_dir_cache(dir);
+       result = shfs_instantiate(dentry);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      if (forced_write && dentry->d_inode && dentry->d_inode->i_private)
++              ((struct shfs_inode_info *)dentry->d_inode->i_private)->unset_write_on_close = 1;
++#else
+       if (forced_write && dentry->d_inode && dentry->d_inode->u.generic_ip)
+               ((struct shfs_inode_info *)dentry->d_inode->u.generic_ip)->unset_write_on_close = 1;
++#endif
+       return result;
+ }
+--- shfs-0.35.orig/shfs/Linux-2.6/file.c       2007-01-03 22:40:24.000000000 -0600
++++ shfs-0.35/shfs/Linux-2.6/file.c    2007-01-03 22:45:11.000000000 -0600
+@@ -90,7 +90,11 @@
+       struct dentry *dentry = f->f_dentry;
+       struct shfs_sb_info *info = info_from_dentry(dentry);
+       struct inode *inode = p->mapping->host;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      struct shfs_inode_info *i = (struct shfs_inode_info *)inode->i_private;
++#else
+       struct shfs_inode_info *i = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+       char *buffer = kmap(p) + offset;
+       int written = 0, result;
+       unsigned count = to - offset;
+@@ -252,8 +256,13 @@
+               }
+       }
+       /* if file was forced to be writeable, change attrs back on close */
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      if (dentry->d_inode && dentry->d_inode->i_private) {
++              if  (((struct shfs_inode_info *)dentry->d_inode->i_private)->unset_write_on_close) {
++#else
+       if (dentry->d_inode && dentry->d_inode->u.generic_ip) {
+               if  (((struct shfs_inode_info *)dentry->d_inode->u.generic_ip)->unset_write_on_close) {
++#endif
+                       char name[SHFS_PATH_MAX];
+                       if (get_name(dentry, name) < 0)
+@@ -302,7 +311,8 @@
+               goto error;
+       }
+       if (result != 0) {
+-              copy_to_user(buf, (char *)page, result);
++              if (copy_to_user(buf, (char *)page, result))
++                      goto error;
+               *ppos += result;
+       }
+ error:
+@@ -315,11 +325,15 @@
+ static ssize_t 
+ shfs_slow_write(struct file *f, const char *buf, size_t count, loff_t *offset)
+ {
+-      int written = 0;
++      ssize_t written = 0;
+       int result;
+       
+       DEBUG("\n");
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      written = do_sync_write(f, buf, count, offset);
++#else
+       written = generic_file_write(f, buf, count, offset);
++#endif
+       if (written > 0) {
+               result = do_file_flush(f);
+               written = result < 0 ? result: written;
+@@ -330,14 +344,23 @@
+ struct file_operations shfs_file_operations = {
+       .llseek         = generic_file_llseek,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      .read           = do_sync_read,
++      .write          = do_sync_write,
++#else
+       .read           = generic_file_read,
+       .write          = generic_file_write,
++#endif
+       .ioctl          = shfs_ioctl,
+       .mmap           = generic_file_mmap,
+       .open           = shfs_file_open,
+       .flush          = shfs_file_flush,
+       .release        = shfs_file_release,
+       .fsync          = shfs_file_sync,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      .aio_read       = generic_file_aio_read,
++      .aio_write      = generic_file_aio_write,
++#endif
+ };
+ struct file_operations shfs_slow_operations = {
+--- shfs-0.35.orig/shfs/Linux-2.6/proc.c       2007-01-03 22:45:32.000000000 -0600
++++ shfs-0.35/shfs/Linux-2.6/proc.c    2007-01-03 22:57:17.000000000 -0600
+@@ -149,7 +149,12 @@
+ {
+       struct file *f = info->sock;
+       mm_segment_t fs;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      ssize_t result = 0;
++      loff_t begin;
++#else
+       int c, result = 0;
++#endif
+       unsigned long flags, sigpipe;
+       sigset_t old_set;
+@@ -161,7 +166,9 @@
+                       return result;
+       }
+       
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
+       c = count;
++#endif
+       fs = get_fs();
+       set_fs(get_ds());
+@@ -173,6 +180,16 @@
+       SIGRECALC;
+       SIGUNLOCK(flags);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      begin = f->f_pos;
++      result = do_sync_write(f, buffer, count, &f->f_pos);
++
++      if (result < 0) {
++              DEBUG("error: %d\n", result);
++              fput(f);
++              info->sock = NULL;
++      }
++#else
+       do {
+               struct iovec vec[1];
+@@ -190,6 +207,7 @@
+               buffer += result;
+               c -= result;
+       } while (c > 0);
++#endif
+       SIGLOCK(flags);
+       if (result == -EPIPE && !sigpipe) {
+@@ -204,7 +222,11 @@
+       DEBUG(">%d\n", result);
+       if (result < 0)
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++              set_garbage(info, 1, count - (f->f_pos - begin));
++#else
+               set_garbage(info, 1, c);
++#endif
+       else
+               result = count;
+       return result;
+@@ -222,6 +244,9 @@
+       int c, result = 0;
+       unsigned long flags, sigpipe;
+       sigset_t old_set;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      loff_t begin;
++#endif
+       if (!f)
+               return -EIO;
+@@ -256,6 +281,20 @@
+       fs = get_fs();
+       set_fs(get_ds());
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++      begin = f->f_pos;
++      result = do_sync_read(f, buffer, c, &f->f_pos);
++
++      if (!result) {
++              /* peer has closed socket */
++              result = -EIO;
++      }
++      if (result < 0) {
++              DEBUG("error: %d\n", result);
++              fput(f);
++              info->sock = NULL;
++      }
++#else
+       do {
+               struct iovec vec[1];
+@@ -277,6 +316,7 @@
+               buffer += result;
+               c -= result;
+       } while (c > 0);
++#endif
+       SIGLOCK(flags);
+       if (result == -EPIPE && !sigpipe) {
+@@ -291,7 +331,11 @@
+       
+       DEBUG("<%d\n", result);
+       if (result < 0)
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++              set_garbage(info, 0, count - (f->f_pos - begin));
++#else
+               set_garbage(info, 0, c);
++#endif
+       else
+               result = count;
+       return result;
+@@ -316,8 +360,10 @@
+                       return result;
+       }
+       while (1) {
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
+               struct iovec vec[1];
++#endif
+               nl = memchr(BUFFER, '\n', LEN);
+               if (nl) {
+                       *nl = '\0';
+@@ -348,9 +394,13 @@
+               fs = get_fs();
+               set_fs(get_ds());
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++              result = do_sync_read(f, BUFFER+LEN, c, &f->f_pos);
++#else
+               vec[0].iov_base = BUFFER+LEN;
+               vec[0].iov_len = c;
+               result = f->f_op->readv(f, (const struct iovec *)&vec, 1, &f->f_pos);
++#endif
+               SIGLOCK(flags);
+               if (result == -EPIPE && !sigpipe) {
+                       sigdelset(&current->pending.signal, SIGPIPE);
diff --git a/package/shfs/patches/105-space_chars.patch b/package/shfs/patches/105-space_chars.patch
new file mode 100644 (file)
index 0000000..3a9aede
--- /dev/null
@@ -0,0 +1,66 @@
+--- shfs-0.35.orig/shfs/Linux-2.4/shell.c      31 May 2004 16:32:13 -0000      1.6
++++ shfs-0.35/shfs/Linux-2.4/shell.c   3 Jun 2004 09:09:54 -0000
+@@ -213,6 +213,7 @@
+       int c = 0;
+       int is_space = 1;
+       int device = 0;
++      char *start = s;
+       while (*s) {
+               if (c == DIR_COLS)
+@@ -227,17 +228,20 @@
+                                               s++;
+                               }
+                               *s = '\0';
++                              start = s+1;
+                               is_space = 1;
++                      } else {
++                              if (c != DIR_NAME)
++                                      start = s+1;
+                       }
+               } else {
+                       if (is_space) {
+                               /* (b)lock/(c)haracter device hack */
+-                              col[c++] = s;
++                              col[c++] = start;
+                               is_space = 0;
+                               if ((c-1 == DIR_PERM) && ((*s == 'b')||(*s == 'c'))) {
+                                       device = 1;
+                               }
+-
+                       }
+               }
+               s++;
+--- shfs-0.35.orig/shfs/Linux-2.6/shell.c      31 May 2004 16:32:13 -0000      1.7
++++ shfs-0.35/shfs/Linux-2.6/shell.c   3 Jun 2004 09:09:57 -0000
+@@ -225,6 +225,7 @@
+       int c = 0;
+       int is_space = 1;
+       int device = 0;
++      char *start = s;
+       while (*s) {
+               if (c == DIR_COLS)
+@@ -239,17 +240,20 @@
+                                               s++;
+                               }
+                               *s = '\0';
++                              start = s+1;
+                               is_space = 1;
++                      } else {
++                              if (c != DIR_NAME)
++                                      start = s+1;
+                       }
+               } else {
+                       if (is_space) {
+                               /* (b)lock/(c)haracter device hack */
+-                              col[c++] = s;
++                              col[c++] = start;
+                               is_space = 0;
+                               if ((c-1 == DIR_PERM) && ((*s == 'b')||(*s == 'c'))) {
+                                       device = 1;
+                               }
+-
+                       }
+               }
+               s++;
diff --git a/package/shfs/patches/106-uidgid32.patch b/package/shfs/patches/106-uidgid32.patch
new file mode 100644 (file)
index 0000000..1bd9803
--- /dev/null
@@ -0,0 +1,34 @@
+--- shfs-0.35.orig/shfs/Linux-2.4/shfs_fs_sb.h 24 Mar 2004 13:40:02 -0000      1.2
++++ shfs-0.35/shfs/Linux-2.4/shfs_fs_sb.h      3 Jun 2004 17:12:28 -0000
+@@ -38,10 +38,10 @@
+       struct shfs_fileops fops;
+       int version;
+       int ttl;
+-      __kernel_uid_t uid;
+-      __kernel_gid_t gid;
+-      __kernel_mode_t root_mode;
+-      __kernel_mode_t fmask;
++      uid_t uid;
++      gid_t gid;
++      mode_t root_mode;
++      mode_t fmask;
+       char mount_point[SHFS_PATH_MAX];
+       struct semaphore sock_sem;      /* next 4 vars are guarded */
+       struct file *sock;
+--- shfs-0.35.orig/shfs/Linux-2.6/shfs_fs_sb.h 24 Mar 2004 13:40:02 -0000      1.2
++++ shfs-0.35/shfs/Linux-2.6/shfs_fs_sb.h      3 Jun 2004 17:12:28 -0000
+@@ -38,10 +38,10 @@
+       struct shfs_fileops fops;
+       int version;
+       int ttl;
+-      __kernel_uid_t uid;
+-      __kernel_gid_t gid;
+-      __kernel_mode_t root_mode;
+-      __kernel_mode_t fmask;
++      uid_t uid;
++      gid_t gid;
++      mode_t root_mode;
++      mode_t fmask;
+       char mount_point[SHFS_PATH_MAX];
+       struct semaphore sock_sem;      /* next 4 vars are guarded */
+       struct file *sock;
diff --git a/package/shfs/patches/107-df.patch b/package/shfs/patches/107-df.patch
new file mode 100644 (file)
index 0000000..07eaaf2
--- /dev/null
@@ -0,0 +1,34 @@
+--- shfs-0.35.orig/shfs/Linux-2.4/shell.c      3 Jun 2004 13:20:44 -0000       1.8
++++ shfs-0.35/shfs/Linux-2.4/shell.c   18 Jun 2004 12:19:52 -0000
+@@ -961,11 +961,11 @@
+       s = info->sockbuf;
+       if ((p = strsep(&s, " ")))
+-              attr->f_blocks = simple_strtoull(p, NULL, 10);
++              attr->f_blocks = simple_strtoull(p, NULL, 10) >> 2;
+       if ((p = strsep(&s, " ")))
+-              attr->f_bfree = attr->f_blocks - simple_strtoull(p, NULL, 10);
++              attr->f_bfree = attr->f_blocks - (simple_strtoull(p, NULL, 10) >> 2);
+       if ((p = strsep(&s, " ")))
+-              attr->f_bavail = simple_strtoull(p, NULL, 10);
++              attr->f_bavail = simple_strtoull(p, NULL, 10) >> 2;
+       result = sock_readln(info, info->sockbuf, SOCKBUF_SIZE);
+       if (result < 0)
+--- shfs-0.35.orig/shfs/Linux-2.6/shell.c      3 Jun 2004 13:20:47 -0000       1.9
++++ shfs-0.35/shfs/Linux-2.6/shell.c   18 Jun 2004 12:19:53 -0000
+@@ -974,11 +974,11 @@
+       s = info->sockbuf;
+       if ((p = strsep(&s, " ")))
+-              attr->f_blocks = simple_strtoull(p, NULL, 10);
++              attr->f_blocks = simple_strtoull(p, NULL, 10) >> 2;
+       if ((p = strsep(&s, " ")))
+-              attr->f_bfree = attr->f_blocks - simple_strtoull(p, NULL, 10);
++              attr->f_bfree = attr->f_blocks - (simple_strtoull(p, NULL, 10) >> 2);
+       if ((p = strsep(&s, " ")))
+-              attr->f_bavail = simple_strtoull(p, NULL, 10);
++              attr->f_bavail = simple_strtoull(p, NULL, 10) >> 2;
+       result = sock_readln(info, info->sockbuf, SOCKBUF_SIZE);
+       if (result < 0)
diff --git a/package/shfs/patches/108-no_update_mtab.patch b/package/shfs/patches/108-no_update_mtab.patch
new file mode 100644 (file)
index 0000000..1f519bb
--- /dev/null
@@ -0,0 +1,24 @@
+--- shfs-0.35.orig/shfsmount/shfsmount.c       2004-06-01 14:16:19.000000000 +0100
++++ shfs-0.35/shfsmount/shfsmount.c    2007-03-28 21:23:47.194043034 +0100
+@@ -74,7 +74,7 @@
+ static int have_uid = 0;
+ /* do not update /etc/mtab */
+-static int nomtab = 0;
++static int nomtab = 1;
+ /* preserve owner of files */
+ static int preserve = 0;
+--- shfs-0.35.orig/shfsmount/shfsumount.c      2004-06-01 14:16:19.000000000 +0100
++++ shfs-0.35/shfsmount/shfsumount.c   2007-03-28 21:49:28.937840351 +0100
+@@ -67,10 +67,6 @@
+       FILE *new_mtab;
+       struct mntent *ment;
+-        if ((fd = open(MOUNTED"~", O_RDWR|O_CREAT|O_EXCL, 0600)) == -1) {
+-                fprintf(stderr, "Can't get "MOUNTED"~ lock file");
+-                return 0;
+-        }
+         close(fd);
+         if ((mtab = setmntent(MOUNTED, "r")) == NULL) {
+                 fprintf(stderr, "Can't open " MOUNTED ": %s\n", strerror(errno));