

We decided to do this a different way.

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-sparc64-akpm/arch/i386/kernel/entry.S      |    2 
 25-sparc64-akpm/arch/ia64/kernel/entry.S      |    2 
 25-sparc64-akpm/arch/sparc64/kernel/systbls.S |    4 -
 25-sparc64-akpm/fs/namei.c                    |   62 ++------------------------
 25-sparc64-akpm/include/asm-i386/unistd.h     |    2 
 25-sparc64-akpm/include/asm-ia64/unistd.h     |    1 
 25-sparc64-akpm/include/asm-sparc64/unistd.h  |    2 
 25-sparc64-akpm/include/linux/syscalls.h      |    1 
 8 files changed, 11 insertions(+), 65 deletions(-)

diff -puN arch/i386/kernel/entry.S~revert-sys_setaltroot arch/i386/kernel/entry.S
--- 25-sparc64/arch/i386/kernel/entry.S~revert-sys_setaltroot	2004-10-22 00:38:02.000000000 -0700
+++ 25-sparc64-akpm/arch/i386/kernel/entry.S	2004-10-22 01:01:58.093410376 -0700
@@ -867,7 +867,7 @@ ENTRY(sys_call_table)
 	.long sys_mq_getsetattr
 	.long sys_ni_syscall		/* reserved for kexec */
 	.long sys_waitid
-	.long sys_setaltroot		/* 285 */
+	.long sys_ni_syscall		/* 285 */ /* available */
 	.long sys_add_key
 	.long sys_request_key
 	.long sys_keyctl
diff -puN arch/ia64/kernel/entry.S~revert-sys_setaltroot arch/ia64/kernel/entry.S
--- 25-sparc64/arch/ia64/kernel/entry.S~revert-sys_setaltroot	2004-10-22 00:38:02.000000000 -0700
+++ 25-sparc64-akpm/arch/ia64/kernel/entry.S	2004-10-22 00:38:02.000000000 -0700
@@ -1527,7 +1527,7 @@ sys_call_table:
 	data8 sys_mq_getsetattr
 	data8 sys_ni_syscall			// reserved for kexec_load
 	data8 sys_ni_syscall
-	data8 sys_setaltroot			// 1270
+	data8 sys_ni_syscall			// 1270
 	data8 sys_ni_syscall
 	data8 sys_ni_syscall
 	data8 sys_ni_syscall
diff -puN fs/namei.c~revert-sys_setaltroot fs/namei.c
--- 25-sparc64/fs/namei.c~revert-sys_setaltroot	2004-10-22 00:38:02.000000000 -0700
+++ 25-sparc64-akpm/fs/namei.c	2004-10-22 01:01:42.444789328 -0700
@@ -913,20 +913,20 @@ static int __emul_lookup_dentry(const ch
 	return 1;
 }
 
-int __set_fs_altroot(const char *altroot)
+void set_fs_altroot(void)
 {
+	char *emul = __emul_prefix();
 	struct nameidata nd;
 	struct vfsmount *mnt = NULL, *oldmnt;
 	struct dentry *dentry = NULL, *olddentry;
 	int err;
-	if (!altroot)
+
+	if (!emul)
 		goto set_it;
-	err = path_lookup(altroot, LOOKUP_FOLLOW|LOOKUP_DIRECTORY|LOOKUP_NOALT, &nd);
+	err = path_lookup(emul, LOOKUP_FOLLOW|LOOKUP_DIRECTORY|LOOKUP_NOALT, &nd);
 	if (!err) {
 		mnt = nd.mnt;
 		dentry = nd.dentry;
-	} else {
-		return err;
 	}
 set_it:
 	write_lock(&current->fs->lock);
@@ -939,58 +939,6 @@ set_it:
 		dput(olddentry);
 		mntput(oldmnt);
 	}
-	return 0;
-}
-
-void set_fs_altroot(void)
-{
-	char *emul = __emul_prefix();
-
-	__set_fs_altroot(emul);
-}
-
-asmlinkage long sys_setaltroot(const char __user * altroot)
-{
-	char *emul = NULL;
-	int ret;
-
-	if (altroot) {
-		emul = getname(altroot);
-		if (IS_ERR(emul)) {
-			ret = PTR_ERR(emul);
-			goto out;
-		}
-	}
-
-	if (atomic_read(&current->fs->count) != 1) {
-		struct fs_struct *fsp, *ofsp;
-
-		fsp = copy_fs_struct(current->fs);
-		if (fsp == NULL) {
-			ret = -ENOMEM;
-			goto out_putname;
-		}
-
-		task_lock(current);
-		ofsp = current->fs;
-		current->fs = fsp;
-		task_unlock(current);
-
-		put_fs_struct(ofsp);
-	}
-
-	/*
-	 * At that point we are guaranteed to be the sole owner of
-	 * current->fs.
-	 */
-
-	ret = __set_fs_altroot(emul);
-
-out_putname:
-	if (emul)
-		putname(emul);
-out:
-	return ret;
 }
 
 int fastcall path_lookup(const char *name, unsigned int flags, struct nameidata *nd)
diff -puN include/asm-i386/unistd.h~revert-sys_setaltroot include/asm-i386/unistd.h
--- 25-sparc64/include/asm-i386/unistd.h~revert-sys_setaltroot	2004-10-22 00:38:02.000000000 -0700
+++ 25-sparc64-akpm/include/asm-i386/unistd.h	2004-10-22 01:01:55.295835672 -0700
@@ -290,7 +290,7 @@
 #define __NR_mq_getsetattr	(__NR_mq_open+5)
 #define __NR_sys_kexec_load	283
 #define __NR_waitid		284
-#define __NR_sys_setaltroot	285
+/* #define __NR_sys_setaltroot	285 */
 #define __NR_add_key		286
 #define __NR_request_key	287
 #define __NR_keyctl		288
diff -puN include/asm-ia64/unistd.h~revert-sys_setaltroot include/asm-ia64/unistd.h
--- 25-sparc64/include/asm-ia64/unistd.h~revert-sys_setaltroot	2004-10-22 00:38:02.000000000 -0700
+++ 25-sparc64-akpm/include/asm-ia64/unistd.h	2004-10-22 00:38:02.000000000 -0700
@@ -259,7 +259,6 @@
 #define __NR_mq_getsetattr		1267
 #define __NR_kexec_load			1268
 #define __NR_vserver			1269
-#define __NR_setaltroot			1270
 
 #ifdef __KERNEL__
 
diff -puN include/linux/syscalls.h~revert-sys_setaltroot include/linux/syscalls.h
--- 25-sparc64/include/linux/syscalls.h~revert-sys_setaltroot	2004-10-22 00:38:02.000000000 -0700
+++ 25-sparc64-akpm/include/linux/syscalls.h	2004-10-22 00:38:02.000000000 -0700
@@ -490,7 +490,6 @@ asmlinkage long sys_nfsservctl(int cmd,
 				void __user *res);
 asmlinkage long sys_syslog(int type, char __user *buf, int len);
 asmlinkage long sys_uselib(const char __user *library);
-asmlinkage long sys_setaltroot(const char __user *altroot);
 asmlinkage long sys_ni_syscall(void);
 
 asmlinkage long sys_add_key(const char __user *_type,
diff -puN arch/sparc64/kernel/systbls.S~revert-sys_setaltroot arch/sparc64/kernel/systbls.S
--- 25-sparc64/arch/sparc64/kernel/systbls.S~revert-sys_setaltroot	2004-10-22 01:02:15.405778496 -0700
+++ 25-sparc64-akpm/arch/sparc64/kernel/systbls.S	2004-10-22 01:02:57.062445720 -0700
@@ -76,7 +76,7 @@ sys_call_table32:
 	.word sys_timer_delete, sys32_timer_create, sys_ni_syscall, compat_sys_io_setup, sys_io_destroy
 /*270*/	.word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink
 	.word sys_mq_timedsend, sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid
-/*280*/	.word sys_setaltroot, sys_add_key, sys_request_key, sys_keyctl
+/*280*/	.word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl
 
 #endif /* CONFIG_COMPAT */
 
@@ -142,7 +142,7 @@ sys_call_table:
 	.word sys_timer_delete, sys_timer_create, sys_ni_syscall, sys_io_setup, sys_io_destroy
 /*270*/	.word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
 	.word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
-/*280*/	.word sys_setaltroot, sys_add_key, sys_request_key, sys_keyctl
+/*280*/	.word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl
 
 #if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \
     defined(CONFIG_SOLARIS_EMUL_MODULE)
diff -puN include/asm-sparc64/unistd.h~revert-sys_setaltroot include/asm-sparc64/unistd.h
--- 25-sparc64/include/asm-sparc64/unistd.h~revert-sys_setaltroot	2004-10-22 01:02:23.306577392 -0700
+++ 25-sparc64-akpm/include/asm-sparc64/unistd.h	2004-10-22 01:03:19.011109016 -0700
@@ -298,7 +298,7 @@
 #define __NR_mq_notify		277
 #define __NR_mq_getsetattr	278
 #define __NR_waitid		279
-#define __NR_sys_setaltroot	280
+/*#define __NR_sys_setaltroot	280 available (was setaltroot) */
 #define __NR_add_key		281
 #define __NR_request_key	282
 #define __NR_keyctl		283
_
