Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F148638226
D22550.id64862.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D22550.id64862.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D22550: vfs: stop reading ->v_vnlock in default locking routines
Attached
Detach File
Event Timeline
Log In to Comment