Author: charles                      Date: Tue Jun  9 07:21:02 2009 GMT
Module: packages                      Tag: HEAD
---- Log message:
- refreshed and updated (for kernel >= 2.6.27)

---- Files affected:
packages/submount:
   submount-subfs.patch (1.2 -> 1.3) 

---- Diffs:

================================================================
Index: packages/submount/submount-subfs.patch
diff -u packages/submount/submount-subfs.patch:1.2 
packages/submount/submount-subfs.patch:1.3
--- packages/submount/submount-subfs.patch:1.2  Fri Oct 20 02:31:25 2006
+++ packages/submount/submount-subfs.patch      Tue Jun  9 09:20:57 2009
@@ -1,15 +1,66 @@
---- submount-0.9/subfs-0.9/subfs.c.orig        2004-02-26 23:54:58.000000000 
+0100
-+++ submount-0.9/subfs-0.9/subfs.c     2006-10-19 02:24:11.987932309 +0200
-@@ -25,6 +25,8 @@
+diff -U 3 -H -d -r -N -- submount-0.9~/subfs-0.9/subfs.c 
submount-0.9/subfs-0.9/subfs.c
+--- submount-0.9~/subfs-0.9/subfs.c    2004-02-26 23:54:58.000000000 +0100
++++ submount-0.9/subfs-0.9/subfs.c     2009-06-09 07:45:12.000000000 +0200
+@@ -17,14 +17,26 @@
+ #include <asm/uaccess.h>
+ #include <linux/list.h>
+ #include <linux/mount.h>
+-#include <linux/namespace.h>
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
++ #include <linux/nsproxy.h>
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
++ #include <linux/mnt_namespace.h>
++#else
++ #include <linux/namespace.h>
++#endif
+ #include <linux/namei.h>
+ #include <linux/dcache.h>
+ #include <linux/sysfs.h>
+-#include <asm/semaphore.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
++ #include <linux/semaphore.h>
++#else
++ #include <asm/semaphore.h>
++#endif
  #include <asm/signal.h>
  #include <linux/signal.h>
  #include <linux/sched.h>
-+#include <linux/version.h>
 +#include <linux/rcupdate.h>
  
  #include "subfs.h"
  
-@@ -94,11 +96,19 @@
+@@ -47,7 +59,11 @@
+       /* Get the head of the global mount list from the init process. */
+       /* Is there a better way? */
+       init_fs = init_task.fs;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
++      head = &init_fs->root.mnt->mnt_list;
++#else
+       head = &init_fs->rootmnt->mnt_list;
++#endif
+ 
+       /* Go through the list and look for a superblock pointer match. */
+       list_for_each_safe(entry, lh, head) {
+@@ -72,10 +88,17 @@
+       struct vfsmount *old_pwdmnt;
+ 
+       write_lock(&fs->lock);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
++      old_pwd = fs->pwd.dentry;
++      old_pwdmnt = fs->pwd.mnt;
++      fs->pwd.mnt = mntget(mnt);
++      fs->pwd.dentry = dget(dentry);
++#else
+       old_pwd = fs->pwd;
+       old_pwdmnt = fs->pwdmnt;
+       fs->pwdmnt = mntget(mnt);
+       fs->pwd = dget(dentry);
++#endif
+       write_unlock(&fs->lock);
+ 
+       if (old_pwd) {
+@@ -94,11 +117,19 @@
        struct task_struct *task = current;
        int signal = SIGCONT;
  
@@ -29,7 +80,31 @@
        set_tsk_thread_flag(task, TIF_SIGPENDING);
        return;
  }
-@@ -187,11 +197,11 @@
+@@ -134,14 +165,23 @@
+       char *envp[2] = { "HOME=/", NULL };
+       char *path_buf;
+       int result, len = 0;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
++      struct path p;
++#endif
+ 
+       argv[1] = sfs_mnt->device;
+       path_buf = (char *) __get_free_page(GFP_KERNEL);
+       if (!path_buf)
+               return -ENOMEM;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
++      p.mnt = sfs_mnt->mount;
++      p.dentry = p.mnt->mnt_root;
++      argv[2] = d_path(&p, path_buf, PAGE_SIZE);
++#else
+       argv[2] =
+           d_path(sfs_mnt->mount->mnt_mountpoint,
+                  sfs_mnt->mount->mnt_parent, path_buf, PAGE_SIZE);
++#endif
+       argv[3] = sfs_mnt->req_fs;
+       if (!(argv[4] = kmalloc(17, GFP_KERNEL))) {
+               free_page((unsigned long) path_buf);
+@@ -187,11 +227,11 @@
        if (&sfs_mnt->mount->mnt_mounts == sfs_mnt->mount->mnt_mounts.next) {
                result = mount_real_fs(sfs_mnt);
                if (result) {
@@ -44,32 +119,56 @@
                        return ERR_PTR(-ENOMEDIUM);
                }
                if (&sfs_mnt->mount->mnt_mounts
-@@ -221,6 +231,7 @@
+@@ -221,18 +261,35 @@
        struct vfsmount *child;
  
        /* This is ugly, but prevents a lockup during mount. */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 16)
++      mutex_unlock(&dir->i_mutex);
++#else
        up(&dir->i_sem);
++#endif
        if (down_interruptible(&sfs_mnt->sem)) {
-               down(&dir->i_sem);/*put the dir sem back down if interrupted*/
-@@ -229,6 +240,16 @@
+-              down(&dir->i_sem);/*put the dir sem back down if interrupted*/
++              /*put the dir sem back down if interrupted*/
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++              mutex_lock(&dir->i_mutex);
++#else
++              down(&dir->i_sem);
++#endif
+               return ERR_PTR(-ERESTARTSYS);
+       }
        child = get_child_mount(sfs_mnt);
        up(&sfs_mnt->sem);
-       down(&dir->i_sem);
-+#else
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
 +      mutex_lock(&dir->i_mutex);
-+      if (down_interruptible(&sfs_mnt->sem)) {
-+              mutex_unlock(&dir->i_mutex);
-+              return ERR_PTR(-ERESTARTSYS);
-+      }
-+      child = get_child_mount(sfs_mnt);
-+      up(&sfs_mnt->sem);
-+      mutex_unlock(&dir->i_mutex);
++#else
+       down(&dir->i_sem);
 +#endif
        if (IS_ERR(child))
                return (void *) child;
        subfs_send_signal();
-@@ -262,9 +283,15 @@
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
++      if (sfs_mnt->mount == current->fs->pwd.mnt)
++#else
+       if (sfs_mnt->mount == current->fs->pwdmnt)
++#endif
+               subfs_set_fs_pwd(current->fs, child, child->mnt_root);
+       return ERR_PTR(-ERESTARTSYS);
+ }
+@@ -254,7 +311,11 @@
+       if (IS_ERR(child))
+               return PTR_ERR(child);
+       subfs_send_signal();
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
++      if (sfs_mnt->mount == current->fs->pwd.mnt)
++#else
+       if (sfs_mnt->mount == current->fs->pwdmnt)
++#endif
+               subfs_set_fs_pwd(current->fs, child, child->mnt_root);
+       return -ERESTARTSYS;
+ }
+@@ -262,9 +323,15 @@
  
  /*  Implements the statfs method so df and such will work on the mountpoint.
   */
@@ -85,7 +184,17 @@
        struct vfsmount *child;
        if (down_interruptible(&sfs_mnt->sem))
                return -ERESTARTSYS;
-@@ -388,6 +415,7 @@
+@@ -286,7 +353,9 @@
+       if (ret) {
+               ret->i_mode = mode;
+               ret->i_uid = ret->i_gid = 0;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+               ret->i_blksize = PAGE_CACHE_SIZE;
++#endif
+               ret->i_blocks = 0;
+               ret->i_atime = ret->i_mtime = ret->i_ctime = CURRENT_TIME;
+               ret->i_fop = &subfs_file_ops;
+@@ -388,6 +457,7 @@
   * subfs_mount structure is pointed to by the s_fs_info field of the
   * superblock structure.
   */
@@ -93,7 +202,7 @@
  static struct super_block *subfs_get_super(struct file_system_type *fst,
                                int flags, const char *devname, void *data)
  {
-@@ -416,7 +444,39 @@
+@@ -416,7 +486,39 @@
        newmount->sb->s_fs_info = newmount;
        return newmount->sb;
  }
@@ -133,8 +242,9 @@
  
  /* subfs_kill_super is the subfs implementation of the kill_sb method.
   * It should be called only on umount.  It cleans up the appropriate
---- submount-0.9/subfs-0.9/subfs.h.orig        2004-02-26 23:54:58.000000000 
+0100
-+++ submount-0.9/subfs-0.9/subfs.h     2006-10-19 02:14:56.944311764 +0200
+diff -U 3 -H -d -r -N -- submount-0.9~/subfs-0.9/subfs.h 
submount-0.9/subfs-0.9/subfs.h
+--- submount-0.9~/subfs-0.9/subfs.h    2004-02-26 23:54:58.000000000 +0100
++++ submount-0.9/subfs-0.9/subfs.h     2009-06-09 06:55:59.000000000 +0200
 @@ -33,8 +33,17 @@
  
  
================================================================

---- CVS-web:
    
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/submount/submount-subfs.patch?r1=1.2&r2=1.3&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to