Module Name:    src
Committed By:   martin
Date:           Mon Oct 14 17:43:58 UTC 2019

Modified Files:
        src/sys/kern [netbsd-8]: vnode_if.sh vnode_if.src

Log Message:
Pull up following revision(s) (requested by hannken in ticket #1405):

        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.64.4.1 -r1.64.4.2 src/sys/kern/vnode_if.sh
cvs rdiff -u -r1.75.2.2 -r1.75.2.3 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.64.4.1 src/sys/kern/vnode_if.sh:1.64.4.2
--- src/sys/kern/vnode_if.sh:1.64.4.1	Sun Jun  4 20:35:01 2017
+++ src/sys/kern/vnode_if.sh	Mon Oct 14 17:43:58 2019
@@ -29,7 +29,7 @@ copyright="\
  * SUCH DAMAGE.
  */
 "
-SCRIPT_ID='$NetBSD: vnode_if.sh,v 1.64.4.1 2017/06/04 20:35:01 bouyer Exp $'
+SCRIPT_ID='$NetBSD: vnode_if.sh,v 1.64.4.2 2019/10/14 17:43:58 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.75.2.2 src/sys/kern/vnode_if.src:1.75.2.3
--- src/sys/kern/vnode_if.src:1.75.2.2	Tue Jul 25 01:29:23 2017
+++ src/sys/kern/vnode_if.src	Mon Oct 14 17:43:58 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: vnode_if.src,v 1.75.2.2 2017/07/25 01:29:23 snj Exp $
+#	$NetBSD: vnode_if.src,v 1.75.2.3 2019/10/14 17:43:58 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;
 };

Reply via email to