Deleted Added
full compact
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 ---