tmpfs_vnops.c (269172) | tmpfs_vnops.c (269173) |
---|---|
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> | 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 269172 2014-07-28 01:14:25Z kib $"); | 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 | 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 |
|
72tmpfs_lookup(struct vop_cachedlookup_args *v) 73{ 74 struct vnode *dvp = v->a_dvp; 75 struct vnode **vpp = v->a_vpp; 76 struct componentname *cnp = v->a_cnp; | 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; |
77 78 int error; | |
79 struct tmpfs_dirent *de; 80 struct tmpfs_node *dnode; | 85 struct tmpfs_dirent *de; 86 struct tmpfs_node *dnode; |
87 int error; |
|
81 82 dnode = VP_TO_TMPFS_DIR(dvp); 83 *vpp = NULLVP; 84 85 /* Check accessibility of requested node as a first step. */ 86 error = VOP_ACCESS(dvp, VEXEC, cnp->cn_cred, cnp->cn_thread); 87 if (error != 0) 88 goto out; --- 4 unchanged lines hidden (view full) --- 93 !(cnp->cn_flags & ISDOTDOT))); 94 95 TMPFS_ASSERT_LOCKED(dnode); 96 if (dnode->tn_dir.tn_parent == NULL) { 97 error = ENOENT; 98 goto out; 99 } 100 if (cnp->cn_flags & ISDOTDOT) { | 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) { |
101 int ltype = 0; 102 103 ltype = VOP_ISLOCKED(dvp); 104 vhold(dvp); 105 VOP_UNLOCK(dvp, 0); 106 /* Allocate a new vnode on the matching entry. */ 107 error = tmpfs_alloc_vp(dvp->v_mount, dnode->tn_dir.tn_parent, 108 cnp->cn_lkflags, vpp); 109 110 vn_lock(dvp, ltype | LK_RETRY); 111 vdrop(dvp); | 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 --- | 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 --- |