We need a ustat64() for 64-bit dev_t.



 arch/i386/kernel/entry.S  |    1 +
 fs/super.c                |   21 ++++++++++++++++++++-
 include/asm-i386/unistd.h |    3 ++-
 3 files changed, 23 insertions(+), 2 deletions(-)

diff -puN fs/super.c~ustat64 fs/super.c
--- 25/fs/super.c~ustat64	2003-08-08 03:12:25.000000000 -0700
+++ 25-akpm/fs/super.c	2003-08-08 03:12:25.000000000 -0700
@@ -405,7 +405,7 @@ rescan:
 	return NULL;
 }
 
-asmlinkage long sys_ustat(dev_t dev, struct ustat __user * ubuf)
+static long do_ustat(dev_t dev, struct ustat __user *ubuf)
 {
         struct super_block *s;
         struct ustat tmp;
@@ -429,6 +429,25 @@ out:
 	return err;
 }
 
+asmlinkage long sys_ustat(__kernel_old_dev_t devnr, struct ustat __user * ubuf)
+{
+	dev_t dev = devnr;
+
+	if (dev != devnr)
+		return -EOVERFLOW;
+	return do_ustat(dev, ubuf);
+}
+
+asmlinkage long sys_ustat64(unsigned int major, unsigned int minor,
+				struct ustat __user *ubuf)
+{
+	dev_t dev = MKDEV(major, minor);
+
+	if (MAJOR(dev) != major || MINOR(dev) != minor)
+		return -EOVERFLOW;
+	return do_ustat(dev, ubuf);
+}
+
 static void mark_files_ro(struct super_block *sb)
 {
 	struct file *f;
diff -puN include/asm-i386/unistd.h~ustat64 include/asm-i386/unistd.h
--- 25/include/asm-i386/unistd.h~ustat64	2003-08-08 03:12:25.000000000 -0700
+++ 25-akpm/include/asm-i386/unistd.h	2003-08-08 03:12:53.000000000 -0700
@@ -279,8 +279,9 @@
 #define __NR_utimes		271
 #define __NR_fadvise64_64	272
 #define __NR_mknod64		273
+#define __NR_ustat64		274
 
-#define NR_syscalls 274
+#define NR_syscalls 275
 
 /* user-visible error numbers are in the range -1 - -124: see <asm-i386/errno.h> */
 
diff -puN arch/i386/kernel/entry.S~ustat64 arch/i386/kernel/entry.S
--- 25/arch/i386/kernel/entry.S~ustat64	2003-08-08 03:12:25.000000000 -0700
+++ 25-akpm/arch/i386/kernel/entry.S	2003-08-08 03:12:25.000000000 -0700
@@ -906,6 +906,7 @@ ENTRY(sys_call_table)
 	.long sys_utimes
  	.long sys_fadvise64_64
 	.long sys_mknod64
+	.long sys_ustat64
 
 nr_syscalls=(.-sys_call_table)/4
 

_