public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] updated fstatat64 support
@ 2006-02-10 15:28 Ulrich Drepper
  2006-02-11 11:21 ` Heiko Carstens
  0 siblings, 1 reply; 5+ messages in thread
From: Ulrich Drepper @ 2006-02-10 15:28 UTC (permalink / raw)
  To: akpm, linux-kernel, torvalds

Since Christoph insist here's a patch changing newfstatat64 to fstatat64.

Signed-off-by: Ulrich Drepper <drepper@redhat.com>


--- linux-2.6.15.i686/arch/i386/kernel/syscall_table.S-at	2006-02-06 13:11:24.000000000 -0800
+++ linux-2.6.15.i686/arch/i386/kernel/syscall_table.S	2006-02-06 13:11:34.000000000 -0800
@@ -299,7 +299,7 @@
 	.long sys_mknodat
 	.long sys_fchownat
 	.long sys_futimesat
-	.long sys_newfstatat		/* 300 */
+	.long sys_fstatat64		/* 300 */
 	.long sys_unlinkat
 	.long sys_renameat
 	.long sys_linkat
--- linux-2.6.15.i686/arch/x86_64/ia32/ia32entry.S-at	2006-02-06 13:05:04.000000000 -0800
+++ linux-2.6.15.i686/arch/x86_64/ia32/ia32entry.S	2006-02-06 13:05:21.000000000 -0800
@@ -677,7 +677,7 @@
 	.quad sys_mknodat
 	.quad sys_fchownat
 	.quad compat_sys_futimesat
-	.quad compat_sys_newfstatat	/* 300 */
+	.quad sys32_fstatat		/* 300 */
 	.quad sys_unlinkat
 	.quad sys_renameat
 	.quad sys_linkat
--- linux-2.6.15.i686/arch/x86_64/ia32/sys_ia32.c-at	2006-02-06 13:05:37.000000000 -0800
+++ linux-2.6.15.i686/arch/x86_64/ia32/sys_ia32.c	2006-02-06 13:08:30.000000000 -0800
@@ -180,6 +180,28 @@
 	return ret;
 }
 
+asmlinkage long
+sys32_fstatat(unsigned int dfd, char __user *filename,
+	      struct stat64 __user* statbuf, int flag)
+{
+	struct kstat stat;
+	int error = -EINVAL;
+
+	if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
+		goto out;
+
+	if (flag & AT_SYMLINK_NOFOLLOW)
+		error = vfs_lstat_fd(dfd, filename, &stat);
+	else
+		error = vfs_stat_fd(dfd, filename, &stat);
+
+	if (!error)
+		error = cp_stat64(statbuf, &stat);
+
+out:
+	return error;
+}
+
 /*
  * Linux/i386 didn't use to be able to handle more than
  * 4 system call parameters, so these system calls used a memory
--- linux-2.6.15.i686/fs/stat.c-at	2006-02-06 12:55:52.000000000 -0800
+++ linux-2.6.15.i686/fs/stat.c	2006-02-06 13:13:43.000000000 -0800
@@ -261,6 +261,7 @@
 	return error;
 }
 
+#ifndef __ARCH_WANT_STAT64
 asmlinkage long sys_newfstatat(int dfd, char __user *filename,
 				struct stat __user *statbuf, int flag)
 {
@@ -281,6 +282,7 @@
 out:
 	return error;
 }
+#endif
 
 asmlinkage long sys_newfstat(unsigned int fd, struct stat __user *statbuf)
 {
@@ -395,6 +397,26 @@
 	return error;
 }
 
+asmlinkage long sys_fstatat64(int dfd, char __user *filename,
+			       struct stat64 __user *statbuf, int flag)
+{
+	struct kstat stat;
+	int error = -EINVAL;
+
+	if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
+		goto out;
+
+	if (flag & AT_SYMLINK_NOFOLLOW)
+		error = vfs_lstat_fd(dfd, filename, &stat);
+	else
+		error = vfs_stat_fd(dfd, filename, &stat);
+
+	if (!error)
+		error = cp_new_stat64(&stat, statbuf);
+
+out:
+	return error;
+}
 #endif /* __ARCH_WANT_STAT64 */
 
 void inode_add_bytes(struct inode *inode, loff_t bytes)
--- linux-2.6.15.i686/include/asm-i386/unistd.h-at	2006-02-06 13:16:26.000000000 -0800
+++ linux-2.6.15.i686/include/asm-i386/unistd.h	2006-02-06 13:16:42.000000000 -0800
@@ -305,7 +305,7 @@
 #define __NR_mknodat		297
 #define __NR_fchownat		298
 #define __NR_futimesat		299
-#define __NR_newfstatat		300
+#define __NR_fstatat64		300
 #define __NR_unlinkat		301
 #define __NR_renameat		302
 #define __NR_linkat		303
--- linux-2.6.15.i686/include/asm-x86_64/ia32_unistd.h-at	2006-02-06 13:16:51.000000000 -0800
+++ linux-2.6.15.i686/include/asm-x86_64/ia32_unistd.h	2006-02-06 13:17:00.000000000 -0800
@@ -305,7 +305,7 @@
 #define __NR_ia32_mknodat		297
 #define __NR_ia32_fchownat		298
 #define __NR_ia32_futimesat		299
-#define __NR_ia32_newfstatat		300
+#define __NR_ia32_fstatat64		300
 #define __NR_ia32_unlinkat		301
 #define __NR_ia32_renameat		302
 #define __NR_ia32_linkat		303
--- linux-2.6.15.i686/include/linux/syscalls.h-at	2006-02-06 12:56:58.000000000 -0800
+++ linux-2.6.15.i686/include/linux/syscalls.h	2006-02-06 13:14:15.000000000 -0800
@@ -557,6 +557,8 @@
 			   int mode);
 asmlinkage long sys_newfstatat(int dfd, char __user *filename,
 			       struct stat __user *statbuf, int flag);
+asmlinkage long sys_fstatat64(int dfd, char __user *filename,
+			       struct stat64 __user *statbuf, int flag);
 asmlinkage long sys_readlinkat(int dfd, const char __user *path, char __user *buf,
 			       int bufsiz);
 asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename,

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] updated fstatat64 support
  2006-02-10 15:28 [PATCH] updated fstatat64 support Ulrich Drepper
@ 2006-02-11 11:21 ` Heiko Carstens
  2006-02-12 13:09   ` Olaf Hering
  0 siblings, 1 reply; 5+ messages in thread
From: Heiko Carstens @ 2006-02-11 11:21 UTC (permalink / raw)
  To: Ulrich Drepper; +Cc: akpm, linux-kernel, torvalds

> --- linux-2.6.15.i686/arch/i386/kernel/syscall_table.S-at	2006-02-06 13:11:24.000000000 -0800
> +++ linux-2.6.15.i686/arch/i386/kernel/syscall_table.S	2006-02-06 13:11:34.000000000 -0800
> @@ -299,7 +299,7 @@
>  	.long sys_mknodat
>  	.long sys_fchownat
>  	.long sys_futimesat
> -	.long sys_newfstatat		/* 300 */
> +	.long sys_fstatat64		/* 300 */
>  	.long sys_unlinkat
>  	.long sys_renameat
>  	.long sys_linkat
> --- linux-2.6.15.i686/arch/x86_64/ia32/ia32entry.S-at	2006-02-06 13:05:04.000000000 -0800
> +++ linux-2.6.15.i686/arch/x86_64/ia32/ia32entry.S	2006-02-06 13:05:21.000000000 -0800
> @@ -677,7 +677,7 @@
>  	.quad sys_mknodat
>  	.quad sys_fchownat
>  	.quad compat_sys_futimesat
> -	.quad compat_sys_newfstatat	/* 300 */
> +	.quad sys32_fstatat		/* 300 */
>  	.quad sys_unlinkat
>  	.quad sys_renameat
>  	.quad sys_linkat

So we end up with sys_newfstatat for 64 bit architectures, sys_fstatat64
for 32 bit architectures and sys32_fstatat for compat mode. Shouldn't the
name of the compat call changed to sys32_fstatat64?
At least that is how it used to be for all other *64 compat system calls
like e.g. fstat64.

Heiko

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] updated fstatat64 support
  2006-02-11 11:21 ` Heiko Carstens
@ 2006-02-12 13:09   ` Olaf Hering
  2006-02-12 16:38     ` Ulrich Drepper
  0 siblings, 1 reply; 5+ messages in thread
From: Olaf Hering @ 2006-02-12 13:09 UTC (permalink / raw)
  To: Heiko Carstens; +Cc: Ulrich Drepper, akpm, linux-kernel, torvalds


s390 doesnt compile because sys_newfstatat() is not defined.
__ARCH_WANT_STAT64 is defined for 32bit build in
include/asm-s390/unistd.h. This change fixes compilation, but its likely
not correct to do it that way:

Index: linux-2.6.15/fs/stat.c
===================================================================
--- linux-2.6.15.orig/fs/stat.c
+++ linux-2.6.15/fs/stat.c
@@ -261,7 +261,7 @@ asmlinkage long sys_newlstat(char __user
        return error;
 }
 
-#ifndef __ARCH_WANT_STAT64
+#ifdef __ARCH_WANT_STAT64
 asmlinkage long sys_newfstatat(int dfd, char __user *filename,
                                struct stat __user *statbuf, int flag)
 {



-- 
short story of a lazy sysadmin:
 alias appserv=wotan

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] updated fstatat64 support
  2006-02-12 13:09   ` Olaf Hering
@ 2006-02-12 16:38     ` Ulrich Drepper
  2006-02-12 16:48       ` Heiko Carstens
  0 siblings, 1 reply; 5+ messages in thread
From: Ulrich Drepper @ 2006-02-12 16:38 UTC (permalink / raw)
  To: Olaf Hering; +Cc: Heiko Carstens, akpm, linux-kernel, torvalds

[-- Attachment #1: Type: text/plain, Size: 436 bytes --]

Olaf Hering wrote:
> s390 doesnt compile because sys_newfstatat() is not defined.
> __ARCH_WANT_STAT64 is defined for 32bit build in
> include/asm-s390/unistd.h. This change fixes compilation, but its likely
> not correct to do it that way:

Indeed.  You most probably want to change the reference in the syscall
table to sys_fstatat64.

-- 
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 251 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] updated fstatat64 support
  2006-02-12 16:38     ` Ulrich Drepper
@ 2006-02-12 16:48       ` Heiko Carstens
  0 siblings, 0 replies; 5+ messages in thread
From: Heiko Carstens @ 2006-02-12 16:48 UTC (permalink / raw)
  To: Ulrich Drepper; +Cc: Olaf Hering, akpm, linux-kernel, torvalds

> > s390 doesnt compile because sys_newfstatat() is not defined.
> > __ARCH_WANT_STAT64 is defined for 32bit build in
> > include/asm-s390/unistd.h. This change fixes compilation, but its likely
> > not correct to do it that way:
> Indeed.  You most probably want to change the reference in the syscall
> table to sys_fstatat64.

I sent a patch which fixes this earlier today:

http://lkml.org/lkml/2006/2/12/37

Thanks,
Heiko

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2006-02-12 16:48 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-10 15:28 [PATCH] updated fstatat64 support Ulrich Drepper
2006-02-11 11:21 ` Heiko Carstens
2006-02-12 13:09   ` Olaf Hering
2006-02-12 16:38     ` Ulrich Drepper
2006-02-12 16:48       ` Heiko Carstens

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox