arch/ia64/ia32/sys_ia32.c         |    8 +-
 arch/mips/kernel/linux32.c        |    4 -
 arch/parisc/hpux/fs.c             |    4 -
 arch/parisc/kernel/sys_parisc32.c |    4 -
 arch/ppc64/kernel/sys_ppc32.c     |    4 -
 arch/s390/kernel/compat_linux.c   |  118 ++++++++++++--------------------------
 arch/sparc64/kernel/sys_sparc32.c |    4 -
 arch/x86_64/ia32/sys_ia32.c       |   92 ++++++++++-------------------
 fs/stat.c                         |   12 +--
 include/asm-alpha/posix_types.h   |    1 
 include/asm-arm/posix_types.h     |    1 
 include/asm-arm26/posix_types.h   |    1 
 include/asm-cris/posix_types.h    |    1 
 include/asm-h8300/posix_types.h   |    1 
 include/asm-i386/posix_types.h    |    1 
 include/asm-ia64/posix_types.h    |    1 
 include/asm-m68k/posix_types.h    |    1 
 include/asm-mips/posix_types.h    |    1 
 include/asm-mips/stat.h           |    8 +-
 include/asm-parisc/posix_types.h  |    1 
 include/asm-parisc/stat.h         |   16 ++---
 include/asm-ppc/posix_types.h     |    1 
 include/asm-ppc/stat.h            |    4 -
 include/asm-ppc64/posix_types.h   |    1 
 include/asm-ppc64/stat.h          |    4 -
 include/asm-s390/posix_types.h    |    2 
 include/asm-sh/posix_types.h      |    1 
 include/asm-sparc/posix_types.h   |    1 
 include/asm-sparc64/posix_types.h |    1 
 include/asm-sparc64/stat.h        |    4 -
 include/asm-v850/posix_types.h    |    1 
 include/asm-x86_64/posix_types.h  |    1 
 include/linux/dm-ioctl-v1.h       |    4 -
 include/linux/types.h             |    2 
 34 files changed, 113 insertions(+), 198 deletions(-)

diff -puN arch/ia64/ia32/sys_ia32.c~KD41-stat-B5 arch/ia64/ia32/sys_ia32.c
--- 25/arch/ia64/ia32/sys_ia32.c~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/arch/ia64/ia32/sys_ia32.c	2003-09-21 22:35:24.000000000 -0700
@@ -186,13 +186,13 @@ int cp_compat_stat(struct kstat *stat, s
 	if (clear_user(ubuf, sizeof(*ubuf)))
 		return -EFAULT;
 
-	err  = __put_user(stat->dev, &ubuf->st_dev);
+	err  = __put_user(old_encode_dev(stat->dev), &ubuf->st_dev);
 	err |= __put_user(stat->ino, &ubuf->st_ino);
 	err |= __put_user(stat->mode, &ubuf->st_mode);
 	err |= __put_user(stat->nlink, &ubuf->st_nlink);
 	err |= __put_user(high2lowuid(stat->uid), &ubuf->st_uid);
 	err |= __put_user(high2lowgid(stat->gid), &ubuf->st_gid);
-	err |= __put_user(stat->rdev, &ubuf->st_rdev);
+	err |= __put_user(old_encode_dev(stat->rdev), &ubuf->st_rdev);
 	err |= __put_user(stat->size, &ubuf->st_size);
 	err |= __put_user(stat->atime.tv_sec, &ubuf->st_atime);
 	err |= __put_user(stat->atime.tv_nsec, &ubuf->st_atime_nsec);
@@ -2488,7 +2488,7 @@ putstat64 (struct stat64 *ubuf, struct k
 	if (clear_user(ubuf, sizeof(*ubuf)))
 		return -EFAULT;
 
-	err  = __put_user(kbuf->dev, &ubuf->st_dev);
+	err  = __put_user(old_encode_dev(kbuf->dev), &ubuf->st_dev);
 	err |= __put_user(kbuf->ino, &ubuf->__st_ino);
 	err |= __put_user(kbuf->ino, &ubuf->st_ino_lo);
 	err |= __put_user(kbuf->ino >> 32, &ubuf->st_ino_hi);
@@ -2496,7 +2496,7 @@ putstat64 (struct stat64 *ubuf, struct k
 	err |= __put_user(kbuf->nlink, &ubuf->st_nlink);
 	err |= __put_user(kbuf->uid, &ubuf->st_uid);
 	err |= __put_user(kbuf->gid, &ubuf->st_gid);
-	err |= __put_user(kbuf->rdev, &ubuf->st_rdev);
+	err |= __put_user(old_encode_dev(kbuf->rdev), &ubuf->st_rdev);
 	err |= __put_user(kbuf->size, &ubuf->st_size_lo);
 	err |= __put_user((kbuf->size >> 32), &ubuf->st_size_hi);
 	err |= __put_user(kbuf->atime.tv_sec, &ubuf->st_atime);
diff -puN arch/mips/kernel/linux32.c~KD41-stat-B5 arch/mips/kernel/linux32.c
--- 25/arch/mips/kernel/linux32.c~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/arch/mips/kernel/linux32.c	2003-09-21 22:35:24.000000000 -0700
@@ -72,13 +72,13 @@ int cp_compat_stat(struct kstat *stat, s
 	struct compat_stat tmp;
 
 	memset(&tmp, 0, sizeof(tmp));
-	tmp.st_dev = stat->dev;
+	tmp.st_dev = old_encode_dev(stat->dev);
 	tmp.st_ino = stat->ino;
 	tmp.st_mode = stat->mode;
 	tmp.st_nlink = stat->nlink;
 	SET_STAT_UID(tmp, stat->uid);
 	SET_STAT_GID(tmp, stat->gid);
-	tmp.st_rdev = stat->rdev;
+	tmp.st_rdev = old_encode_dev(stat->rdev);
 	tmp.st_size = stat->size;
 	tmp.st_atime = stat->atime.tv_sec;
 	tmp.st_mtime = stat->mtime.tv_sec;
diff -puN arch/parisc/hpux/fs.c~KD41-stat-B5 arch/parisc/hpux/fs.c
--- 25/arch/parisc/hpux/fs.c~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/arch/parisc/hpux/fs.c	2003-09-21 22:35:24.000000000 -0700
@@ -124,13 +124,13 @@ static int cp_hpux_stat(struct kstat *st
 	struct hpux_stat64 tmp;
 
 	memset(&tmp, 0, sizeof(tmp));
-	tmp.st_dev = stat->dev;
+	tmp.st_dev = old_encode_dev(stat->dev);
 	tmp.st_ino = stat->ino;
 	tmp.st_mode = stat->mode;
 	tmp.st_nlink = stat->nlink;
 	tmp.st_uid = stat->uid;
 	tmp.st_gid = stat->gid;
-	tmp.st_rdev = stat->rdev;
+	tmp.st_rdev = old_encode_dev(stat->rdev);
 	tmp.st_size = stat->size;
 	tmp.st_atime = stat->atime.tv_sec;
 	tmp.st_mtime = stat->mtime.tv_sec;
diff -puN arch/parisc/kernel/sys_parisc32.c~KD41-stat-B5 arch/parisc/kernel/sys_parisc32.c
--- 25/arch/parisc/kernel/sys_parisc32.c~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/arch/parisc/kernel/sys_parisc32.c	2003-09-21 22:35:24.000000000 -0700
@@ -442,13 +442,13 @@ int cp_compat_stat(struct kstat *stat, s
 	if (stat->size > MAX_NON_LFS)
 		return -EOVERFLOW;
 
-	err  = put_user(stat->dev, &statbuf->st_dev);
+	err  = put_user(old_encode_dev(stat->dev), &statbuf->st_dev);
 	err |= put_user(stat->ino, &statbuf->st_ino);
 	err |= put_user(stat->mode, &statbuf->st_mode);
 	err |= put_user(stat->nlink, &statbuf->st_nlink);
 	err |= put_user(0, &statbuf->st_reserved1);
 	err |= put_user(0, &statbuf->st_reserved2);
-	err |= put_user(stat->rdev, &statbuf->st_rdev);
+	err |= put_user(old_encode_dev(stat->rdev), &statbuf->st_rdev);
 	err |= put_user(stat->size, &statbuf->st_size);
 	err |= put_user(stat->atime.tv_sec, &statbuf->st_atime);
 	err |= put_user(stat->atime.tv_nsec, &statbuf->st_atime_nsec);
diff -puN arch/ppc64/kernel/sys_ppc32.c~KD41-stat-B5 arch/ppc64/kernel/sys_ppc32.c
--- 25/arch/ppc64/kernel/sys_ppc32.c~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/arch/ppc64/kernel/sys_ppc32.c	2003-09-21 22:35:24.000000000 -0700
@@ -751,13 +751,13 @@ int cp_compat_stat(struct kstat *stat, s
 	if (stat->size > MAX_NON_LFS)
 		return -EOVERFLOW;
 
-	err  = put_user(stat->dev, &statbuf->st_dev);
+	err  = put_user(old_encode_dev(stat->dev), &statbuf->st_dev);
 	err |= put_user(stat->ino, &statbuf->st_ino);
 	err |= put_user(stat->mode, &statbuf->st_mode);
 	err |= put_user(stat->nlink, &statbuf->st_nlink);
 	err |= put_user(stat->uid, &statbuf->st_uid);
 	err |= put_user(stat->gid, &statbuf->st_gid);
-	err |= put_user(stat->rdev, &statbuf->st_rdev);
+	err |= put_user(old_encode_dev(stat->rdev), &statbuf->st_rdev);
 	err |= put_user(stat->size, &statbuf->st_size);
 	err |= put_user(stat->atime.tv_sec, &statbuf->st_atime);
 	err |= put_user(0, &statbuf->__unused1);
diff -puN arch/s390/kernel/compat_linux.c~KD41-stat-B5 arch/s390/kernel/compat_linux.c
--- 25/arch/s390/kernel/compat_linux.c~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/arch/s390/kernel/compat_linux.c	2003-09-21 22:35:24.000000000 -0700
@@ -1316,13 +1316,13 @@ int cp_compat_stat(struct kstat *stat, s
 {
 	int err;
 
-	err = put_user(stat->dev, &statbuf->st_dev);
+	err = put_user(old_encode_dev(stat->dev), &statbuf->st_dev);
 	err |= put_user(stat->ino, &statbuf->st_ino);
 	err |= put_user(stat->mode, &statbuf->st_mode);
 	err |= put_user(stat->nlink, &statbuf->st_nlink);
 	err |= put_user(high2lowuid(stat->uid), &statbuf->st_uid);
 	err |= put_user(high2lowgid(stat->gid), &statbuf->st_gid);
-	err |= put_user(stat->rdev, &statbuf->st_rdev);
+	err |= put_user(old_encode_dev(stat->rdev), &statbuf->st_rdev);
 	err |= put_user(stat->size, &statbuf->st_size);
 	err |= put_user(stat->atime.tv_sec, &statbuf->st_atime);
 	err |= put_user(stat->atime.tv_nsec, &statbuf->st_atime_nsec);
@@ -2543,8 +2543,7 @@ extern asmlinkage long sys32_sysctl(stru
 }
 
 struct stat64_emu31 {
-	unsigned char   __pad0[6];
-	unsigned short  st_dev;
+	unsigned long long  st_dev;
 	unsigned int    __pad1;
 #define STAT64_HAS_BROKEN_ST_INO        1
 	u32             __st_ino;
@@ -2552,8 +2551,7 @@ struct stat64_emu31 {
 	unsigned int    st_nlink;
 	u32             st_uid;
 	u32             st_gid;
-	unsigned char   __pad2[6];
-	unsigned short  st_rdev;
+	unsigned long long  st_rdev;
 	unsigned int    __pad3;
 	long            st_size;
 	u32             st_blksize;
@@ -2569,93 +2567,55 @@ struct stat64_emu31 {
 	unsigned long   st_ino;
 };	
 
-static inline int
-putstat64 (struct stat64_emu31 *ubuf, struct stat *kbuf)
+static int cp_stat64(struct stat64_emu31 *ubuf, struct kstat *stat)
 {
-    struct stat64_emu31 tmp;
-   
-    memset(&tmp, 0, sizeof(tmp));
-
-    tmp.st_dev = (unsigned short)kbuf->st_dev;
-    tmp.st_ino = kbuf->st_ino;
-    tmp.__st_ino = (u32)kbuf->st_ino;
-    tmp.st_mode = kbuf->st_mode;
-    tmp.st_nlink = (unsigned int)kbuf->st_nlink;
-    tmp.st_uid = kbuf->st_uid;
-    tmp.st_gid = kbuf->st_gid;
-    tmp.st_rdev = (unsigned short)kbuf->st_rdev;
-    tmp.st_size = kbuf->st_size;
-    tmp.st_blksize = (u32)kbuf->st_blksize;
-    tmp.st_blocks = (u32)kbuf->st_blocks;
-    tmp.st_atime = (u32)kbuf->st_atime;
-    tmp.st_mtime = (u32)kbuf->st_mtime;
-    tmp.st_ctime = (u32)kbuf->st_ctime;
+	struct stat64_emu31 tmp;
 
-    return copy_to_user(ubuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; 
-}
+	memset(&tmp, 0, sizeof(tmp));
+
+	tmp.st_dev = old_encode_dev(stat->dev);
+	tmp.st_ino = stat->ino;
+	tmp.__st_ino = (u32)stat->ino;
+	tmp.st_mode = stat->mode;
+	tmp.st_nlink = (unsigned int)stat->nlink;
+	tmp.uid = stat->uid;
+	tmp.gid = stat->gid;
+	tmp.st_rdev = old_encode_dev(stat->rdev);
+	tmp.st_size = stat->st_size;
+	tmp.st_blksize = (u32)stat->blksize;
+	tmp.st_blocks = (u32)stat->blocks;
+	tmp.st_atime = (u32)stat->atime.tv_sec;
+	tmp.st_mtime = (u32)stat->mtime.tv_sec;
+	tmp.st_ctime = (u32)stat->ctime.tv_sec;
 
-extern asmlinkage long sys_newstat(char * filename, struct stat * statbuf);
+	return copy_to_user(ubuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; 
+}
 
 asmlinkage long sys32_stat64(char * filename, struct stat64_emu31 * statbuf, long flags)
 {
-    int ret;
-    struct stat s;
-    char * tmp;
-    int err;
-    mm_segment_t old_fs = get_fs();
-    
-    tmp = getname(filename);
-    err = PTR_ERR(tmp);
-    if (IS_ERR(tmp))   
-	    return err;
-
-    set_fs (KERNEL_DS);
-    ret = sys_newstat(tmp, &s);
-    set_fs (old_fs);
-    putname(tmp);
-    if (putstat64 (statbuf, &s)) 
-	    return -EFAULT;
-    return ret;
+	struct kstat stat;
+	int ret = vfs_stat(filename, &stat);
+	if (!ret)
+		ret = cp_stat64(statbuf, &stat);
+	return ret;
 }
 
-extern asmlinkage long sys_newlstat(char * filename, struct stat * statbuf);
-
 asmlinkage long sys32_lstat64(char * filename, struct stat64_emu31 * statbuf, long flags)
 {
-    int ret;
-    struct stat s;
-    char * tmp;
-    int err;
-    mm_segment_t old_fs = get_fs();
-    
-    tmp = getname(filename);
-    err = PTR_ERR(tmp);
-    if (IS_ERR(tmp))   
-	    return err;
-
-    set_fs (KERNEL_DS);
-    ret = sys_newlstat(tmp, &s);
-    set_fs (old_fs);
-    putname(tmp);
-    if (putstat64 (statbuf, &s)) 
-	    return -EFAULT;
-    return ret;
+	struct kstat stat;
+	int ret = vfs_lstat(filename, &stat);
+	if (!ret)
+		ret = cp_stat64(statbuf, &stat);
+	return ret;
 }
 
-extern asmlinkage long sys_newfstat(unsigned int fd, struct stat * statbuf);
-
 asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 * statbuf, long flags)
 {
-    int ret;
-    struct stat s;
-    mm_segment_t old_fs = get_fs();
-    
-    set_fs (KERNEL_DS);
-    ret = sys_newfstat(fd, &s);
-    set_fs (old_fs);
-    if (putstat64 (statbuf, &s))
-	    return -EFAULT;
-    return ret;
+	struct kstat stat;
+	int ret = vfs_fstat(fd, &stat);
+	if (!ret)
+		ret = cp_stat64(statbuf, &stat);
+	return ret;
 }
 
 /*
diff -puN arch/sparc64/kernel/sys_sparc32.c~KD41-stat-B5 arch/sparc64/kernel/sys_sparc32.c
--- 25/arch/sparc64/kernel/sys_sparc32.c~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/arch/sparc64/kernel/sys_sparc32.c	2003-09-21 22:35:24.000000000 -0700
@@ -1307,13 +1307,13 @@ int cp_compat_stat(struct kstat *stat, s
 	if (stat->size > MAX_NON_LFS)
 		return -EOVERFLOW;
 
-	err  = put_user(stat->dev, &statbuf->st_dev);
+	err  = put_user(old_encode_dev(stat->dev), &statbuf->st_dev);
 	err |= put_user(stat->ino, &statbuf->st_ino);
 	err |= put_user(stat->mode, &statbuf->st_mode);
 	err |= put_user(stat->nlink, &statbuf->st_nlink);
 	err |= put_user(high2lowuid(stat->uid), &statbuf->st_uid);
 	err |= put_user(high2lowgid(stat->gid), &statbuf->st_gid);
-	err |= put_user(stat->rdev, &statbuf->st_rdev);
+	err |= put_user(old_encode_dev(stat->rdev), &statbuf->st_rdev);
 	err |= put_user(stat->size, &statbuf->st_size);
 	err |= put_user(stat->atime.tv_sec, &statbuf->st_atime);
 	err |= put_user(0, &statbuf->__unused1);
diff -puN arch/x86_64/ia32/sys_ia32.c~KD41-stat-B5 arch/x86_64/ia32/sys_ia32.c
--- 25/arch/x86_64/ia32/sys_ia32.c~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/arch/x86_64/ia32/sys_ia32.c	2003-09-21 22:35:24.000000000 -0700
@@ -89,27 +89,16 @@
 #define low2highgid(gid) ((gid) == (u16)-1) ? (gid_t)-1 : (gid_t)(gid)
 extern int overflowuid,overflowgid; 
 
-
-extern asmlinkage long sys_newstat(char * filename, struct stat * statbuf);
-extern asmlinkage long sys_newlstat(char * filename, struct stat * statbuf);
-extern asmlinkage long sys_newfstat(unsigned int fd, struct stat * statbuf);
-
-
-extern asmlinkage long sys_newstat(char * filename, struct stat * statbuf);
-extern asmlinkage long sys_newlstat(char * filename, struct stat * statbuf);
-extern asmlinkage long sys_newfstat(unsigned int fd, struct stat * statbuf);
-
-
 int cp_compat_stat(struct kstat *kbuf, struct compat_stat *ubuf)
 {
 	if (verify_area(VERIFY_WRITE, ubuf, sizeof(struct compat_stat)) ||
-	    __put_user (kbuf->dev, &ubuf->st_dev) ||
+	    __put_user (old_encode_dev(kbuf->dev), &ubuf->st_dev) ||
 	    __put_user (kbuf->ino, &ubuf->st_ino) ||
 	    __put_user (kbuf->mode, &ubuf->st_mode) ||
 	    __put_user (kbuf->nlink, &ubuf->st_nlink) ||
 	    __put_user (kbuf->uid, &ubuf->st_uid) ||
 	    __put_user (kbuf->gid, &ubuf->st_gid) ||
-	    __put_user (kbuf->rdev, &ubuf->st_rdev) ||
+	    __put_user (old_encode_dev(kbuf->rdev), &ubuf->st_rdev) ||
 	    __put_user (kbuf->size, &ubuf->st_size) ||
 	    __put_user (kbuf->atime.tv_sec, &ubuf->st_atime) ||
 	    __put_user (kbuf->atime.tv_nsec, &ubuf->st_atime_nsec) ||
@@ -127,26 +116,26 @@ int cp_compat_stat(struct kstat *kbuf, s
    support for 64bit inode numbers. */
 
 static int
-putstat64(struct stat64 *ubuf, struct stat *kbuf)
+cp_stat64(struct stat64 *ubuf, struct kstat *stat)
 {
 	if (verify_area(VERIFY_WRITE, ubuf, sizeof(struct stat64)) ||
-	    __put_user (kbuf->st_dev, &ubuf->st_dev) ||
-	    __put_user (kbuf->st_ino, &ubuf->__st_ino) ||
-	    __put_user (kbuf->st_ino, &ubuf->st_ino) ||
-	    __put_user (kbuf->st_mode, &ubuf->st_mode) ||
-	    __put_user (kbuf->st_nlink, &ubuf->st_nlink) ||
-	    __put_user (kbuf->st_uid, &ubuf->st_uid) ||
-	    __put_user (kbuf->st_gid, &ubuf->st_gid) ||
-	    __put_user (kbuf->st_rdev, &ubuf->st_rdev) ||
-	    __put_user (kbuf->st_size, &ubuf->st_size) ||
-	    __put_user (kbuf->st_atime, &ubuf->st_atime) ||
-	    __put_user (kbuf->st_atime_nsec, &ubuf->st_atime_nsec) ||
-	    __put_user (kbuf->st_mtime, &ubuf->st_mtime) ||
-	    __put_user (kbuf->st_mtime_nsec, &ubuf->st_mtime_nsec) ||
-	    __put_user (kbuf->st_ctime, &ubuf->st_ctime) ||
-	    __put_user (kbuf->st_ctime_nsec, &ubuf->st_ctime_nsec) ||
-	    __put_user (kbuf->st_blksize, &ubuf->st_blksize) ||
-	    __put_user (kbuf->st_blocks, &ubuf->st_blocks))
+	    __put_user(old_encode_dev(stat->dev), &ubuf->st_dev) ||
+	    __put_user (stat->ino, &ubuf->__st_ino) ||
+	    __put_user (stat->ino, &ubuf->st_ino) ||
+	    __put_user (stat->mode, &ubuf->st_mode) ||
+	    __put_user (stat->nlink, &ubuf->st_nlink) ||
+	    __put_user (stat->uid, &ubuf->st_uid) ||
+	    __put_user (stat->gid, &ubuf->st_gid) ||
+	    __put_user (old_encode_dev(stat->rdev), &ubuf->st_rdev) ||
+	    __put_user (stat->size, &ubuf->st_size) ||
+	    __put_user (stat->atime.tv_sec, &ubuf->st_atime) ||
+	    __put_user (stat->atime.tv_nsec, &ubuf->st_atime_nsec) ||
+	    __put_user (stat->mtime.tv_sec, &ubuf->st_mtime) ||
+	    __put_user (stat->mtime.tv_nsec, &ubuf->st_mtime_nsec) ||
+	    __put_user (stat->ctime.tv_sec, &ubuf->st_ctime) ||
+	    __put_user (stat->ctime.tv_nsec, &ubuf->st_ctime_nsec) ||
+	    __put_user (stat->blksize, &ubuf->st_blksize) ||
+	    __put_user (stat->blocks, &ubuf->st_blocks))
 		return -EFAULT;
 	return 0;
 }
@@ -154,50 +143,33 @@ putstat64(struct stat64 *ubuf, struct st
 asmlinkage long
 sys32_stat64(char * filename, struct stat64 *statbuf)
 {
-	int ret;
-	struct stat s;
-	mm_segment_t old_fs = get_fs();
-	
-	set_fs (KERNEL_DS);
-	ret = sys_newstat(filename, &s);
-	set_fs (old_fs);
-	if (putstat64 (statbuf, &s))
-		return -EFAULT;
+	struct kstat stat;
+	int ret = vfs_stat(filename, &stat);
+	if (!ret)
+		ret = cp_stat64(statbuf, &stat);
 	return ret;
 }
 
 asmlinkage long
 sys32_lstat64(char * filename, struct stat64 *statbuf)
 {
-	int ret;
-	struct stat s;
-	mm_segment_t old_fs = get_fs();
-	
-	set_fs (KERNEL_DS);
-	ret = sys_newlstat(filename, &s);
-	set_fs (old_fs);
-	if (putstat64 (statbuf, &s))
-		return -EFAULT;
+	struct kstat stat;
+	int ret = vfs_lstat(filename, &stat);
+	if (!ret)
+		ret = cp_stat64(statbuf, &stat);
 	return ret;
 }
 
 asmlinkage long
 sys32_fstat64(unsigned int fd, struct stat64 *statbuf)
 {
-	int ret;
-	struct stat s;
-	mm_segment_t old_fs = get_fs();
-	
-	set_fs (KERNEL_DS);
-	ret = sys_newfstat(fd, &s);
-	set_fs (old_fs);
-	if (putstat64 (statbuf, &s))
-		return -EFAULT;
+	struct kstat stat;
+	int ret = vfs_fstat(fd, &stat);
+	if (!ret)
+		ret = cp_stat64(statbuf, &stat);
 	return ret;
 }
 
-
-
 /*
  * Linux/i386 didn't use to be able to handle more than
  * 4 system call parameters, so these system calls used a memory
diff -puN fs/stat.c~KD41-stat-B5 fs/stat.c
--- 25/fs/stat.c~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/fs/stat.c	2003-09-21 22:35:24.000000000 -0700
@@ -117,13 +117,13 @@ static int cp_old_stat(struct kstat *sta
 	}
 
 	memset(&tmp, 0, sizeof(struct __old_kernel_stat));
-	tmp.st_dev = stat->dev;
+	tmp.st_dev = old_encode_dev(stat->dev);
 	tmp.st_ino = stat->ino;
 	tmp.st_mode = stat->mode;
 	tmp.st_nlink = stat->nlink;
 	SET_OLDSTAT_UID(tmp, stat->uid);
 	SET_OLDSTAT_GID(tmp, stat->gid);
-	tmp.st_rdev = stat->rdev;
+	tmp.st_rdev = old_encode_dev(stat->rdev);
 #if BITS_PER_LONG == 32
 	if (stat->size > MAX_NON_LFS)
 		return -EOVERFLOW;
@@ -173,13 +173,13 @@ static int cp_new_stat(struct kstat *sta
 	struct stat tmp;
 
 	memset(&tmp, 0, sizeof(tmp));
-	tmp.st_dev = stat->dev;
+	tmp.st_dev = old_encode_dev(stat->dev);
 	tmp.st_ino = stat->ino;
 	tmp.st_mode = stat->mode;
 	tmp.st_nlink = stat->nlink;
 	SET_STAT_UID(tmp, stat->uid);
 	SET_STAT_GID(tmp, stat->gid);
-	tmp.st_rdev = stat->rdev;
+	tmp.st_rdev = old_encode_dev(stat->rdev);
 #if BITS_PER_LONG == 32
 	if (stat->size > MAX_NON_LFS)
 		return -EOVERFLOW;
@@ -263,7 +263,7 @@ static long cp_new_stat64(struct kstat *
 	struct stat64 tmp;
 
 	memset(&tmp, 0, sizeof(struct stat64));
-	tmp.st_dev = stat->dev;
+	tmp.st_dev = old_encode_dev(stat->dev);
 	tmp.st_ino = stat->ino;
 #ifdef STAT64_HAS_BROKEN_ST_INO
 	tmp.__st_ino = stat->ino;
@@ -272,7 +272,7 @@ static long cp_new_stat64(struct kstat *
 	tmp.st_nlink = stat->nlink;
 	tmp.st_uid = stat->uid;
 	tmp.st_gid = stat->gid;
-	tmp.st_rdev = stat->rdev;
+	tmp.st_rdev = old_encode_dev(stat->rdev);
 	tmp.st_atime = stat->atime.tv_sec;
 	tmp.st_atime_nsec = stat->atime.tv_nsec;
 	tmp.st_mtime = stat->mtime.tv_sec;
diff -puN include/asm-alpha/posix_types.h~KD41-stat-B5 include/asm-alpha/posix_types.h
--- 25/include/asm-alpha/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-alpha/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -7,7 +7,6 @@
  * assume GCC is being used.
  */
 
-typedef unsigned int	__kernel_dev_t;
 typedef unsigned int	__kernel_ino_t;
 typedef unsigned int	__kernel_mode_t;
 typedef unsigned int	__kernel_nlink_t;
diff -puN include/asm-arm26/posix_types.h~KD41-stat-B5 include/asm-arm26/posix_types.h
--- 25/include/asm-arm26/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-arm26/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -19,7 +19,6 @@
  * assume GCC is being used.
  */
 
-typedef unsigned short		__kernel_dev_t;
 typedef unsigned long		__kernel_ino_t;
 typedef unsigned short		__kernel_mode_t;
 typedef unsigned short		__kernel_nlink_t;
diff -puN include/asm-arm/posix_types.h~KD41-stat-B5 include/asm-arm/posix_types.h
--- 25/include/asm-arm/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-arm/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -19,7 +19,6 @@
  * assume GCC is being used.
  */
 
-typedef unsigned short		__kernel_dev_t;
 typedef unsigned long		__kernel_ino_t;
 typedef unsigned short		__kernel_mode_t;
 typedef unsigned short		__kernel_nlink_t;
diff -puN include/asm-cris/posix_types.h~KD41-stat-B5 include/asm-cris/posix_types.h
--- 25/include/asm-cris/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-cris/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -14,7 +14,6 @@
  * assume GCC is being used.
  */
 
-typedef unsigned short	__kernel_dev_t;
 typedef unsigned long	__kernel_ino_t;
 typedef unsigned short	__kernel_mode_t;
 typedef unsigned short	__kernel_nlink_t;
diff -puN include/asm-h8300/posix_types.h~KD41-stat-B5 include/asm-h8300/posix_types.h
--- 25/include/asm-h8300/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-h8300/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -7,7 +7,6 @@
  * assume GCC is being used.
  */
 
-typedef unsigned short	__kernel_dev_t;
 typedef unsigned long	__kernel_ino_t;
 typedef unsigned short	__kernel_mode_t;
 typedef unsigned short	__kernel_nlink_t;
diff -puN include/asm-i386/posix_types.h~KD41-stat-B5 include/asm-i386/posix_types.h
--- 25/include/asm-i386/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-i386/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -7,7 +7,6 @@
  * assume GCC is being used.
  */
 
-typedef unsigned short	__kernel_dev_t;
 typedef unsigned long	__kernel_ino_t;
 typedef unsigned short	__kernel_mode_t;
 typedef unsigned short	__kernel_nlink_t;
diff -puN include/asm-ia64/posix_types.h~KD41-stat-B5 include/asm-ia64/posix_types.h
--- 25/include/asm-ia64/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-ia64/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -10,7 +10,6 @@
  *	David Mosberger-Tang <davidm@hpl.hp.com>
  */
 
-typedef unsigned int	__kernel_dev_t;
 typedef unsigned int	__kernel_ino_t;
 typedef unsigned int	__kernel_mode_t;
 typedef unsigned int	__kernel_nlink_t;
diff -puN include/asm-m68k/posix_types.h~KD41-stat-B5 include/asm-m68k/posix_types.h
--- 25/include/asm-m68k/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-m68k/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -7,7 +7,6 @@
  * assume GCC is being used.
  */
 
-typedef unsigned short	__kernel_dev_t;
 typedef unsigned long	__kernel_ino_t;
 typedef unsigned short	__kernel_mode_t;
 typedef unsigned short	__kernel_nlink_t;
diff -puN include/asm-mips/posix_types.h~KD41-stat-B5 include/asm-mips/posix_types.h
--- 25/include/asm-mips/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-mips/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -17,7 +17,6 @@
  * assume GCC is being used.
  */
 
-typedef unsigned int	__kernel_dev_t;
 typedef unsigned long	__kernel_ino_t;
 typedef unsigned int	__kernel_mode_t;
 #if (_MIPS_SZLONG == 32)
diff -puN include/asm-mips/stat.h~KD41-stat-B5 include/asm-mips/stat.h
--- 25/include/asm-mips/stat.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-mips/stat.h	2003-09-21 22:35:24.000000000 -0700
@@ -16,14 +16,14 @@
 #if (_MIPS_SIM == _MIPS_SIM_ABI32) || (_MIPS_SIM == _MIPS_SIM_NABI32)
 
 struct stat {
-	dev_t		st_dev;
+	unsigned	st_dev;
 	long		st_pad1[3];		/* Reserved for network id */
 	ino_t		st_ino;
 	mode_t		st_mode;
 	nlink_t		st_nlink;
 	uid_t		st_uid;
 	gid_t		st_gid;
-	dev_t		st_rdev;
+	unsigned 	st_rdev;
 	long		st_pad2[2];
 	off_t		st_size;
 	long		st_pad3;
@@ -90,7 +90,7 @@ struct stat64 {
 
 /* The memory layout is the same as of struct stat64 of the 32-bit kernel.  */
 struct stat {
-	dev_t			st_dev;
+	unsigned int		st_dev;
 	unsigned int		st_pad0[3]; /* Reserved for st_dev expansion */
 
 	unsigned long		st_ino;
@@ -101,7 +101,7 @@ struct stat {
 	uid_t			st_uid;
 	gid_t			st_gid;
 
-	dev_t			st_rdev;
+	unsigned int		st_rdev;
 	unsigned int		st_pad1[3]; /* Reserved for st_rdev expansion */
 
 	off_t			st_size;
diff -puN include/asm-parisc/posix_types.h~KD41-stat-B5 include/asm-parisc/posix_types.h
--- 25/include/asm-parisc/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-parisc/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -6,7 +6,6 @@
  * be a little careful about namespace pollution etc.  Also, we cannot
  * assume GCC is being used.
  */
-typedef unsigned int		__kernel_dev_t;
 typedef unsigned long		__kernel_ino_t;
 typedef unsigned short		__kernel_mode_t;
 typedef unsigned short		__kernel_nlink_t;
diff -puN include/asm-parisc/stat.h~KD41-stat-B5 include/asm-parisc/stat.h
--- 25/include/asm-parisc/stat.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-parisc/stat.h	2003-09-21 22:35:24.000000000 -0700
@@ -4,13 +4,13 @@
 #include <linux/types.h>
 
 struct stat {
-	dev_t		st_dev;		/* dev_t is 32 bits on parisc */
+	unsigned int	st_dev;		/* dev_t is 32 bits on parisc */
 	ino_t		st_ino;		/* 32 bits */
 	mode_t		st_mode;	/* 16 bits */
 	nlink_t		st_nlink;	/* 16 bits */
 	unsigned short	st_reserved1;	/* old st_uid */
 	unsigned short	st_reserved2;	/* old st_gid */
-	dev_t		st_rdev;
+	unsigned int	st_rdev;
 	off_t		st_size;
 	time_t		st_atime;
 	unsigned int	st_atime_nsec;
@@ -21,12 +21,12 @@ struct stat {
 	int		st_blksize;
 	int		st_blocks;
 	unsigned int	__unused1;	/* ACL stuff */
-	dev_t		__unused2;	/* network */
+	unsigned int	__unused2;	/* network */
 	ino_t		__unused3;	/* network */
 	unsigned int	__unused4;	/* cnodes */
 	unsigned short	__unused5;	/* netsite */
 	short		st_fstype;
-	dev_t		st_realdev;
+	unsigned int	st_realdev;
 	unsigned short	st_basemode;
 	unsigned short	st_spareshort;
 	uid_t		st_uid;
@@ -39,13 +39,13 @@ struct stat {
 typedef __kernel_off64_t	off64_t;
 
 struct hpux_stat64 {
-	dev_t		st_dev;		/* dev_t is 32 bits on parisc */
+	unsigned int	st_dev;		/* dev_t is 32 bits on parisc */
 	ino_t           st_ino;         /* 32 bits */
 	mode_t		st_mode;	/* 16 bits */
 	nlink_t		st_nlink;	/* 16 bits */
 	unsigned short	st_reserved1;	/* old st_uid */
 	unsigned short	st_reserved2;	/* old st_gid */
-	dev_t		st_rdev;
+	unsigned int	st_rdev;
 	off64_t		st_size;
 	time_t		st_atime;
 	unsigned int	st_spare1;
@@ -56,12 +56,12 @@ struct hpux_stat64 {
 	int		st_blksize;
 	__u64		st_blocks;
 	unsigned int	__unused1;	/* ACL stuff */
-	dev_t		__unused2;	/* network */
+	unsigned int	__unused2;	/* network */
 	ino_t           __unused3;      /* network */
 	unsigned int	__unused4;	/* cnodes */
 	unsigned short	__unused5;	/* netsite */
 	short		st_fstype;
-	dev_t		st_realdev;
+	unsigned int	st_realdev;
 	unsigned short	st_basemode;
 	unsigned short	st_spareshort;
 	uid_t		st_uid;
diff -puN include/asm-ppc64/posix_types.h~KD41-stat-B5 include/asm-ppc64/posix_types.h
--- 25/include/asm-ppc64/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-ppc64/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -12,7 +12,6 @@
  * 2 of the License, or (at your option) any later version.
  */
 
-typedef unsigned long	__kernel_dev_t;
 typedef unsigned long	__kernel_ino_t;
 typedef unsigned long  	__kernel_nlink_t;
 typedef unsigned int	__kernel_mode_t;
diff -puN include/asm-ppc64/stat.h~KD41-stat-B5 include/asm-ppc64/stat.h
--- 25/include/asm-ppc64/stat.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-ppc64/stat.h	2003-09-21 22:35:24.000000000 -0700
@@ -11,13 +11,13 @@
 #include <linux/types.h>
 
 struct stat {
-	dev_t		st_dev;
+	unsigned long	st_dev;
 	ino_t		st_ino;
 	nlink_t		st_nlink;
 	mode_t		st_mode;
 	uid_t 		st_uid;
 	gid_t 		st_gid;
-	dev_t		st_rdev;
+	unsigned long	st_rdev;
 	off_t		st_size;
 	unsigned long  	st_blksize;
 	unsigned long  	st_blocks;
diff -puN include/asm-ppc/posix_types.h~KD41-stat-B5 include/asm-ppc/posix_types.h
--- 25/include/asm-ppc/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-ppc/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -7,7 +7,6 @@
  * assume GCC is being used.
  */
 
-typedef unsigned int	__kernel_dev_t;
 typedef unsigned long	__kernel_ino_t;
 typedef unsigned int	__kernel_mode_t;
 typedef unsigned short	__kernel_nlink_t;
diff -puN include/asm-ppc/stat.h~KD41-stat-B5 include/asm-ppc/stat.h
--- 25/include/asm-ppc/stat.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-ppc/stat.h	2003-09-21 22:35:24.000000000 -0700
@@ -22,13 +22,13 @@ struct __old_kernel_stat {
 #define STAT_HAVE_NSEC 1
 
 struct stat {
-	dev_t		st_dev;
+	unsigned	st_dev;
 	ino_t		st_ino;
 	mode_t		st_mode;
 	nlink_t		st_nlink;
 	uid_t 		st_uid;
 	gid_t 		st_gid;
-	dev_t		st_rdev;
+	unsigned	st_rdev;
 	off_t		st_size;
 	unsigned long  	st_blksize;
 	unsigned long  	st_blocks;
diff -puN include/asm-s390/posix_types.h~KD41-stat-B5 include/asm-s390/posix_types.h
--- 25/include/asm-s390/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-s390/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -34,7 +34,6 @@ typedef long long       __kernel_loff_t;
 
 #ifndef __s390x__
 
-typedef unsigned short  __kernel_dev_t;
 typedef unsigned long   __kernel_ino_t;
 typedef unsigned short  __kernel_mode_t;
 typedef unsigned short  __kernel_nlink_t;
@@ -51,7 +50,6 @@ typedef unsigned short	__kernel_old_dev_
 
 #else /* __s390x__ */
 
-typedef unsigned int    __kernel_dev_t;
 typedef unsigned int    __kernel_ino_t;
 typedef unsigned int    __kernel_mode_t;
 typedef unsigned int    __kernel_nlink_t;
diff -puN include/asm-sh/posix_types.h~KD41-stat-B5 include/asm-sh/posix_types.h
--- 25/include/asm-sh/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-sh/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -7,7 +7,6 @@
  * assume GCC is being used.
  */
 
-typedef unsigned short	__kernel_dev_t;
 typedef unsigned long	__kernel_ino_t;
 typedef unsigned short	__kernel_mode_t;
 typedef unsigned short	__kernel_nlink_t;
diff -puN include/asm-sparc64/posix_types.h~KD41-stat-B5 include/asm-sparc64/posix_types.h
--- 25/include/asm-sparc64/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-sparc64/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -16,7 +16,6 @@ typedef int                    __kernel_
 typedef int                    __kernel_ipc_pid_t;
 typedef unsigned int           __kernel_uid_t;
 typedef unsigned int           __kernel_gid_t;
-typedef unsigned int           __kernel_dev_t;
 typedef unsigned long          __kernel_ino_t;
 typedef unsigned int           __kernel_mode_t;
 typedef unsigned short         __kernel_umode_t;
diff -puN include/asm-sparc64/stat.h~KD41-stat-B5 include/asm-sparc64/stat.h
--- 25/include/asm-sparc64/stat.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-sparc64/stat.h	2003-09-21 22:35:24.000000000 -0700
@@ -5,13 +5,13 @@
 #include <linux/types.h>
 
 struct stat {
-	dev_t   st_dev;
+	unsigned   st_dev;
 	ino_t   st_ino;
 	mode_t  st_mode;
 	short   st_nlink;
 	uid_t   st_uid;
 	gid_t   st_gid;
-	dev_t   st_rdev;
+	unsigned   st_rdev;
 	off_t   st_size;
 	time_t  st_atime;
 	time_t  st_mtime;
diff -puN include/asm-sparc/posix_types.h~KD41-stat-B5 include/asm-sparc/posix_types.h
--- 25/include/asm-sparc/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-sparc/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -17,7 +17,6 @@ typedef int                    __kernel_
 typedef unsigned short         __kernel_ipc_pid_t;
 typedef unsigned short         __kernel_uid_t;
 typedef unsigned short         __kernel_gid_t;
-typedef unsigned short         __kernel_dev_t;
 typedef unsigned long          __kernel_ino_t;
 typedef unsigned short         __kernel_mode_t;
 typedef unsigned short         __kernel_umode_t;
diff -puN include/asm-v850/posix_types.h~KD41-stat-B5 include/asm-v850/posix_types.h
--- 25/include/asm-v850/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-v850/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -14,7 +14,6 @@
 #ifndef __V850_POSIX_TYPES_H__
 #define __V850_POSIX_TYPES_H__
 
-typedef unsigned int	__kernel_dev_t;
 typedef unsigned long	__kernel_ino_t;
 typedef unsigned long long __kernel_ino64_t;
 typedef unsigned int	__kernel_mode_t;
diff -puN include/asm-x86_64/posix_types.h~KD41-stat-B5 include/asm-x86_64/posix_types.h
--- 25/include/asm-x86_64/posix_types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/asm-x86_64/posix_types.h	2003-09-21 22:35:24.000000000 -0700
@@ -7,7 +7,6 @@
  * assume GCC is being used.
  */
 
-typedef unsigned long	__kernel_dev_t;
 typedef unsigned long	__kernel_ino_t;
 typedef unsigned int	__kernel_mode_t;
 typedef unsigned long	__kernel_nlink_t;
diff -puN include/linux/dm-ioctl-v1.h~KD41-stat-B5 include/linux/dm-ioctl-v1.h
--- 25/include/linux/dm-ioctl-v1.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/linux/dm-ioctl-v1.h	2003-09-21 22:35:24.000000000 -0700
@@ -50,7 +50,7 @@ struct dm_ioctl {
 	uint32_t open_count;	/* out */
 	uint32_t flags;		/* in/out */
 
-	__kernel_dev_t dev;	/* in/out */
+	__kernel_old_dev_t dev;	/* in/out */
 
 	char name[DM_NAME_LEN];	/* device name */
 	char uuid[DM_UUID_LEN];	/* unique identifier for
@@ -87,7 +87,7 @@ struct dm_target_spec {
 struct dm_target_deps {
 	uint32_t count;
 
-	__kernel_dev_t dev[0];	/* out */
+	__kernel_old_dev_t dev[0];	/* out */
 };
 
 /*
diff -puN include/linux/types.h~KD41-stat-B5 include/linux/types.h
--- 25/include/linux/types.h~KD41-stat-B5	2003-09-21 22:35:24.000000000 -0700
+++ 25-akpm/include/linux/types.h	2003-09-21 22:35:24.000000000 -0700
@@ -17,6 +17,8 @@
 
 #ifndef __KERNEL_STRICT_NAMES
 
+typedef __u16 __kernel_dev_t;
+
 typedef __kernel_fd_set		fd_set;
 typedef __kernel_dev_t		dev_t;
 typedef __kernel_ino_t		ino_t;

_