Module Name: src Committed By: martin Date: Tue Oct 15 18:12:25 UTC 2019
Modified Files: src/sys/kern [netbsd-9]: vnode_if.sh vnode_if.src Log Message: Pull up following revision(s) (requested by hannken in ticket #307): sys/kern/vnode_if.sh: revision 1.67 sys/kern/vnode_if.src: revision 1.78 As VOP_STRATEGY() usually calls itself on the file system holding "/dev" it may deadlock on suspension of this file system. Add fstrans type LAZY and use it for VOP_STRATEGY(). Adress PR kern/53624 (dom0 freeze on domU exit) is still there To generate a diff of this commit: cvs rdiff -u -r1.66 -r1.66.10.1 src/sys/kern/vnode_if.sh cvs rdiff -u -r1.77 -r1.77.10.1 src/sys/kern/vnode_if.src Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/vnode_if.sh diff -u src/sys/kern/vnode_if.sh:1.66 src/sys/kern/vnode_if.sh:1.66.10.1 --- src/sys/kern/vnode_if.sh:1.66 Sun Jun 4 08:03:26 2017 +++ src/sys/kern/vnode_if.sh Tue Oct 15 18:12:25 2019 @@ -29,7 +29,7 @@ copyright="\ * SUCH DAMAGE. */ " -SCRIPT_ID='$NetBSD: vnode_if.sh,v 1.66 2017/06/04 08:03:26 hannken Exp $' +SCRIPT_ID='$NetBSD: vnode_if.sh,v 1.66.10.1 2019/10/15 18:12:25 martin Exp $' # Script to produce VFS front-end sugar. # @@ -318,7 +318,7 @@ echo ' if [ -z "${rump}" ] ; then echo " -enum fst_op { FST_NO, FST_YES, FST_TRY }; +enum fst_op { FST_NO, FST_YES, FST_LAZY, FST_TRY }; static inline int vop_pre(vnode_t *vp, struct mount **mp, bool *mpsafe, enum fst_op op) @@ -331,7 +331,7 @@ vop_pre(vnode_t *vp, struct mount **mp, KERNEL_LOCK(1, curlwp); } - if (op == FST_YES || op == FST_TRY) { + if (op == FST_YES || op == FST_LAZY || op == FST_TRY) { for (;;) { *mp = vp->v_mount; if (op == FST_TRY) { @@ -342,6 +342,8 @@ vop_pre(vnode_t *vp, struct mount **mp, } return error; } + } else if (op == FST_LAZY) { + fstrans_start_lazy(*mp); } else { fstrans_start(*mp); } @@ -360,7 +362,7 @@ static inline void vop_post(vnode_t *vp, struct mount *mp, bool mpsafe, enum fst_op op) { - if (op == FST_YES) { + if (op == FST_YES || op == FST_LAZY) { fstrans_done(mp); } Index: src/sys/kern/vnode_if.src diff -u src/sys/kern/vnode_if.src:1.77 src/sys/kern/vnode_if.src:1.77.10.1 --- src/sys/kern/vnode_if.src:1.77 Wed Jul 12 09:31:07 2017 +++ src/sys/kern/vnode_if.src Tue Oct 15 18:12:25 2019 @@ -1,4 +1,4 @@ -# $NetBSD: vnode_if.src,v 1.77 2017/07/12 09:31:07 hannken Exp $ +# $NetBSD: vnode_if.src,v 1.77.10.1 2019/10/15 18:12:25 martin Exp $ # # Copyright (c) 1992, 1993 # The Regents of the University of California. All rights reserved. @@ -436,6 +436,7 @@ vop_bmap { #% strategy vp = = = # vop_strategy { + FSTRANS=LAZY IN struct vnode *vp; IN struct buf *bp; };