From 9ecd376256edb5fbb7d777d3e7f2f88ca5e28760 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Thu, 10 May 2012 22:12:28 -0700 Subject: [PATCH] mount - Split mount into mount_ufs, auto-detect fstype from disklabel * Move the compiled-in ufs mount code from mount to a new utility called mount_ufs. * When mount determines the filesystem type is ufs it now exec's mount_ufs instead of calling the built-in ufs code. * When mounting a disklabeled device and the fstype is not specified mount will attempt to figure out the fstype from the disklabel. Devices matching acd%d and cd%d will default to the 'cd9660' fstype. It defaults to ufs if it cannot figure it out (as before). * If your filesystems are properly labeled this allows you to specify the mount generically as in this example: mount /dev/da0s1d /mnt And mount will exec mount_ufs or mount_hammer (etc...) as appropriate. * NOTE! mount cannot currently auto-detect msdosfs or extract the DOS slice type. It would be cool if it were extended further to do this as well. Currently it only understands DragonFly disklabels. --- sbin/Makefile | 1 + sbin/mount/Makefile | 4 +- sbin/mount/extern.h | 3 - sbin/mount/mount.c | 107 +++++- sbin/{mount => mount_ufs}/Makefile | 10 +- sbin/{mount => mount_ufs}/mount.c | 9 +- sbin/mount_ufs/mount_ufs.8 | 448 ++++++++++++++++++++++++++ sbin/{mount => mount_ufs}/mount_ufs.c | 0 sys/sys/dtype.h | 92 ++++-- 9 files changed, 619 insertions(+), 55 deletions(-) copy sbin/{mount => mount_ufs}/Makefile (68%) copy sbin/{mount => mount_ufs}/mount.c (99%) create mode 100644 sbin/mount_ufs/mount_ufs.8 rename sbin/{mount => mount_ufs}/mount_ufs.c (100%) diff --git a/sbin/Makefile b/sbin/Makefile index c1896fd300..35ae39ad28 100644 --- a/sbin/Makefile +++ b/sbin/Makefile @@ -48,6 +48,7 @@ SUBDIR= adjkerntz \ mknod \ mountctl \ mount \ + mount_ufs \ mount_cd9660 \ mount_devfs \ mount_ext2fs \ diff --git a/sbin/mount/Makefile b/sbin/mount/Makefile index c6c6e0657d..4132ddab57 100644 --- a/sbin/mount/Makefile +++ b/sbin/mount/Makefile @@ -3,10 +3,8 @@ # $DragonFly: src/sbin/mount/Makefile,v 1.5 2006/10/28 20:42:54 pavalos Exp $ PROG= mount -SRCS= mount.c mount_ufs.c getmntopts.c vfslist.c +SRCS= mount.c getmntopts.c vfslist.c MAN= mount.8 # We do NOT install the getmntopts.3 man page. -MLINKS+= mount.8 mount_ufs.8 - .include diff --git a/sbin/mount/extern.h b/sbin/mount/extern.h index 7825699c8e..08db088075 100644 --- a/sbin/mount/extern.h +++ b/sbin/mount/extern.h @@ -30,6 +30,3 @@ /* vfslist.c */ int checkvfsname(const char *, const char **); const char **makevfslist(char *); - -/* mount_ufs.c */ -int mount_ufs(int, const char **); diff --git a/sbin/mount/mount.c b/sbin/mount/mount.c index 9c8167729c..0a4ca5065e 100644 --- a/sbin/mount/mount.c +++ b/sbin/mount/mount.c @@ -39,11 +39,15 @@ #include #include #include +#define DKTYPENAMES +#include +#include #include #include #include #include +#include #include #include #include @@ -79,16 +83,16 @@ static void putfsent(const struct statfs *); static void usage(void); static char *flags2opts(int); static char *xstrdup(const char *str); +static void checkdisklabel(const char *devpath, const char **vfstypep); /* * List of VFS types that can be remounted without becoming mounted on top * of each other. * XXX Is this list correct? */ -static const char * -remountable_fs_names[] = { - "ufs", "ffs", "ext2fs", - 0 +static const char *remountable_fs_names[] = { + "ufs", "ffs", "ext2fs", "hammer", "hammer2", + NULL }; int @@ -106,7 +110,7 @@ main(int argc, char **argv) options = NULL; vfslist = NULL; vfstype = "ufs"; - while ((ch = getopt(argc, argv, "adF:fo:prwt:uv")) != -1) + while ((ch = getopt(argc, argv, "adF:fo:prwt:uv")) != -1) { switch (ch) { case 'a': all = 1; @@ -151,6 +155,7 @@ main(int argc, char **argv) usage(); /* NOTREACHED */ } + } argc -= optind; argv += optind; @@ -253,13 +258,25 @@ main(int argc, char **argv) case 2: /* * If -t flag has not been specified, the path cannot be - * found, spec contains either a ':' or a '@', and the - * spec is not a file with those characters, then assume - * that an NFS filesystem is being specified ala Sun. + * found. + * + * If the spec is not a file and contains a ':' then assume + * NFS. + * + * If the spec is a cdev attempt to extract the fstype from + * the label. + * + * When all else fails ufs is assumed. */ - if (vfslist == NULL && strpbrk(argv[0], ":@") != NULL && - access(argv[0], 0) == -1) - vfstype = "nfs"; + if (vfslist == NULL) { + if (strpbrk(argv[0], ":") != NULL && + access(argv[0], 0) == -1) { + vfstype = "nfs"; + } else { + checkdisklabel(argv[0], &vfstype); + } + } + rval = mountfs(vfstype, getdevpath(argv[0], 0), argv[1], init_flags, options, NULL); break; @@ -408,9 +425,6 @@ mountfs(const char *vfstype, const char *spec, const char *name, int flags, free(optbuf); return (1); case 0: /* Child. */ - if (strcmp(vfstype, "ufs") == 0) - exit(mount_ufs(argc, argv)); - /* Go find an executable. */ for (edir = edirs; *edir; edir++) { snprintf(execname, @@ -742,3 +756,68 @@ xstrdup(const char *str) } return ret; } + +/* + * Hack 'cd9660' for the default fstype on cd media if no disklabel + * found. + */ +static int +iscdmedia(const char *path, int fd __unused) +{ + int n; + + if (strrchr(path, '/')) + path = strrchr(path, '/') + 1; + if (sscanf(path, "acd%d", &n) == 1) + return 1; + if (sscanf(path, "cd%d", &n) == 1) + return 1; + return 0; +} + +/* + * If the device path is a cdev attempt to access the disklabel to determine + * the filesystem type. Adjust *vfstypep if we can figure it out + * definitively. + * + * Ignore any portion of the device path after an '@' or ':'. + */ +static void +checkdisklabel(const char *devpath, const char **vfstypep) +{ + struct stat st; + struct partinfo info; + char *path = strdup(devpath); + int fd; + + if (strchr(path, '@')) + *strchr(path, '@') = 0; + if (strchr(path, ':')) + *strchr(path, ':') = 0; + + if (stat(path, &st) < 0) + goto done; + if (!S_ISCHR(st.st_mode)) + goto done; + fd = open(path, O_RDONLY); + if (fd < 0) + goto done; + if (ioctl(fd, DIOCGPART, &info) == 0) { + if (info.fstype >= 0 && info.fstype < (int)FSMAXTYPES) { + if (fstype_to_vfsname[info.fstype]) { + *vfstypep = fstype_to_vfsname[info.fstype]; + } else if (iscdmedia(path, fd)) { + *vfstypep = "cd9660"; + } else { + fprintf(stderr, + "mount: warning: fstype in disklabel " + "not set to anything I understand\n"); + fprintf(stderr, + "attempting to mount with -t ufs\n"); + } + } + } + close(fd); +done: + free(path); +} diff --git a/sbin/mount/Makefile b/sbin/mount_ufs/Makefile similarity index 68% copy from sbin/mount/Makefile copy to sbin/mount_ufs/Makefile index c6c6e0657d..8570a225f2 100644 --- a/sbin/mount/Makefile +++ b/sbin/mount_ufs/Makefile @@ -2,11 +2,13 @@ # $FreeBSD: src/sbin/mount/Makefile,v 1.9.2.1 2001/04/25 10:58:33 ru Exp $ # $DragonFly: src/sbin/mount/Makefile,v 1.5 2006/10/28 20:42:54 pavalos Exp $ -PROG= mount +PROG= mount_ufs SRCS= mount.c mount_ufs.c getmntopts.c vfslist.c -MAN= mount.8 -# We do NOT install the getmntopts.3 man page. +MAN= mount_ufs.8 -MLINKS+= mount.8 mount_ufs.8 +MOUNT= ${.CURDIR}/../mount +CFLAGS+= -I${.CURDIR}/../../sys -I${MOUNT} + +.PATH: ${MOUNT} .include diff --git a/sbin/mount/mount.c b/sbin/mount_ufs/mount.c similarity index 99% copy from sbin/mount/mount.c copy to sbin/mount_ufs/mount.c index 9c8167729c..e91f0218e0 100644 --- a/sbin/mount/mount.c +++ b/sbin/mount_ufs/mount.c @@ -57,7 +57,7 @@ #include "pathnames.h" /* `meta' options */ -#define MOUNT_META_OPTION_FSTAB "fstab" +#define MOUNT_META_OPTION_FSTAB "fstab" #define MOUNT_META_OPTION_CURRENT "current" int debug, fstab_style, verbose; @@ -80,6 +80,9 @@ static void usage(void); static char *flags2opts(int); static char *xstrdup(const char *str); +/* mount_ufs.c */ +int mount_ufs(int, const char **); + /* * List of VFS types that can be remounted without becoming mounted on top * of each other. @@ -611,7 +614,7 @@ update_options(char *opts, char *fstab, int curflags) for (p = expopt; (o = strsep(&p, ",")) != NULL;) { if ((tmpopt = malloc( strlen(o) + 2 + 1 )) == NULL) errx(1, "malloc failed"); - + strcpy(tmpopt, "no"); strcat(tmpopt, o); remopt(newopt, tmpopt); @@ -684,7 +687,7 @@ putfsent(const struct statfs *ent) struct stat sb; struct fstab *fst; char *opts; - + opts = flags2opts(ent->f_flags); printf("%s\t%s\t%s %s", ent->f_mntfromname, ent->f_mntonname, ent->f_fstypename, opts); diff --git a/sbin/mount_ufs/mount_ufs.8 b/sbin/mount_ufs/mount_ufs.8 new file mode 100644 index 0000000000..193b51236e --- /dev/null +++ b/sbin/mount_ufs/mount_ufs.8 @@ -0,0 +1,448 @@ +.\" Copyright (c) 1980, 1989, 1991, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)mount.8 8.8 (Berkeley) 6/16/94 +.\" $FreeBSD: src/sbin/mount/mount.8,v 1.31.2.12 2003/02/23 21:17:42 trhodes Exp $ +.\" +.Dd October 7, 2011 +.Dt MOUNT 8 +.Os +.Sh NAME +.Nm mount +.Nd mount file systems +.Sh SYNOPSIS +.Nm +.Op Fl adfpruvw +.Op Fl F Ar fstab +.Op Fl o Ar options +.Op Fl t Ar type +.Nm +.Op Fl dfpruvw +.Brq Ar special | node +.Nm +.Op Fl dfpruvw +.Op Fl o Ar options +.Op Fl t Ar type +.Ar special node +.Sh DESCRIPTION +The +.Nm +utility calls the +.Xr mount 2 +system call to prepare and graft a +.Ar "special device" +or the remote node (rhost:path) on to the file system tree at the point +.Ar node . +If either +.Ar special +or +.Ar node +are not provided, the appropriate information is taken from the +.Xr fstab 5 +file. +.Pp +The system maintains a list of currently mounted file systems. +If no arguments are given to +.Nm , +this list is printed. +.Pp +The options are as follows: +.Bl -tag -width indent +.It Fl a +All the filesystems described in +.Xr fstab 5 +are mounted. +Exceptions are those marked as +.Dq noauto , +excluded by the +.Fl t +flag (see below), or if they are already mounted (except the +root filesystem which is always remounted to preserve +traditional single user mode behavior). +.It Fl d +Causes everything to be done except for the actual system call. +This option is useful in conjunction with the +.Fl v +flag to +determine what the +.Nm +command is trying to do. +.It Fl F Ar fstab +Specify the +.Pa fstab +file to use. +.It Fl f +Forces the revocation of write access when trying to downgrade +a filesystem mount status from read-write to read-only. +Also +forces the R/W mount of an unclean filesystem (dangerous; use with +caution). +.It Fl o +Options are specified with a +.Fl o +flag followed by a comma separated string of options. +If a +.Dq no +prefix is added or removed from a option name, then meaning is negated. +In case of conflicting options being specified, the rightmost option +takes effect. +The following options are available: +.Bl -tag -width indent +.It Cm async +All +.Tn I/O +to the file system should be done asynchronously. +This is a +.Em dangerous +flag to set, +and should not be used unless you are prepared to recreate the file +system should your system crash. +.It Cm current +When used with the +.Fl u +flag, this is the same as specifying the options currently in effect for +the mounted filesystem. +.It Cm force +The same as +.Fl f ; +forces the revocation of write access when trying to downgrade +a filesystem mount status from read-write to read-only. +Also +forces the R/W mount of an unclean filesystem (dangerous; use with caution). +.It Cm fstab +When used with the +.Fl u +flag, this is the same as specifying all the options listed in the +.Xr fstab 5 +file for the filesystem. +.It Cm noasync +Metadata I/O should be done synchronously, while data I/O should be done +asynchronously. +This is the default. +.It Cm noatime +Do not update the file access time when reading from a file. +This option +is useful on filesystems where there are large numbers of files and +performance is more critical than updating the file access time (which is +rarely ever important). +This option is currently only supported on local filesystems. +.It Cm noauto +This filesystem should be skipped when +.Nm +is run with the +.Fl a +flag. +.It Cm noclusterr +Disable read clustering. +.It Cm noclusterw +Disable write clustering. +.It Cm nodev +Do not interpret character or block special devices on the file system. +This option is useful for a server that has file systems containing +special devices for architectures other than its own. +This option is set automatically when the user does not have super-user +privileges. +.It Cm noexec +Do not allow execution of any binaries on the mounted file system. +This option is useful for a server that has file systems containing +binaries for architectures other than its own. +.It Cm nosuid +Do not allow set-user-identifier or set-group-identifier bits to take effect. +Note: this option is worthless if a public available suid or sgid +wrapper like +.Xr suidperl 1 +is installed on your system. +It is set automatically when the user does not have super-user privileges. +.It Cm nosymfollow +Do not follow symlinks +on the mounted file system. +.It Cm rdonly , ro , norw +The same as +.Fl r ; +mount the file system read-only (even the super-user may not write it). +.It Cm sync +All +.Tn I/O +to the file system should be done synchronously. +.It Cm trim +If the device supports TRIM +.Va ( kern.cam.da.X.trim_enabled +exists) and is set, +the file system will perform online trim for corresponding block deletions. +Currently, only +.Xr UFS 5 +supports this feature. +.It Cm suiddir +A directory on the mounted filesystem will respond to the SUID bit +being set, by setting the owner of any new files to be the same +as the owner of the directory. +New directories will inherit the bit from their parents. +Execute bits are removed from +the file, and it will not be given to root. +.Pp +This feature is designed for use on fileservers serving PC users via +ftp or SAMBA. +It provides security holes for shell users and as +such should not be used on shell machines, especially on home directories. +This option requires the SUIDDIR +option in the kernel to work. +Only +.Xr UFS 5 +filesystems support this option. +See +.Xr chmod 2 +for more information. +.It Cm update +The same as +.Fl u ; +indicate that the status of an already mounted file system should be changed. +.It Cm union +Causes the namespace at the mount point to appear as the union +of the mounted filesystem root and the existing directory. +Lookups will be done in the mounted filesystem first. +If those operations fail due to a non-existent file the underlying +directory is then accessed. +All creates are done in the mounted filesystem. +.It Cm ignore +Will be ignored by +.Xr df 1 . +.El +.Pp +Any additional options specific to a filesystem type that is not +one of the internally known types (see the +.Fl t +option) may be passed as a comma separated list; these options are +distinguished by a leading +.Dq \&- +(dash). +Options that take a value are specified using the syntax -option=value. +For example, the +.Nm +command: +.Bd -literal -offset indent +mount -t mfs -o nosuid,-N,-s=4000 /dev/da0s0b /tmp +.Ed +.Pp +causes +.Nm +to execute the equivalent of: +.Bd -literal -offset indent +/sbin/mount_mfs -o nosuid -N -s 4000 /dev/da0s0b /tmp +.Ed +.Pp +Additional options specific to filesystem types +which are not internally known +(see the description of the +.Fl t +option below) +may be described in the manual pages for the associated +.Pa /sbin/mount_ Ns Sy XXX +utilities. +.It Fl p +Print mount information in +.Xr fstab 5 +format. +If fstab is missing or if the freq and passno fields are omitted, +the default values as described in +.Xr fstab 5 +are used. +Implies also the +.Fl v +option. +.It Fl r +The file system is to be mounted read-only. +Mount the file system read-only (even the super-user may not write it). +The same as the +.Cm rdonly +argument to the +.Fl o +option. +.It Fl t Ar type +The argument following the +.Fl t +is used to indicate the file system type. +The type +.Cm ufs +is the default. +The +.Fl t +option can be used +to indicate that the actions should only be taken on +filesystems of the specified type. +More than one type may be specified in a comma separated list. +The list of filesystem types can be prefixed with +.Dq no +to specify the filesystem types for which action should +.Em not +be taken. +For example, the +.Nm +command: +.Bd -literal -offset indent +mount -a -t nonfs,mfs +.Ed +.Pp +mounts all filesystems except those of type +.Tn NFS +and +.Tn MFS . +.Pp +If the type is not the internally known type, +.Cm ufs , +.Nm +will attempt to execute a program in +.Pa /sbin/mount_ Ns Sy XXX +where +.Sy XXX +is replaced by the type name. +For example, nfs filesystems are mounted by the program +.Pa /sbin/mount_nfs . +.Pp +Most filesystems will be dynamically loaded by their +.Nm +programs +if not already present in the kernel, using the +.Xr vfsload 3 +subroutine. +Because this mechanism requires writable temporary space, +the filesystem type containing +.Pa /tmp +must be compiled into the kernel, and the filesystems containing +.Pa /tmp +and +.Pa /usr/bin/ld +must be listed in +.Pa /etc/fstab +before any filesystems which might be dynamically loaded. +.It Fl u +The +.Fl u +flag indicates that the status of an already mounted file +system should be changed. +Any of the options discussed above (the +.Fl o +option) +may be changed; +also a file system can be changed from read-only to read-write +or vice versa. +An attempt to change from read-write to read-only will fail if any +files on the filesystem are currently open for writing unless the +.Fl f +flag is also specified. +The set of options is determined by applying the options specified +in the argument to +.Fl o +and finally applying the +.Fl r +or +.Fl w +option. +.It Fl v +Verbose mode. +.It Fl w +The file system object is to be read and write. +.El +.Sh ENVIRONMENT +.Bl -tag -width PATH_FSTAB +.It Pa PATH_FSTAB +If the environment variable +.Pa PATH_FSTAB +is set all operations are performed against the specified file. +.El +.Sh FILES +.Bl -tag -width /etc/fstab -compact +.It Pa /etc/fstab +file system table +.El +.Sh DIAGNOSTICS +Various, most of them are self-explanatory. +.Pp +.Dl XXXXX filesystem is not available +.Pp +The kernel does not support the respective filesystem type. +Note that +support for a particular filesystem might be provided either on a static +(kernel compile-time), or dynamic basis (loaded as a kernel module by +.Xr kldload 8 ) . +Normally, +.Nm +or its subprocesses attempt to dynamically load a filesystem module if +it has not been configured statically, using +.Xr vfsload 3 . +In this case, the above error message can also mean that you did not +have permission to load the module. +.Sh SEE ALSO +.Xr df 1 , +.Xr lsvfs 1 , +.Xr mount 2 , +.Xr vfsload 3 , +.Xr devtab 5 , +.Xr fstab 5 , +.Xr UFS 5 , +.Xr kldload 8 , +.Xr mount_cd9660 8 , +.Xr mount_devfs 8 , +.Xr mount_ext2fs 8 , +.Xr mount_fdesc 8 , +.Xr mount_hammer 8 , +.Xr mount_hpfs 8 , +.Xr mount_linprocfs 8 , +.Xr mount_mfs 8 , +.Xr mount_msdos 8 , +.Xr mount_nfs 8 , +.Xr mount_ntfs 8 , +.Xr mount_null 8 , +.Xr mount_nwfs 8 , +.Xr mount_portal 8 , +.Xr mount_procfs 8 , +.Xr mount_smbfs 8 , +.Xr mount_std 8 , +.Xr mount_tmpfs 8 , +.Xr mount_udf 8 , +.Xr mount_union 8 , +.Xr sysctl 8 , +.Xr umount 8 +.Sh CAVEATS +After a successful +.Nm , +the permissions on the original mount point determine if +.Pa ..\& +is accessible from the mounted file system. +The minimum permissions for +the mount point for traversal across the mount point in both +directions to be possible for all users is 0111 (execute for all). +.Sh HISTORY +A +.Nm +utility appeared in +.At v1 . +.Sh BUGS +It is possible for a corrupted file system to cause a crash. diff --git a/sbin/mount/mount_ufs.c b/sbin/mount_ufs/mount_ufs.c similarity index 100% rename from sbin/mount/mount_ufs.c rename to sbin/mount_ufs/mount_ufs.c diff --git a/sys/sys/dtype.h b/sys/sys/dtype.h index 2d52caceca..8af82b701c 100644 --- a/sys/sys/dtype.h +++ b/sys/sys/dtype.h @@ -104,43 +104,79 @@ static const char *dktypenames[] = { #define FS_RESERVED20 20 /* (CCD under FreeBSD) */ #define FS_JFS2 21 #define FS_HAMMER 22 +#define FS_HAMMER2 23 #define FS_UDF 24 #define FS_EFS 26 #define FS_ZFS 27 #ifdef DKTYPENAMES + static const char *fstypenames[] = { - "unused", - "swap", - "Version 6", - "Version 7", - "System V", - "4.1BSD", - "Eighth Edition", - "4.2BSD", - "MSDOS", - "4.4LFS", - "unknown", - "HPFS", - "ISO9660", - "boot", - "vinum", - "raid", - "?", - "?", - "?", - "ccd", - "?", /* don't use in case freebsd reassigns jfs / bug in freebsd */ - "jfs", - "HAMMER", - "?", - "UDF", - "?", - "EFS", - "ZFS", + "unused", /* 0 */ + "swap", /* 1 */ + "Version 6", /* 2 */ + "Version 7", /* 3 */ + "System V", /* 4 */ + "4.1BSD", /* 5 */ + "Eighth Edition", /* 6 */ + "4.2BSD", /* 7 */ + "MSDOS", /* 8 */ + "4.4LFS", /* 9 */ + "unknown", /* 10 */ + "HPFS", /* 11 */ + "ISO9660", /* 12 */ + "boot", /* 13 */ + "vinum", /* 14 */ + "raid", /* 15 */ + "?", /* 16 */ + "?", /* 17 */ + "?", /* 18 */ + "ccd", /* 19 */ + "?", /* 20 (do not reuse, bug in freebsd) */ + "jfs", /* 21 */ + "HAMMER", /* 22 */ + "HAMMER2", /* 23 */ + "UDF", /* 24 */ + "?", /* 25 */ + "EFS", /* 26 */ + "ZFS", /* 27 */ NULL }; + +static const char *fstype_to_vfsname[] = { + NULL, /* 0 */ + NULL, /* 1 */ + NULL, /* 2 */ + NULL, /* 3 */ + NULL, /* 4 */ + NULL, /* 5 */ + NULL, /* 6 */ + "ufs", /* 7 */ + "msdos", /* 8 */ + NULL, /* 9 */ + NULL, /* 10 */ + "hpfs", /* 11 */ + "cd9660", /* 12 */ + NULL, /* 13 */ + NULL, /* 14 */ + NULL, /* 15 */ + NULL, /* 16 */ + NULL, /* 17 */ + NULL, /* 18 */ + NULL, /* 19 */ + NULL, /* 20 */ + NULL, /* 21 */ + "hammer", /* 22 */ + "hammer2", /* 23 */ + "udf", /* 24 */ + NULL, /* 25 */ + NULL, /* 26 */ + NULL, /* 27 */ + NULL +}; + #define FSMAXTYPES (NELEM(fstypenames) - 1) + #endif #endif /* SYS_DTYPE_H_ */ -- 2.41.0