diff -u -N -r linux.orig/fs/nfs/inode.c linux.nfs/fs/nfs/inode.c --- linux.orig/fs/nfs/inode.c Tue Feb 13 19:14:28 2001 +++ linux.nfs/fs/nfs/inode.c Fri Mar 9 10:58:47 2001 @@ -548,6 +548,22 @@ nfs_zap_caches(inode); } +/* This kludge (of Lance's) converts 16bit DUNIX device numbers + * into 8-bit Linux ones. + */ +static u32 +do_that_magic(u32 rdev) +{ + if (((rdev & 0xffff0000) != 0) && + ((rdev & 0x0ff000ff) == rdev)) { + u32 tmp ; + tmp = ((rdev & 0x0ff00000) >> 12) | (rdev & 0xff) ; + //printk("doing that magic!! %08x -> %08x\n", rdev, tmp) ; + rdev = tmp ; + } + return rdev ; +} + /* * Fill in inode information from the fattr. */ @@ -575,7 +591,7 @@ } else if (S_ISLNK(inode->i_mode)) inode->i_op = &nfs_symlink_inode_operations; else - init_special_inode(inode, inode->i_mode, fattr->rdev); + init_special_inode(inode, inode->i_mode, do_that_magic(fattr->rdev)); /* * Preset the size and mtime, as there's no need * to invalidate the caches. @@ -1010,7 +1026,7 @@ } inode->i_rdev = 0; if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) - inode->i_rdev = to_kdev_t(fattr->rdev); + inode->i_rdev = to_kdev_t(do_that_magic(fattr->rdev)); /* Update attrtimeo value */ if (!invalid && time_after(jiffies, NFS_ATTRTIMEO_UPDATE(inode)+NFS_ATTRTIMEO(inode))) { diff -u -N -r linux.orig/fs/nfs/mount_clnt.c linux.nfs/fs/nfs/mount_clnt.c --- linux.orig/fs/nfs/mount_clnt.c Thu Apr 13 10:54:19 2000 +++ linux.nfs/fs/nfs/mount_clnt.c Fri Mar 9 10:58:47 2001 @@ -87,7 +87,7 @@ clnt = rpc_create_client(xprt, hostname, &mnt_program, version, - RPC_AUTH_NULL); + RPC_AUTH_UNIX); if (!clnt) { xprt_destroy(xprt); } else { diff -u -N -r linux.orig/fs/nfs/proc.c linux.nfs/fs/nfs/proc.c --- linux.orig/fs/nfs/proc.c Fri Feb 9 14:29:44 2001 +++ linux.nfs/fs/nfs/proc.c Mon Apr 30 16:54:48 2001 @@ -181,6 +181,10 @@ return status; } +/* convert Linux major/minor number into Tru64 major/minor */ +#define linux2tru64(rdev) \ + (MAJOR((rdev))<<20 | MINOR((rdev))) + /* * In NFSv2, mknod is grafted onto the create call. */ @@ -201,7 +205,7 @@ sattr->ia_valid &= ~ATTR_SIZE; } else if (S_ISCHR(mode) || S_ISBLK(mode)) { sattr->ia_valid |= ATTR_SIZE; - sattr->ia_size = rdev; /* get out your barf bag */ + sattr->ia_size = linux2tru64(rdev); /* get out your barf bag */ } fattr->valid = 0;