From 7842f151ba566f9b107cdae56983eecfc3b270d2 Mon Sep 17 00:00:00 2001 From: Paul Richards Date: Fri, 29 Dec 2000 00:44:42 +0000 Subject: [PATCH] Map FreeBSD character device hard disks to Linux block device hard disks. This fixes the problem with VMWARE not being able to use raw disks. --- sys/compat/linux/linux_stats.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sys/compat/linux/linux_stats.c b/sys/compat/linux/linux_stats.c index fa91a2da53db..18d76ff98da5 100644 --- a/sys/compat/linux/linux_stats.c +++ b/sys/compat/linux/linux_stats.c @@ -44,6 +44,8 @@ #include #include +#include + struct linux_newstat { #ifdef __alpha__ u_int stat_dev; @@ -112,6 +114,18 @@ newstat_copyout(struct stat *buf, void *ubuf) tbuf.stat_ctime = buf->st_ctime; tbuf.stat_blksize = buf->st_blksize; tbuf.stat_blocks = buf->st_blocks; + if (tbuf.stat_mode & S_IFCHR && + (umajor(buf->st_rdev) == 116 || + umajor(buf->st_rdev) == 13)) { + + tbuf.stat_mode &= ~S_IFCHR; + tbuf.stat_mode |= S_IFBLK; + + /* XXX this may not be quite right */ + /* Map major number to 0 */ + tbuf.stat_dev = uminor(buf->st_dev) & 0xf; + tbuf.stat_rdev = buf->st_rdev & 0xff; + } return (copyout(&tbuf, ubuf, sizeof(tbuf))); }