usr/src/uts/common/os/vfs_conf.c
author th199096
Mon, 02 Apr 2007 21:38:04 -0700
changeset 3957 86c9dda5df37
parent 3898 c788126f2a20
child 5648 161f8007cab9
permissions -rw-r--r--
PSARC/2007/052 In-kernel Sharetab 6371468 /etc/dfs/sharetab should be a mntfs style file
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
2621
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 0
diff changeset
     5
 * Common Development and Distribution License (the "License").
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 0
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
/*
3898
c788126f2a20 PSARC/2007/124 Strong Type-Checking for VFS Operation Registration Mechanism
rsb
parents: 2621
diff changeset
    22
 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
/* SunOS-4.1 1.16	*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
#include <sys/param.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#include <sys/vfs.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
#include <sys/t_lock.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
extern int swapinit(int fstype, char *name);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
 * WARNING: THE POSITIONS OF FILESYSTEM TYPES IN THIS TABLE SHOULD NOT
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
 * BE CHANGED. These positions are used in generating fsids and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
 * fhandles.  Thus, changing positions will cause a server to change
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
 * the fhandle it gives out for a file.  It is okay to reuse formerly
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
 * used slots, just be sure that we're not going to start supporting
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
 * the former owner of the slot again.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
 * Since there's been some question about whether the above comment is
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
 * true, let's provide more detail.  Most filesystems call
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 * vfs_make_fsid with two arguments that go into making the fsid: the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
 * dev number, and the fs type number - which is the offset of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
 * filesystem's entry in the below table.  If you would like to check
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
 * if the position of the filesystem in this table still affects the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
 * fsid, just check what arguments filesystems are calling
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
 * vfs_make_fsid with.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
 * The scenario we're trying to prevent here is:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
 * NFS server gets upgraded to new kernel version with different vfssw
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
 * Clients are -not- rebooted, still retain filehandles
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
 * NFS server boots up and now the fsid of an exported fs is different
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
 *  --> Clients get stale file handle errors
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
struct vfssw vfssw[] = {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
	{ "BADVFS" },				/* invalid */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
	{ "specfs" },				/* SPECFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
	{ "ufs" },				/* UFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
	{ "fifofs" },				/* FIFOFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
	{ "namefs" },				/* NAMEFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
	{ "proc" },				/* PROCFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
	{ "samfs" },				/* QFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
	{ "nfs" },				/* NFS Version 2 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
	{ "zfs" },				/* ZFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
	{ "hsfs" },				/* HSFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
	{ "lofs" },				/* LOFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
	{ "tmpfs" },				/* TMPFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
	{ "fd" },				/* FDFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
	{ "pcfs" },				/* PCFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
	{ "swapfs", swapinit },			/* SWAPFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
	{ "mntfs" },				/* MNTFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
	{ "devfs" },				/* DEVFS */
2621
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 0
diff changeset
    79
	{ "dev" },				/* DEV */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
	{ "ctfs" },				/* CONTRACTFS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
	{ "objfs" },				/* OBJFS */
3957
86c9dda5df37 PSARC/2007/052 In-kernel Sharetab
th199096
parents: 3898
diff changeset
    82
	{ "sharefs" },				/* SHAREFS */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
	{ "" },					/* reserved for loadable fs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
	{ "" },
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
const int nfstype = (sizeof (vfssw) / sizeof (vfssw[0]));