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 */ 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 _