Author: pluto                        Date: Thu Nov 13 20:06:08 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- patch from autofs-5.0.4 tarball.

---- Files affected:
SOURCES:
   kernel-autofs4-2.6.27-v5-update-20081027.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/kernel-autofs4-2.6.27-v5-update-20081027.patch
diff -u /dev/null SOURCES/kernel-autofs4-2.6.27-v5-update-20081027.patch:1.1
--- /dev/null   Thu Nov 13 21:06:09 2008
+++ SOURCES/kernel-autofs4-2.6.27-v5-update-20081027.patch      Thu Nov 13 
21:06:03 2008
@@ -0,0 +1,148 @@
+Index: linux-2.6.27/fs/autofs4/autofs_i.h
+===================================================================
+--- linux-2.6.27.orig/fs/autofs4/autofs_i.h
++++ linux-2.6.27/fs/autofs4/autofs_i.h
+@@ -21,6 +21,8 @@
+ #define AUTOFS_IOC_FIRST     AUTOFS_IOC_READY
+ #define AUTOFS_IOC_COUNT     32
+ 
++#define AUTOFS_TYPE_TRIGGER   (AUTOFS_TYPE_DIRECT|AUTOFS_TYPE_OFFSET)
++
+ #include <linux/kernel.h>
+ #include <linux/slab.h>
+ #include <linux/time.h>
+@@ -92,10 +94,6 @@ struct autofs_wait_queue {
+ 
+ #define AUTOFS_SBI_MAGIC 0x6d4a556d
+ 
+-#define AUTOFS_TYPE_INDIRECT     0x0001
+-#define AUTOFS_TYPE_DIRECT       0x0002
+-#define AUTOFS_TYPE_OFFSET       0x0004
+-
+ struct autofs_sb_info {
+       u32 magic;
+       int pipefd;
+Index: linux-2.6.27/fs/autofs4/expire.c
+===================================================================
+--- linux-2.6.27.orig/fs/autofs4/expire.c
++++ linux-2.6.27/fs/autofs4/expire.c
+@@ -56,12 +56,23 @@ static int autofs4_mount_busy(struct vfs
+       mntget(mnt);
+       dget(dentry);
+ 
+-      if (!autofs4_follow_mount(&mnt, &dentry))
++      if (!follow_down(&mnt, &dentry))
+               goto done;
+ 
+-      /* This is an autofs submount, we can't expire it */
+-      if (is_autofs4_dentry(dentry))
+-              goto done;
++      if (is_autofs4_dentry(dentry)) {
++              struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
++
++              /* This is an autofs submount, we can't expire it */
++              if (sbi->type == AUTOFS_TYPE_INDIRECT)
++                      goto done;
++
++              /*
++               * Otherwise it's an offset mount and we need to check
++               * if we can umount its mount, if there is one.
++               */
++              if (!d_mountpoint(dentry))
++                      goto done;
++      }
+ 
+       /* Update the expiry counter if fs is busy */
+       if (!may_umount_tree(mnt)) {
+@@ -479,7 +490,7 @@ int autofs4_expire_multi(struct super_bl
+       if (arg && get_user(do_now, arg))
+               return -EFAULT;
+ 
+-      if (sbi->type & AUTOFS_TYPE_DIRECT)
++      if (sbi->type & AUTOFS_TYPE_TRIGGER)
+               dentry = autofs4_expire_direct(sb, mnt, sbi, do_now);
+       else
+               dentry = autofs4_expire_indirect(sb, mnt, sbi, do_now);
+Index: linux-2.6.27/fs/autofs4/inode.c
+===================================================================
+--- linux-2.6.27.orig/fs/autofs4/inode.c
++++ linux-2.6.27/fs/autofs4/inode.c
+@@ -288,7 +288,7 @@ static int parse_options(char *options, 
+                       *type = AUTOFS_TYPE_DIRECT;
+                       break;
+               case Opt_offset:
+-                      *type = AUTOFS_TYPE_DIRECT | AUTOFS_TYPE_OFFSET;
++                      *type = AUTOFS_TYPE_OFFSET;
+                       break;
+               default:
+                       return 1;
+@@ -336,7 +336,7 @@ int autofs4_fill_super(struct super_bloc
+       sbi->sb = s;
+       sbi->version = 0;
+       sbi->sub_version = 0;
+-      sbi->type = 0;
++      sbi->type = AUTOFS_TYPE_INDIRECT;
+       sbi->min_proto = 0;
+       sbi->max_proto = 0;
+       mutex_init(&sbi->wq_mutex);
+@@ -378,7 +378,7 @@ int autofs4_fill_super(struct super_bloc
+       }
+ 
+       root_inode->i_fop = &autofs4_root_operations;
+-      root_inode->i_op = sbi->type & AUTOFS_TYPE_DIRECT ?
++      root_inode->i_op = sbi->type & AUTOFS_TYPE_TRIGGER ?
+                       &autofs4_direct_root_inode_operations :
+                       &autofs4_indirect_root_inode_operations;
+ 
+Index: linux-2.6.27/fs/autofs4/waitq.c
+===================================================================
+--- linux-2.6.27.orig/fs/autofs4/waitq.c
++++ linux-2.6.27/fs/autofs4/waitq.c
+@@ -337,7 +337,7 @@ int autofs4_wait(struct autofs_sb_info *
+                * is very similar for indirect mounts except only dentrys
+                * in the root of the autofs file system may be negative.
+                */
+-              if (sbi->type & (AUTOFS_TYPE_DIRECT|AUTOFS_TYPE_OFFSET))
++              if (sbi->type & AUTOFS_TYPE_TRIGGER)
+                       return -ENOENT;
+               else if (!IS_ROOT(dentry->d_parent))
+                       return -ENOENT;
+@@ -348,7 +348,7 @@ int autofs4_wait(struct autofs_sb_info *
+               return -ENOMEM;
+ 
+       /* If this is a direct mount request create a dummy name */
+-      if (IS_ROOT(dentry) && (sbi->type & AUTOFS_TYPE_DIRECT))
++      if (IS_ROOT(dentry) && sbi->type & AUTOFS_TYPE_TRIGGER)
+               qstr.len = sprintf(name, "%p", dentry);
+       else {
+               qstr.len = autofs4_getpath(sbi, dentry, &name);
+@@ -406,11 +406,11 @@ int autofs4_wait(struct autofs_sb_info *
+                               type = autofs_ptype_expire_multi;
+               } else {
+                       if (notify == NFY_MOUNT)
+-                              type = (sbi->type & AUTOFS_TYPE_DIRECT) ?
++                              type = (sbi->type & AUTOFS_TYPE_TRIGGER) ?
+                                       autofs_ptype_missing_direct :
+                                        autofs_ptype_missing_indirect;
+                       else
+-                              type = (sbi->type & AUTOFS_TYPE_DIRECT) ?
++                              type = (sbi->type & AUTOFS_TYPE_TRIGGER) ?
+                                       autofs_ptype_expire_direct :
+                                       autofs_ptype_expire_indirect;
+               }
+Index: linux-2.6.27/include/linux/auto_fs4.h
+===================================================================
+--- linux-2.6.27.orig/include/linux/auto_fs4.h
++++ linux-2.6.27/include/linux/auto_fs4.h
+@@ -29,6 +29,11 @@
+ #define AUTOFS_EXP_IMMEDIATE          1
+ #define AUTOFS_EXP_LEAVES             2
+ 
++#define AUTOFS_TYPE_ANY                       0x0000
++#define AUTOFS_TYPE_INDIRECT          0x0001
++#define AUTOFS_TYPE_DIRECT            0x0002
++#define AUTOFS_TYPE_OFFSET            0x0004
++
+ /* Daemon notification packet types */
+ enum autofs_notify {
+       NFY_NONE,
================================================================
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to