1/* $NetBSD: tmpfs_vnops.c,v 1.39 2007/07/23 15:41:01 jmmv Exp $ */ 2 3/*- 4 * Copyright (c) 2005, 2006 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Julio M. Merino Vidal, developed as part of Google's Summer of Code --- 20 unchanged lines hidden (view full) --- 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33/* 34 * tmpfs vnode interface. 35 */ 36#include <sys/cdefs.h> |
37__FBSDID("$FreeBSD: stable/10/sys/fs/tmpfs/tmpfs_vnops.c 269173 2014-07-28 01:16:07Z kib $"); |
38 39#include <sys/param.h> 40#include <sys/fcntl.h> 41#include <sys/lockf.h> 42#include <sys/lock.h> 43#include <sys/namei.h> 44#include <sys/priv.h> 45#include <sys/proc.h> --- 18 unchanged lines hidden (view full) --- 64SYSCTL_DECL(_vfs_tmpfs); 65 66static volatile int tmpfs_rename_restarts; 67SYSCTL_INT(_vfs_tmpfs, OID_AUTO, rename_restarts, CTLFLAG_RD, 68 __DEVOLATILE(int *, &tmpfs_rename_restarts), 0, 69 "Times rename had to restart due to lock contention"); 70 71static int |
72tmpfs_vn_get_ino_alloc(struct mount *mp, void *arg, int lkflags, 73 struct vnode **rvp) 74{ 75 76 return (tmpfs_alloc_vp(mp, arg, lkflags, rvp)); 77} 78 79static int |
80tmpfs_lookup(struct vop_cachedlookup_args *v) 81{ 82 struct vnode *dvp = v->a_dvp; 83 struct vnode **vpp = v->a_vpp; 84 struct componentname *cnp = v->a_cnp; |
85 struct tmpfs_dirent *de; 86 struct tmpfs_node *dnode; |
87 int error; |
88 89 dnode = VP_TO_TMPFS_DIR(dvp); 90 *vpp = NULLVP; 91 92 /* Check accessibility of requested node as a first step. */ 93 error = VOP_ACCESS(dvp, VEXEC, cnp->cn_cred, cnp->cn_thread); 94 if (error != 0) 95 goto out; --- 4 unchanged lines hidden (view full) --- 100 !(cnp->cn_flags & ISDOTDOT))); 101 102 TMPFS_ASSERT_LOCKED(dnode); 103 if (dnode->tn_dir.tn_parent == NULL) { 104 error = ENOENT; 105 goto out; 106 } 107 if (cnp->cn_flags & ISDOTDOT) { |
108 error = vn_vget_ino_gen(dvp, tmpfs_vn_get_ino_alloc, 109 dnode->tn_dir.tn_parent, cnp->cn_lkflags, vpp); 110 if (error != 0) 111 goto out; |
112 } else if (cnp->cn_namelen == 1 && cnp->cn_nameptr[0] == '.') { 113 VREF(dvp); 114 *vpp = dvp; 115 error = 0; 116 } else { 117 de = tmpfs_dir_lookup(dnode, NULL, cnp); 118 if (de != NULL && de->td_node == NULL) 119 cnp->cn_flags |= ISWHITEOUT; --- 1310 unchanged lines hidden --- |