Annotation of sys/ufs/ufs/ufs_vfsops.c, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: ufs_vfsops.c,v 1.15 2006/04/04 11:21:40 pedro Exp $ */
2: /* $NetBSD: ufs_vfsops.c,v 1.4 1996/02/09 22:36:12 christos Exp $ */
3:
4: /*
5: * Copyright (c) 1991, 1993, 1994
6: * The Regents of the University of California. All rights reserved.
7: * (c) UNIX System Laboratories, Inc.
8: * All or some portions of this file are derived from material licensed
9: * to the University of California by American Telephone and Telegraph
10: * Co. or Unix System Laboratories, Inc. and are reproduced herein with
11: * the permission of UNIX System Laboratories, Inc.
12: *
13: * Redistribution and use in source and binary forms, with or without
14: * modification, are permitted provided that the following conditions
15: * are met:
16: * 1. Redistributions of source code must retain the above copyright
17: * notice, this list of conditions and the following disclaimer.
18: * 2. Redistributions in binary form must reproduce the above copyright
19: * notice, this list of conditions and the following disclaimer in the
20: * documentation and/or other materials provided with the distribution.
21: * 3. Neither the name of the University nor the names of its contributors
22: * may be used to endorse or promote products derived from this software
23: * without specific prior written permission.
24: *
25: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35: * SUCH DAMAGE.
36: *
37: * @(#)ufs_vfsops.c 8.4 (Berkeley) 4/16/94
38: */
39:
40: #include <sys/param.h>
41: #include <sys/mbuf.h>
42: #include <sys/mount.h>
43: #include <sys/proc.h>
44: #include <sys/buf.h>
45: #include <sys/vnode.h>
46: #include <sys/malloc.h>
47:
48: #include <miscfs/specfs/specdev.h>
49:
50: #include <ufs/ufs/quota.h>
51: #include <ufs/ufs/inode.h>
52: #include <ufs/ufs/ufsmount.h>
53: #include <ufs/ufs/ufs_extern.h>
54: #ifdef UFS_DIRHASH
55: #include <ufs/ufs/dir.h>
56: #include <ufs/ufs/dirhash.h>
57: #endif
58:
59: /*
60: * Make a filesystem operational.
61: * Nothing to do at the moment.
62: */
63: /* ARGSUSED */
64: int
65: ufs_start(struct mount *mp, int flags, struct proc *p)
66: {
67: return (0);
68: }
69:
70: /*
71: * Return the root of a filesystem.
72: */
73: int
74: ufs_root(struct mount *mp, struct vnode **vpp)
75: {
76: struct vnode *nvp;
77: int error;
78:
79: if ((error = VFS_VGET(mp, (ino_t)ROOTINO, &nvp)) != 0)
80: return (error);
81: *vpp = nvp;
82: return (0);
83: }
84:
85: /*
86: * Verify a remote client has export rights and return these rights via.
87: * exflagsp and credanonp.
88: */
89: int
90: ufs_check_export(struct mount *mp, struct mbuf *nam, int *exflagsp,
91: struct ucred **credanonp)
92: {
93: struct netcred *np;
94: struct ufsmount *ump = VFSTOUFS(mp);
95:
96: /*
97: * Get the export permission structure for this <mp, client> tuple.
98: */
99: np = vfs_export_lookup(mp, &ump->um_export, nam);
100: if (np == NULL)
101: return (EACCES);
102:
103: *exflagsp = np->netc_exflags;
104: *credanonp = &np->netc_anon;
105: return (0);
106: }
107:
108: /*
109: * Initialize UFS file systems, done only once.
110: */
111: int
112: ufs_init(struct vfsconf *vfsp)
113: {
114: static int done;
115:
116: if (done)
117: return (0);
118: done = 1;
119: ufs_ihashinit();
120: ufs_quota_init();
121: #ifdef UFS_DIRHASH
122: ufsdirhash_init();
123: #endif
124:
125: return (0);
126: }
127:
128: /*
129: * This is the generic part of fhtovp called after the underlying
130: * filesystem has validated the file handle.
131: */
132: int
133: ufs_fhtovp(struct mount *mp, struct ufid *ufhp, struct vnode **vpp)
134: {
135: struct inode *ip;
136: struct vnode *nvp;
137: int error;
138:
139: if ((error = VFS_VGET(mp, ufhp->ufid_ino, &nvp)) != 0) {
140: *vpp = NULLVP;
141: return (error);
142: }
143: ip = VTOI(nvp);
144: if (DIP(ip, mode) == 0 || DIP(ip, gen) != ufhp->ufid_gen) {
145: vput(nvp);
146: *vpp = NULLVP;
147: return (ESTALE);
148: }
149: *vpp = nvp;
150: return (0);
151: }
CVSweb