Page MenuHomeFreeBSD

D22550.id64862.diff
No OneTemporary

D22550.id64862.diff

Index: sys/fs/nullfs/null_vnops.c
===================================================================
--- sys/fs/nullfs/null_vnops.c
+++ sys/fs/nullfs/null_vnops.c
@@ -696,7 +696,7 @@
vdrop(lvp);
} else {
VI_UNLOCK(vp);
- error = vop_stdlock(ap);
+ error = vop_stdlock_vnlock(ap);
}
return (error);
@@ -721,7 +721,7 @@
error = VOP_UNLOCK(lvp, 0);
vdrop(lvp);
} else {
- error = vop_stdunlock(ap);
+ error = vop_stdunlock_vnlock(ap);
}
return (error);
@@ -927,7 +927,7 @@
.vop_getwritemount = null_getwritemount,
.vop_inactive = null_inactive,
.vop_need_inactive = null_need_inactive,
- .vop_islocked = vop_stdislocked,
+ .vop_islocked = vop_stdislocked_vnlock,
.vop_lock1 = null_lock,
.vop_lookup = null_lookup,
.vop_open = null_open,
Index: sys/fs/unionfs/union_vnops.c
===================================================================
--- sys/fs/unionfs/union_vnops.c
+++ sys/fs/unionfs/union_vnops.c
@@ -1771,13 +1771,13 @@
unp = VTOUNIONFS(ap->a_vp);
if (unp == NULL)
- return (vop_stdislocked(ap));
+ return (vop_stdislocked_vnlock(ap));
if (unp->un_uppervp != NULLVP)
return (VOP_ISLOCKED(unp->un_uppervp));
if (unp->un_lowervp != NULLVP)
return (VOP_ISLOCKED(unp->un_lowervp));
- return (vop_stdislocked(ap));
+ return (vop_stdislocked_vnlock(ap));
}
static int
@@ -1946,7 +1946,7 @@
VOP_UNLOCK(lvp, LK_RELEASE);
vdrop(lvp);
}
- return (vop_stdlock(ap));
+ return (vop_stdlock_vnlock(ap));
}
if (error != 0 && lvp != NULLVP) {
/* rollback */
@@ -1967,7 +1967,7 @@
unionfs_lock_null_vnode:
ap->a_flags |= LK_INTERLOCK;
- return (vop_stdlock(ap));
+ return (vop_stdlock_vnlock(ap));
}
static int
@@ -2013,7 +2013,7 @@
return error;
unionfs_unlock_null_vnode:
- return (vop_stdunlock(ap));
+ return (vop_stdunlock_vnlock(ap));
}
static int
Index: sys/kern/vfs_default.c
===================================================================
--- sys/kern/vfs_default.c
+++ sys/kern/vfs_default.c
@@ -512,8 +512,9 @@
struct vnode *vp = ap->a_vp;
struct mtx *ilk;
+ MPASS(vp->v_vnlock == &vp->v_lock);
ilk = VI_MTX(vp);
- return (lockmgr_lock_fast_path(vp->v_vnlock, ap->a_flags,
+ return (lockmgr_lock_fast_path(&vp->v_lock, ap->a_flags,
&ilk->lock_object, ap->a_file, ap->a_line));
}
@@ -528,8 +529,9 @@
struct vnode *vp = ap->a_vp;
struct mtx *ilk;
+ MPASS(vp->v_vnlock == &vp->v_lock);
ilk = VI_MTX(vp);
- return (lockmgr_unlock_fast_path(vp->v_vnlock, ap->a_flags,
+ return (lockmgr_unlock_fast_path(&vp->v_lock, ap->a_flags,
&ilk->lock_object));
}
@@ -541,6 +543,54 @@
} */ *ap;
{
+ MPASS(ap->a_vp->v_vnlock == &ap->a_vp->v_lock);
+ return (lockstatus(&ap->a_vp->v_lock));
+}
+
+/*
+ * Variants of the aboe which read the v_vnlock pointer.
+ */
+int
+vop_stdlock_vnlock(ap)
+ struct vop_lock1_args /* {
+ struct vnode *a_vp;
+ int a_flags;
+ char *file;
+ int line;
+ } */ *ap;
+{
+ struct vnode *vp = ap->a_vp;
+ struct mtx *ilk;
+
+ ilk = VI_MTX(vp);
+ return (lockmgr_lock_fast_path(vp->v_vnlock, ap->a_flags,
+ &ilk->lock_object, ap->a_file, ap->a_line));
+}
+
+/* See above. */
+int
+vop_stdunlock_vnlock(ap)
+ struct vop_unlock_args /* {
+ struct vnode *a_vp;
+ int a_flags;
+ } */ *ap;
+{
+ struct vnode *vp = ap->a_vp;
+ struct mtx *ilk;
+
+ ilk = VI_MTX(vp);
+ return (lockmgr_unlock_fast_path(vp->v_vnlock, ap->a_flags,
+ &ilk->lock_object));
+}
+
+/* See above. */
+int
+vop_stdislocked_vnlock(ap)
+ struct vop_islocked_args /* {
+ struct vnode *a_vp;
+ } */ *ap;
+{
+
return (lockstatus(ap->a_vp->v_vnlock));
}
Index: sys/sys/vnode.h
===================================================================
--- sys/sys/vnode.h
+++ sys/sys/vnode.h
@@ -760,11 +760,14 @@
int vop_stdgetpages(struct vop_getpages_args *);
int vop_stdinactive(struct vop_inactive_args *);
int vop_stdneed_inactive(struct vop_need_inactive_args *);
-int vop_stdislocked(struct vop_islocked_args *);
int vop_stdkqfilter(struct vop_kqfilter_args *);
+int vop_stdislocked(struct vop_islocked_args *);
int vop_stdlock(struct vop_lock1_args *);
-int vop_stdputpages(struct vop_putpages_args *);
int vop_stdunlock(struct vop_unlock_args *);
+int vop_stdislocked_vnlock(struct vop_islocked_args *);
+int vop_stdlock_vnlock(struct vop_lock1_args *);
+int vop_stdunlock_vnlock(struct vop_unlock_args *);
+int vop_stdputpages(struct vop_putpages_args *);
int vop_nopoll(struct vop_poll_args *);
int vop_stdaccess(struct vop_access_args *ap);
int vop_stdaccessx(struct vop_accessx_args *ap);
Index: sys/ufs/ffs/ffs_vnops.c
===================================================================
--- sys/ufs/ffs/ffs_vnops.c
+++ sys/ufs/ffs/ffs_vnops.c
@@ -134,7 +134,9 @@
.vop_fdatasync = ffs_fdatasync,
.vop_getpages = ffs_getpages,
.vop_getpages_async = ffs_getpages_async,
+ .vop_islocked = vop_stdislocked_vnlock,
.vop_lock1 = ffs_lock,
+ .vop_unlock = vop_stdunlock_vnlock,
.vop_read = ffs_read,
.vop_reallocblks = ffs_reallocblks,
.vop_write = ffs_write,
@@ -145,7 +147,9 @@
.vop_default = &ufs_fifoops,
.vop_fsync = ffs_fsync,
.vop_fdatasync = ffs_fdatasync,
+ .vop_islocked = vop_stdislocked_vnlock,
.vop_lock1 = ffs_lock,
+ .vop_unlock = vop_stdunlock_vnlock,
.vop_vptofh = ffs_vptofh,
};
@@ -156,7 +160,9 @@
.vop_fdatasync = ffs_fdatasync,
.vop_getpages = ffs_getpages,
.vop_getpages_async = ffs_getpages_async,
+ .vop_islocked = vop_stdislocked_vnlock,
.vop_lock1 = ffs_lock,
+ .vop_unlock = vop_stdunlock_vnlock,
.vop_read = ffs_read,
.vop_reallocblks = ffs_reallocblks,
.vop_write = ffs_write,
@@ -173,7 +179,9 @@
.vop_default = &ufs_fifoops,
.vop_fsync = ffs_fsync,
.vop_fdatasync = ffs_fdatasync,
+ .vop_islocked = vop_stdislocked_vnlock,
.vop_lock1 = ffs_lock,
+ .vop_unlock = vop_stdunlock_vnlock,
.vop_reallocblks = ffs_reallocblks,
.vop_strategy = ffsext_strategy,
.vop_closeextattr = ffs_closeextattr,
Index: sys/ufs/ufs/ufs_vnops.c
===================================================================
--- sys/ufs/ufs/ufs_vnops.c
+++ sys/ufs/ufs/ufs_vnops.c
@@ -2738,6 +2738,9 @@
.vop_inactive = ufs_inactive,
.vop_ioctl = ufs_ioctl,
.vop_link = ufs_link,
+ .vop_islocked = vop_stdislocked_vnlock,
+ .vop_lock1 = vop_stdlock_vnlock,
+ .vop_unlock = vop_stdunlock_vnlock,
.vop_lookup = vfs_cache_lookup,
.vop_markatime = ufs_markatime,
.vop_mkdir = ufs_mkdir,
@@ -2785,6 +2788,9 @@
.vop_read = VOP_PANIC,
.vop_reclaim = ufs_reclaim,
.vop_setattr = ufs_setattr,
+ .vop_islocked = vop_stdislocked_vnlock,
+ .vop_lock1 = vop_stdlock_vnlock,
+ .vop_unlock = vop_stdunlock_vnlock,
#ifdef MAC
.vop_setlabel = vop_stdsetlabel_ea,
#endif

File Metadata

Mime Type
text/plain
Expires
Fri, Mar 20, 7:21 AM (16 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30006651
Default Alt Text
D22550.id64862.diff (6 KB)

Event Timeline