Date: Sat, 11 Dec 1999 16:59:18 -0500 (EST) From: vsilyaev@mindspring.com To: FreeBSD-gnats-submit@freebsd.org Cc: marcel@scc.nl Subject: kern/15425: statfs and fstatfs syscall in linux emulator Message-ID: <199912112159.QAA00584@mindspring.com>
next in thread | raw e-mail | index | archive | help
>Number: 15425
>Category: kern
>Synopsis: statfs and fstatfs syscall in linux emulator
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sat Dec 11 14:00:01 PST 1999
>Closed-Date:
>Last-Modified:
>Originator: Vladimir N.Silyaev
>Release: FreeBSD 4.0-CURRENT i386
>Organization:
>Environment:
FreeBSD 4.0-CURRENT i386
Linux emulator and any linux program, that examine filesystem type
>Description:
Linux program confused by BSD filesystem types.
>How-To-Repeat:
Linux have different filestems type, than a FreeBSD.
Currently linux emulator assume, that FreeBSD filesystem type
equal Linux, this affect the statfs and fstatfs syscalls.
>Fix:
The following patch provide required translations.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
--- sys/i386/linux/linux_stats.c.orig Fri Dec 3 20:12:40 1999
+++ sys/i386/linux/linux_stats.c Sat Dec 11 13:59:42 1999
@@ -204,6 +204,52 @@
long fspare[6];
};
+#define LINUX_EXT2_SUPER_MAGIC 0xEF53
+#define LINUX_NFS_SUPER_MAGIC 0x6969
+#define LINUX_MSDOS_SUPER_MAGIC 0x4d44
+#define LINUX_PROC_SUPER_MAGIC 0x9fa0
+#define LINUX_ADFS_SUPER_MAGIC 0xadf5
+#define LINUX_ISOFS_SUPER_MAGIC 0x9660
+#define LINUX_CODA_SUPER_MAGIC 0x73757245
+#define LINUX_NTFS_SUPER_MAGIC 0x5346544E
+#define LINUX_HPFS_SUPER_MAGIC 0xf995e849
+
+static const long bsd_to_linux_ftype_[] = {
+ /* from sys/vnode.h */
+0, /* VT_NON */
+LINUX_EXT2_SUPER_MAGIC, /* VT_UFS */ /* this is a fake, but ext2fs use VT_UFS */
+LINUX_NFS_SUPER_MAGIC, /* VT_NFS */
+LINUX_EXT2_SUPER_MAGIC, /* VT_MFS */ /* another one fake */
+LINUX_MSDOS_SUPER_MAGIC,/* VT_PC */
+LINUX_EXT2_SUPER_MAGIC, /* VT_LFS */
+LINUX_EXT2_SUPER_MAGIC, /* VT_LOFS */
+LINUX_PROC_SUPER_MAGIC, /* VT_FDESC */
+LINUX_EXT2_SUPER_MAGIC, /* VT_PORTAL */
+LINUX_EXT2_SUPER_MAGIC, /* VT_NULL */
+LINUX_EXT2_SUPER_MAGIC, /* VT_UMAP */
+LINUX_PROC_SUPER_MAGIC, /* VT_KERNFS */
+LINUX_PROC_SUPER_MAGIC, /* VT_PROCFS */
+LINUX_ADFS_SUPER_MAGIC, /* VT_AFS */
+LINUX_ISOFS_SUPER_MAGIC,/* VT_ISOFS */
+LINUX_EXT2_SUPER_MAGIC, /* VT_UNION */
+LINUX_MSDOS_SUPER_MAGIC,/* VVT_MSDOSFS */
+LINUX_PROC_SUPER_MAGIC, /* VT_DEVFS */
+LINUX_EXT2_SUPER_MAGIC, /* VT_TFS */
+LINUX_EXT2_SUPER_MAGIC, /* VT_VFS */
+LINUX_CODA_SUPER_MAGIC, /* VT_CODA */
+LINUX_NTFS_SUPER_MAGIC, /* VT_NTFS */
+LINUX_HPFS_SUPER_MAGIC /* VT_HPFS */
+};
+
+static long
+bsd_to_linux_ftype(int bsd_f_type)
+{
+ if (bsd_f_type<sizeof(bsd_to_linux_ftype_)/sizeof(*bsd_to_linux_ftype_))
+ return bsd_to_linux_ftype_[bsd_f_type];
+ else
+ return bsd_f_type;
+}
+
int
linux_statfs(struct proc *p, struct linux_statfs_args *args)
{
@@ -233,7 +279,7 @@
if (error)
return error;
bsd_statfs->f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
- linux_statfs_buf.ftype = bsd_statfs->f_type;
+ linux_statfs_buf.ftype = bsd_to_linux_ftype(bsd_statfs->f_type);
linux_statfs_buf.fbsize = bsd_statfs->f_bsize;
linux_statfs_buf.fblocks = bsd_statfs->f_blocks;
linux_statfs_buf.fbfree = bsd_statfs->f_bfree;
@@ -268,7 +314,7 @@
if (error)
return error;
bsd_statfs->f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
- linux_statfs_buf.ftype = bsd_statfs->f_type;
+ linux_statfs_buf.ftype = bsd_to_linux_ftype(bsd_statfs->f_type);
linux_statfs_buf.fbsize = bsd_statfs->f_bsize;
linux_statfs_buf.fblocks = bsd_statfs->f_blocks;
linux_statfs_buf.fbfree = bsd_statfs->f_bfree;
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
After aplying this patch, some programs including vmware, don't
be complained about unknown filesystem type.
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199912112159.QAA00584>
