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