SOURCES: kernel-autofs4-2.6.27-v5-update-20081027.patch (NEW) - patch from ...
pluto
pluto at pld-linux.org
Thu Nov 13 21:06:08 CET 2008
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,
================================================================
More information about the pld-cvs-commit
mailing list