Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/compat/linux/common proper statfs emulation...
details: https://anonhg.NetBSD.org/src/rev/fc8a3587bf66
branches: trunk
changeset: 522515:fc8a3587bf66
user: christos <christos%NetBSD.org@localhost>
date: Wed Feb 20 17:03:03 2002 +0000
description:
proper statfs emulation...
diffstat:
sys/compat/linux/common/linux_misc.c | 63 +++++++++++++++++++++++++++--------
sys/compat/linux/common/linux_misc.h | 33 ++++++++++++++++++-
2 files changed, 80 insertions(+), 16 deletions(-)
diffs (155 lines):
diff -r d289a1510ef7 -r fc8a3587bf66 sys/compat/linux/common/linux_misc.c
--- a/sys/compat/linux/common/linux_misc.c Wed Feb 20 17:02:48 2002 +0000
+++ b/sys/compat/linux/common/linux_misc.c Wed Feb 20 17:03:03 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_misc.c,v 1.100 2002/02/18 22:24:18 christos Exp $ */
+/* $NetBSD: linux_misc.c,v 1.101 2002/02/20 17:03:03 christos Exp $ */
/*-
* Copyright (c) 1995, 1998, 1999 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.100 2002/02/18 22:24:18 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.101 2002/02/20 17:03:03 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -131,6 +131,35 @@
-1
};
+const static struct mnttypes {
+ char *bsd;
+ int linux;
+} fstypes[] = {
+ { MOUNT_FFS, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_NFS, LINUX_NFS_SUPER_MAGIC },
+ { MOUNT_MFS, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_MSDOS, LINUX_MSDOS_SUPER_MAGIC },
+ { MOUNT_LFS, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_FDESC, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_PORTAL, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_NULL, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_OVERLAY, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_UMAP, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_KERNFS, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_PROCFS, LINUX_PROC_SUPER_MAGIC },
+ { MOUNT_AFS, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_CD9660, LINUX_ISOFS_SUPER_MAGIC },
+ { MOUNT_UNION, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_ADOSFS, LINUX_ADFS_SUPER_MAGIC },
+ { MOUNT_EXT2FS, LINUX_EXT2_SUPER_MAGIC },
+ { MOUNT_CFS, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_CODA, LINUX_CODA_SUPER_MAGIC },
+ { MOUNT_FILECORE, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_NTFS, LINUX_DEFAULT_SUPER_MAGIC },
+ { MOUNT_SMBFS, LINUX_SMB_SUPER_MAGIC }
+};
+#define FSTYPESSIZE (sizeof(fstypes) / sizeof(fstypes[0]))
+
/* Local linux_misc.c functions: */
static void bsd_to_linux_statfs __P((struct statfs *, struct linux_statfs *));
static int linux_to_bsd_limit __P((int));
@@ -261,17 +290,33 @@
struct statfs *bsp;
struct linux_statfs *lsp;
{
+ int i;
- lsp->l_ftype = bsp->f_type;
+ for (i = 0; i < FSTYPESSIZE; i++)
+ if (strcmp(bsp->f_fstypename, fstypes[i].bsd) == 0)
+ break;
+
+ if (i == FSTYPESSIZE) {
+#ifdef DIAGNOSTIC
+ printf("unhandled fstype in linux emulation: %s\n",
+ bsp->f_fstypename);
+#endif
+ lsp->l_ftype = LINUX_DEFAULT_SUPER_MAGIC;
+ } else {
+ lsp->l_ftype = fstypes[i].linux;
+ }
+
lsp->l_fbsize = bsp->f_bsize;
lsp->l_fblocks = bsp->f_blocks;
lsp->l_fbfree = bsp->f_bfree;
lsp->l_fbavail = bsp->f_bavail;
lsp->l_ffiles = bsp->f_files;
lsp->l_fffree = bsp->f_ffree;
+ /* Linux sets the fsid to 0..., we don't */
lsp->l_ffsid.val[0] = bsp->f_fsid.val[0];
lsp->l_ffsid.val[1] = bsp->f_fsid.val[1];
lsp->l_fnamelen = MAXNAMLEN; /* XXX */
+ (void)memset(lsp->l_fspare, 0, sizeof(lsp->l_fspare));
}
/*
@@ -346,18 +391,6 @@
}
/*
- * NOTE: DO NOT CHANGE THIS
- * Linux makes assumptions about specific features being present with
- * more recent kernels. Specifically, LinuxThreads use RT queued
- * signals if the kernel release is bigger. Since we don't support them
- * yet, the version needs to stay this way until we'd have the RT queued
- * signals implemented.
- */
-char linux_sysname[] = "Linux";
-char linux_release[] = "2.0.38";
-char linux_version[] = "#0 Sun Apr 1 11:11:11 MET 2000";
-
-/*
* uname(). Just copy the info from the various strings stored in the
* kernel, and put it in the Linux utsname structure. That structure
* is almost the same as the NetBSD one, only it has fields 65 characters
diff -r d289a1510ef7 -r fc8a3587bf66 sys/compat/linux/common/linux_misc.h
--- a/sys/compat/linux/common/linux_misc.h Wed Feb 20 17:02:48 2002 +0000
+++ b/sys/compat/linux/common/linux_misc.h Wed Feb 20 17:03:03 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_misc.h,v 1.6 2002/02/15 16:48:03 christos Exp $ */
+/* $NetBSD: linux_misc.h,v 1.7 2002/02/20 17:03:04 christos Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -78,6 +78,37 @@
#define LINUX_RLIMIT_LOCKS 10
#define LINUX_RLIM_INFINITY ~0ul
+
+/* When we don't know what to do, let it believe it is local */
+#define LINUX_DEFAULT_SUPER_MAGIC LINUX_EXT2_SUPER_MAGIC
+
+#define LINUX_ADFS_SUPER_MAGIC 0x0000adf5
+#define LINUX_AFFS_SUPER_MAGIC 0x0000adff
+#define LINUX_CODA_SUPER_MAGIC 0x73757245
+#define LINUX_COH_SUPER_MAGIC (LINUX_SYSV_MAGIC_BASE + 4)
+#define LINUX_DEVFS_SUPER_MAGIC 0x00001373
+#define LINUX_EFS_SUPER_MAGIC 0x00414A53
+#define LINUX_EXT2_SUPER_MAGIC 0x0000EF53
+#define LINUX_HPFS_SUPER_MAGIC 0xf995e849
+#define LINUX_ISOFS_SUPER_MAGIC 0x00009660
+#define LINUX_MINIX2_SUPER_MAGIC 0x00002468
+#define LINUX_MINIX2_SUPER_MAGIC2 0x00002478
+#define LINUX_MINIX_SUPER_MAGIC 0x0000137F
+#define LINUX_MINIX_SUPER_MAGIC2 0x0000138F
+#define LINUX_MSDOS_SUPER_MAGIC 0x00004d44
+#define LINUX_NCP_SUPER_MAGIC 0x0000564c
+#define LINUX_NFS_SUPER_MAGIC 0x00006969
+#define LINUX_OPENPROM_SUPER_MAGIC 0x00009fa1
+#define LINUX_PROC_SUPER_MAGIC 0x00009fa0
+#define LINUX_QNX4_SUPER_MAGIC 0x0000002f
+#define LINUX_REISERFS_SUPER_MAGIC 0x52654973
+#define LINUX_SMB_SUPER_MAGIC 0x0000517B
+#define LINUX_SYSV2_SUPER_MAGIC (LINUX_SYSV_MAGIC_BASE + 3)
+#define LINUX_SYSV4_SUPER_MAGIC (LINUX_SYSV_MAGIC_BASE + 2)
+#define LINUX_SYSV_MAGIC_BASE 0x012FF7B3
+#define LINUX_USBDEVICE_SUPER_MAGIC 0x00009fa2
+#define LINUX_XENIX_SUPER_MAGIC (LINUX_SYSV_MAGIC_BASE + 1)
+
#ifdef _KERNEL
__BEGIN_DECLS
void bsd_to_linux_wstat __P((int *));
Home |
Main Index |
Thread Index |
Old Index