Module Name:    src
Committed By:   hannken
Date:           Thu Mar 30 09:10:08 UTC 2017

Modified Files:
        src/sys/ufs/lfs: lfs_pages.c lfs_vnops.c ulfs_bmap.c ulfs_inode.c
            ulfs_lookup.c ulfs_quota2.c ulfs_readwrite.c ulfs_vnops.c

Log Message:
Remove now redundant calls to fstrans_start()/fstrans_done().

Add fstrans_start()/fstrans_done() to lfs_putpages().


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/ufs/lfs/lfs_pages.c
cvs rdiff -u -r1.306 -r1.307 src/sys/ufs/lfs/lfs_vnops.c
cvs rdiff -u -r1.8 -r1.9 src/sys/ufs/lfs/ulfs_bmap.c
cvs rdiff -u -r1.16 -r1.17 src/sys/ufs/lfs/ulfs_inode.c
cvs rdiff -u -r1.39 -r1.40 src/sys/ufs/lfs/ulfs_lookup.c
cvs rdiff -u -r1.29 -r1.30 src/sys/ufs/lfs/ulfs_quota2.c
cvs rdiff -u -r1.22 -r1.23 src/sys/ufs/lfs/ulfs_readwrite.c
cvs rdiff -u -r1.45 -r1.46 src/sys/ufs/lfs/ulfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/ufs/lfs/lfs_pages.c
diff -u src/sys/ufs/lfs/lfs_pages.c:1.9 src/sys/ufs/lfs/lfs_pages.c:1.10
--- src/sys/ufs/lfs/lfs_pages.c:1.9	Tue Oct  4 16:46:20 2016
+++ src/sys/ufs/lfs/lfs_pages.c	Thu Mar 30 09:10:08 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_pages.c,v 1.9 2016/10/04 16:46:20 christos Exp $	*/
+/*	$NetBSD: lfs_pages.c,v 1.10 2017/03/30 09:10:08 hannken Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_pages.c,v 1.9 2016/10/04 16:46:20 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_pages.c,v 1.10 2017/03/30 09:10:08 hannken Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -466,6 +466,7 @@ lfs_putpages(void *v)
 	bool seglocked, sync, pagedaemon, reclaim;
 	struct vm_page *pg, *busypg;
 	UVMHIST_FUNC("lfs_putpages"); UVMHIST_CALLED(ubchist);
+	struct mount *trans_mp;
 	int oreclaim = 0;
 	int donewriting = 0;
 #ifdef DEBUG
@@ -478,6 +479,7 @@ lfs_putpages(void *v)
 	sync = (ap->a_flags & PGO_SYNCIO) != 0;
 	reclaim = (ap->a_flags & PGO_RECLAIM) != 0;
 	pagedaemon = (curlwp == uvm.pagedaemon_lwp);
+	trans_mp = NULL;
 
 	KASSERT(mutex_owned(vp->v_interlock));
 
@@ -487,6 +489,7 @@ lfs_putpages(void *v)
 		return 0;
 	}
 
+retry:
 	/*
 	 * If there are no pages, don't do anything.
 	 */
@@ -497,6 +500,8 @@ lfs_putpages(void *v)
 			vp->v_iflag &= ~VI_WRMAPDIRTY;
 			vn_syncer_remove_from_worklist(vp);
 		}
+		if (trans_mp)
+			fstrans_done(trans_mp);
 		mutex_exit(vp->v_interlock);
 		
 		/* Remove us from paging queue, if we were on it */
@@ -587,6 +592,33 @@ lfs_putpages(void *v)
 		return r;
 	}
 
+	if (trans_mp /* && (ap->a_flags & PGO_CLEANIT) != 0 */) {
+		if (pagedaemon) {
+			/* Pagedaemon must not sleep here. */
+			trans_mp = vp->v_mount;
+			error = fstrans_start_nowait(trans_mp, FSTRANS_SHARED);
+			if (error) {
+				mutex_exit(vp->v_interlock);
+				return error;
+			}
+		} else {
+			/*
+			 * Cannot use vdeadcheck() here as this operation
+			 * usually gets used from VOP_RECLAIM().  Test for
+			 * change of v_mount instead and retry on change.
+			 */
+			mutex_exit(vp->v_interlock);
+			trans_mp = vp->v_mount;
+			fstrans_start(trans_mp, FSTRANS_SHARED);
+			if (vp->v_mount != trans_mp) {
+				fstrans_done(trans_mp);
+				trans_mp = NULL;
+			}
+		}
+		mutex_enter(vp->v_interlock);
+		goto retry;
+	}
+
 	/* Set PGO_BUSYFAIL to avoid deadlocks */
 	ap->a_flags |= PGO_BUSYFAIL;
 
@@ -607,7 +639,8 @@ lfs_putpages(void *v)
 		if (r < 0) {
 			/* Pages are busy with another process */
 			mutex_exit(vp->v_interlock);
-			return EDEADLK;
+			error = EDEADLK;
+			goto out;
 		}
 		if (r > 0) /* Some pages are dirty */
 			break;
@@ -624,7 +657,8 @@ lfs_putpages(void *v)
 		ip->i_lfs_iflags &= ~LFSI_NO_GOP_WRITE;
 		if (r != EDEADLK) {
 			KASSERT(!mutex_owned(vp->v_interlock));
- 			return r;
+ 			error = r;
+			goto out;
 		}
 
 		/* One of the pages was busy.  Start over. */
@@ -662,7 +696,8 @@ lfs_putpages(void *v)
 		mutex_exit(&lfs_lock);
 		preempt();
 		KASSERT(!mutex_owned(vp->v_interlock));
-		return EWOULDBLOCK;
+		error = EWOULDBLOCK;
+		goto out;
 	}
 
 	/*
@@ -724,7 +759,7 @@ lfs_putpages(void *v)
 		error = lfs_seglock(fs, SEGM_PROT | (sync ? SEGM_SYNC : 0));
 		if (error != 0) {
 			KASSERT(!mutex_owned(vp->v_interlock));
- 			return error;
+ 			goto out;
 		}
 		mutex_enter(vp->v_interlock);
 		lfs_acquire_finfo(fs, ip->i_number, ip->i_gen);
@@ -851,7 +886,7 @@ lfs_putpages(void *v)
 	 */
 	if (seglocked) {
 		KASSERT(!mutex_owned(vp->v_interlock));
-		return error;
+		goto out;
 	}
 
 	/* Clean up FIP and send it to disk. */
@@ -892,6 +927,10 @@ lfs_putpages(void *v)
 		}
 		mutex_exit(vp->v_interlock);
 	}
+
+out:;
+	if (trans_mp)
+		fstrans_done(trans_mp);
 	KASSERT(!mutex_owned(vp->v_interlock));
 	return error;
 }

Index: src/sys/ufs/lfs/lfs_vnops.c
diff -u src/sys/ufs/lfs/lfs_vnops.c:1.306 src/sys/ufs/lfs/lfs_vnops.c:1.307
--- src/sys/ufs/lfs/lfs_vnops.c:1.306	Thu Mar 16 01:09:24 2017
+++ src/sys/ufs/lfs/lfs_vnops.c	Thu Mar 30 09:10:08 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_vnops.c,v 1.306 2017/03/16 01:09:24 maya Exp $	*/
+/*	$NetBSD: lfs_vnops.c,v 1.307 2017/03/30 09:10:08 hannken Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -125,7 +125,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.306 2017/03/16 01:09:24 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.307 2017/03/30 09:10:08 hannken Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -147,7 +147,6 @@ __KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,
 #include <sys/signalvar.h>
 #include <sys/kauth.h>
 #include <sys/syslog.h>
-#include <sys/fstrans.h>
 
 #include <miscfs/fifofs/fifo.h>
 #include <miscfs/genfs/genfs.h>
@@ -721,7 +720,6 @@ lfs_symlink(void *v)
 	if (error)
 		return error;
 
-	fstrans_start(dvp->v_mount, FSTRANS_SHARED);
 	error = lfs_makeinode(ap->a_vap, dvp, ulr, vpp, ap->a_cnp);
 	if (error) {
 		goto out;
@@ -757,8 +755,6 @@ lfs_symlink(void *v)
 		vrele(*vpp);
 
 out:
-	fstrans_done(dvp->v_mount);
-
 	UNMARK_VNODE(dvp);
 	/* XXX: is it even possible for the symlink to get MARK'd? */
 	UNMARK_VNODE(*vpp);
@@ -809,7 +805,6 @@ lfs_mknod(void *v)
 	if (error)
 		return error;
 
-	fstrans_start(dvp->v_mount, FSTRANS_SHARED);
 	error = lfs_makeinode(vap, dvp, ulr, vpp, ap->a_cnp);
 
 	/* Either way we're done with the dirop at this point */
@@ -818,7 +813,6 @@ lfs_mknod(void *v)
 	lfs_unset_dirop(fs, dvp, "mknod");
 
 	if (error) {
-		fstrans_done(dvp->v_mount);
 		vrele(dvp);
 		*vpp = NULL;
 		return (error);
@@ -843,7 +837,6 @@ lfs_mknod(void *v)
 		/* return (error); */
 	}
 
-	fstrans_done(dvp->v_mount);
 	vrele(dvp);
 	KASSERT(error == 0);
 	VOP_UNLOCK(*vpp);
@@ -889,13 +882,10 @@ lfs_create(void *v)
 	if (error)
 		return error;
 
-	fstrans_start(dvp->v_mount, FSTRANS_SHARED);
 	error = lfs_makeinode(vap, dvp, ulr, vpp, ap->a_cnp);
 	if (error) {
-		fstrans_done(dvp->v_mount);
 		goto out;
 	}
-	fstrans_done(dvp->v_mount);
 	VN_KNOTE(dvp, NOTE_WRITE);
 	VOP_UNLOCK(*vpp);
 
@@ -962,8 +952,6 @@ lfs_mkdir(void *v)
 	if (error)
 		return error;
 
-	fstrans_start(dvp->v_mount, FSTRANS_SHARED);
-
 	if ((nlink_t)dp->i_nlink >= LINK_MAX) {
 		error = EMLINK;
 		goto out;
@@ -1066,8 +1054,6 @@ lfs_mkdir(void *v)
 	}
 
 out:
-	fstrans_done(dvp->v_mount);
-
 	UNMARK_VNODE(dvp);
 	UNMARK_VNODE(*vpp);
 	if (error) {
@@ -1207,7 +1193,6 @@ lfs_getattr(void *v)
 	struct vattr *vap = ap->a_vap;
 	struct lfs *fs = ip->i_lfs;
 
-	fstrans_start(vp->v_mount, FSTRANS_SHARED);
 	/*
 	 * Copy from inode table
 	 */
@@ -1245,7 +1230,6 @@ lfs_getattr(void *v)
 	vap->va_bytes = lfs_fsbtob(fs, ip->i_lfs_effnblks);
 	vap->va_type = vp->v_type;
 	vap->va_filerev = ip->i_modrev;
-	fstrans_done(vp->v_mount);
 	return (0);
 }
 
@@ -1329,11 +1313,9 @@ lfs_close(void *v)
 	    vp->v_mount->mnt_iflag & IMNT_UNMOUNT)
 		return 0;
 
-	fstrans_start(vp->v_mount, FSTRANS_SHARED);
 	if (vp->v_usecount > 1 && vp != ip->i_lfs->lfs_ivnode) {
 		LFS_ITIMES(ip, NULL, NULL, NULL);
 	}
-	fstrans_done(vp->v_mount);
 	return (0);
 }
 
@@ -2266,9 +2248,7 @@ lfs_getextattr(void *v)
 
 	if (ump->um_fstype == ULFS1) {
 #ifdef LFS_EXTATTR
-		fstrans_start(vp->v_mount, FSTRANS_SHARED);
 		error = ulfs_getextattr(ap);
-		fstrans_done(vp->v_mount);
 #else
 		error = EOPNOTSUPP;
 #endif
@@ -2298,9 +2278,7 @@ lfs_setextattr(void *v)
 
 	if (ump->um_fstype == ULFS1) {
 #ifdef LFS_EXTATTR
-		fstrans_start(vp->v_mount, FSTRANS_SHARED);
 		error = ulfs_setextattr(ap);
-		fstrans_done(vp->v_mount);
 #else
 		error = EOPNOTSUPP;
 #endif
@@ -2330,9 +2308,7 @@ lfs_listextattr(void *v)
 
 	if (ump->um_fstype == ULFS1) {
 #ifdef LFS_EXTATTR
-		fstrans_start(vp->v_mount, FSTRANS_SHARED);
 		error = ulfs_listextattr(ap);
-		fstrans_done(vp->v_mount);
 #else
 		error = EOPNOTSUPP;
 #endif
@@ -2360,9 +2336,7 @@ lfs_deleteextattr(void *v)
 
 	if (ump->um_fstype == ULFS1) {
 #ifdef LFS_EXTATTR
-		fstrans_start(vp->v_mount, FSTRANS_SHARED);
 		error = ulfs_deleteextattr(ap);
-		fstrans_done(vp->v_mount);
 #else
 		error = EOPNOTSUPP;
 #endif

Index: src/sys/ufs/lfs/ulfs_bmap.c
diff -u src/sys/ufs/lfs/ulfs_bmap.c:1.8 src/sys/ufs/lfs/ulfs_bmap.c:1.9
--- src/sys/ufs/lfs/ulfs_bmap.c:1.8	Mon Mar 13 14:24:20 2017
+++ src/sys/ufs/lfs/ulfs_bmap.c	Thu Mar 30 09:10:08 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulfs_bmap.c,v 1.8 2017/03/13 14:24:20 riastradh Exp $	*/
+/*	$NetBSD: ulfs_bmap.c,v 1.9 2017/03/30 09:10:08 hannken Exp $	*/
 /*  from NetBSD: ufs_bmap.c,v 1.50 2013/01/22 09:39:18 dholland Exp  */
 
 /*
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_bmap.c,v 1.8 2017/03/13 14:24:20 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_bmap.c,v 1.9 2017/03/30 09:10:08 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -49,7 +49,6 @@ __KERNEL_RCSID(0, "$NetBSD: ulfs_bmap.c,
 #include <sys/mount.h>
 #include <sys/resourcevar.h>
 #include <sys/trace.h>
-#include <sys/fstrans.h>
 
 #include <miscfs/specfs/specdev.h>
 
@@ -113,10 +112,8 @@ ulfs_bmap(void *v)
 	if (ap->a_bnp == NULL)
 		return (0);
 
-	fstrans_start(ap->a_vp->v_mount, FSTRANS_SHARED);
 	error = ulfs_bmaparray(ap->a_vp, ap->a_bn, ap->a_bnp, NULL, NULL,
 	    ap->a_runp, ulfs_issequential);
-	fstrans_done(ap->a_vp->v_mount);
 	return error;
 }
 

Index: src/sys/ufs/lfs/ulfs_inode.c
diff -u src/sys/ufs/lfs/ulfs_inode.c:1.16 src/sys/ufs/lfs/ulfs_inode.c:1.17
--- src/sys/ufs/lfs/ulfs_inode.c:1.16	Sat Aug 20 12:37:09 2016
+++ src/sys/ufs/lfs/ulfs_inode.c	Thu Mar 30 09:10:08 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulfs_inode.c,v 1.16 2016/08/20 12:37:09 hannken Exp $	*/
+/*	$NetBSD: ulfs_inode.c,v 1.17 2017/03/30 09:10:08 hannken Exp $	*/
 /*  from NetBSD: ufs_inode.c,v 1.95 2015/06/13 14:56:45 hannken Exp  */
 
 /*
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_inode.c,v 1.16 2016/08/20 12:37:09 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_inode.c,v 1.17 2017/03/30 09:10:08 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_lfs.h"
@@ -53,7 +53,6 @@ __KERNEL_RCSID(0, "$NetBSD: ulfs_inode.c
 #include <sys/kernel.h>
 #include <sys/namei.h>
 #include <sys/kauth.h>
-#include <sys/fstrans.h>
 #include <sys/kmem.h>
 
 #include <ufs/lfs/lfs.h>
@@ -86,12 +85,9 @@ ulfs_inactive(void *v)
 	} */ *ap = v;
 	struct vnode *vp = ap->a_vp;
 	struct inode *ip = VTOI(vp);
-	struct mount *transmp;
 	mode_t mode;
 	int error = 0;
 
-	transmp = vp->v_mount;
-	fstrans_start(transmp, FSTRANS_LAZY);
 	/*
 	 * Ignore inodes related to stale file handles.
 	 */
@@ -129,7 +125,6 @@ out:
 	 */
 	*ap->a_recycle = (ip->i_mode == 0);
 	VOP_UNLOCK(vp);
-	fstrans_done(transmp);
 	return (error);
 }
 

Index: src/sys/ufs/lfs/ulfs_lookup.c
diff -u src/sys/ufs/lfs/ulfs_lookup.c:1.39 src/sys/ufs/lfs/ulfs_lookup.c:1.40
--- src/sys/ufs/lfs/ulfs_lookup.c:1.39	Mon Jun 20 02:25:03 2016
+++ src/sys/ufs/lfs/ulfs_lookup.c	Thu Mar 30 09:10:08 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulfs_lookup.c,v 1.39 2016/06/20 02:25:03 dholland Exp $	*/
+/*	$NetBSD: ulfs_lookup.c,v 1.40 2017/03/30 09:10:08 hannken Exp $	*/
 /*  from NetBSD: ufs_lookup.c,v 1.135 2015/07/11 11:04:48 mlelstv  */
 
 /*
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_lookup.c,v 1.39 2016/06/20 02:25:03 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_lookup.c,v 1.40 2017/03/30 09:10:08 hannken Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_lfs.h"
@@ -54,7 +54,6 @@ __KERNEL_RCSID(0, "$NetBSD: ulfs_lookup.
 #include <sys/vnode.h>
 #include <sys/kernel.h>
 #include <sys/kauth.h>
-#include <sys/fstrans.h>
 #include <sys/proc.h>
 #include <sys/kmem.h>
 
@@ -208,8 +207,6 @@ ulfs_lookup(void *v)
 		cnp->cn_flags |= ISWHITEOUT;
 	}
 
-	fstrans_start(vdp->v_mount, FSTRANS_SHARED);
-
 	/*
 	 * Suppress search for slots unless creating
 	 * file and at end of pathname, in which case
@@ -630,7 +627,6 @@ found:
 	error = 0;
 
 out:
-	fstrans_done(vdp->v_mount);
 	return error;
 }
 

Index: src/sys/ufs/lfs/ulfs_quota2.c
diff -u src/sys/ufs/lfs/ulfs_quota2.c:1.29 src/sys/ufs/lfs/ulfs_quota2.c:1.30
--- src/sys/ufs/lfs/ulfs_quota2.c:1.29	Sun Nov 20 21:22:14 2016
+++ src/sys/ufs/lfs/ulfs_quota2.c	Thu Mar 30 09:10:08 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulfs_quota2.c,v 1.29 2016/11/20 21:22:14 riastradh Exp $	*/
+/*	$NetBSD: ulfs_quota2.c,v 1.30 2017/03/30 09:10:08 hannken Exp $	*/
 /*  from NetBSD: ufs_quota2.c,v 1.40 2015/03/28 19:24:05 maxv Exp Exp  */
 /*  from NetBSD: ffs_quota2.c,v 1.5 2015/02/22 14:12:48 maxv Exp  */
 
@@ -29,7 +29,7 @@
   */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_quota2.c,v 1.29 2016/11/20 21:22:14 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_quota2.c,v 1.30 2017/03/30 09:10:08 hannken Exp $");
 
 #include <sys/buf.h>
 #include <sys/param.h>
@@ -40,7 +40,6 @@ __KERNEL_RCSID(0, "$NetBSD: ulfs_quota2.
 #include <sys/proc.h>
 #include <sys/vnode.h>
 #include <sys/mount.h>
-#include <sys/fstrans.h>
 #include <sys/kauth.h>
 #include <sys/quota.h>
 #include <sys/quotactl.h>

Index: src/sys/ufs/lfs/ulfs_readwrite.c
diff -u src/sys/ufs/lfs/ulfs_readwrite.c:1.22 src/sys/ufs/lfs/ulfs_readwrite.c:1.23
--- src/sys/ufs/lfs/ulfs_readwrite.c:1.22	Mon Jun 20 03:36:09 2016
+++ src/sys/ufs/lfs/ulfs_readwrite.c	Thu Mar 30 09:10:08 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulfs_readwrite.c,v 1.22 2016/06/20 03:36:09 dholland Exp $	*/
+/*	$NetBSD: ulfs_readwrite.c,v 1.23 2017/03/30 09:10:08 hannken Exp $	*/
 /*  from NetBSD: ufs_readwrite.c,v 1.120 2015/04/12 22:48:38 riastradh Exp  */
 
 /*-
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: ulfs_readwrite.c,v 1.22 2016/06/20 03:36:09 dholland Exp $");
+__KERNEL_RCSID(1, "$NetBSD: ulfs_readwrite.c,v 1.23 2017/03/30 09:10:08 hannken Exp $");
 
 #ifdef LFS_READWRITE
 #define	FS			struct lfs
@@ -110,8 +110,6 @@ READ(void *v)
 		return ffs_snapshot_read(vp, uio, ioflag);
 #endif /* !LFS_READWRITE */
 
-	fstrans_start(vp->v_mount, FSTRANS_SHARED);
-
 	if (uio->uio_offset >= ip->i_size)
 		goto out;
 
@@ -132,7 +130,6 @@ READ(void *v)
 
  out:
 	error = ulfs_post_read_update(vp, ap->a_ioflag, error);
-	fstrans_done(vp->v_mount);
 	return (error);
 }
 
@@ -174,8 +171,6 @@ BUFRD(struct vnode *vp, struct uio *uio,
 	KASSERT(!ISSET(ip->i_flags, (SF_SNAPSHOT | SF_SNAPINVAL)));
 #endif
 
-	fstrans_start(vp->v_mount, FSTRANS_SHARED);
-
 	if (uio->uio_offset >= ip->i_size)
 		goto out;
 
@@ -223,7 +218,6 @@ BUFRD(struct vnode *vp, struct uio *uio,
 
  out:
 	error = ulfs_post_read_update(vp, ioflag, error);
-	fstrans_done(vp->v_mount);
 	return (error);
 }
 
@@ -298,8 +292,6 @@ WRITE(void *v)
 	if (uio->uio_resid == 0)
 		return (0);
 
-	fstrans_start(vp->v_mount, FSTRANS_SHARED);
-
 	flags = ioflag & IO_SYNC ? B_SYNC : 0;
 	async = vp->v_mount->mnt_flag & MNT_ASYNC;
 	origoff = uio->uio_offset;
@@ -451,7 +443,6 @@ WRITE(void *v)
 out:
 	error = ulfs_post_write_update(vp, uio, ioflag, cred, osize, resid,
 	    extended, error);
-	fstrans_done(vp->v_mount);
 
 	return (error);
 }
@@ -496,8 +487,6 @@ BUFWR(struct vnode *vp, struct uio *uio,
 	if (uio->uio_resid == 0)
 		return 0;
 
-	fstrans_start(vp->v_mount, FSTRANS_SHARED);
-
 	flags = ioflag & IO_SYNC ? B_SYNC : 0;
 	resid = uio->uio_resid;
 	osize = ip->i_size;
@@ -579,7 +568,6 @@ BUFWR(struct vnode *vp, struct uio *uio,
 
 	error = ulfs_post_write_update(vp, uio, ioflag, cred, osize, resid,
 	    extended, error);
-	fstrans_done(vp->v_mount);
 
 	return (error);
 }

Index: src/sys/ufs/lfs/ulfs_vnops.c
diff -u src/sys/ufs/lfs/ulfs_vnops.c:1.45 src/sys/ufs/lfs/ulfs_vnops.c:1.46
--- src/sys/ufs/lfs/ulfs_vnops.c:1.45	Mon Mar 13 14:24:20 2017
+++ src/sys/ufs/lfs/ulfs_vnops.c	Thu Mar 30 09:10:08 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: ulfs_vnops.c,v 1.45 2017/03/13 14:24:20 riastradh Exp $	*/
+/*	$NetBSD: ulfs_vnops.c,v 1.46 2017/03/30 09:10:08 hannken Exp $	*/
 /*  from NetBSD: ufs_vnops.c,v 1.232 2016/05/19 18:32:03 riastradh Exp  */
 
 /*-
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_vnops.c,v 1.45 2017/03/13 14:24:20 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_vnops.c,v 1.46 2017/03/30 09:10:08 hannken Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_lfs.h"
@@ -90,7 +90,6 @@ __KERNEL_RCSID(0, "$NetBSD: ulfs_vnops.c
 #include <sys/dirent.h>
 #include <sys/lockf.h>
 #include <sys/kauth.h>
-#include <sys/fstrans.h>
 
 #include <miscfs/specfs/specdev.h>
 #include <miscfs/fifofs/fifo.h>
@@ -159,9 +158,7 @@ ulfs_check_possible(struct vnode *vp, st
 			if (vp->v_mount->mnt_flag & MNT_RDONLY)
 				return (EROFS);
 #if defined(LFS_QUOTA) || defined(LFS_QUOTA2)
-			fstrans_start(vp->v_mount, FSTRANS_SHARED);
 			error = lfs_chkdq(ip, 0, cred, 0);
-			fstrans_done(vp->v_mount);
 			if (error != 0)
 				return error;
 #endif
@@ -263,8 +260,6 @@ ulfs_setattr(void *v)
 		return (EINVAL);
 	}
 
-	fstrans_start(vp->v_mount, FSTRANS_SHARED);
-
 	if (vap->va_flags != VNOVAL) {
 		if (vp->v_mount->mnt_flag & MNT_RDONLY) {
 			error = EROFS;
@@ -403,7 +398,6 @@ ulfs_setattr(void *v)
 	}
 	VN_KNOTE(vp, NOTE_ATTRIB);
 out:
-	fstrans_done(vp->v_mount);
 	return (error);
 }
 
@@ -424,12 +418,10 @@ ulfs_chmod(struct vnode *vp, int mode, k
 	if (error)
 		return (error);
 
-	fstrans_start(vp->v_mount, FSTRANS_SHARED);
 	ip->i_mode &= ~ALLPERMS;
 	ip->i_mode |= (mode & ALLPERMS);
 	ip->i_flag |= IN_CHANGE;
 	DIP_ASSIGN(ip, mode, ip->i_mode);
-	fstrans_done(vp->v_mount);
 	return (0);
 }
 
@@ -461,7 +453,6 @@ ulfs_chown(struct vnode *vp, uid_t uid, 
 	if (error)
 		return (error);
 
-	fstrans_start(vp->v_mount, FSTRANS_SHARED);
 #if defined(LFS_QUOTA) || defined(LFS_QUOTA2)
 	ogid = ip->i_gid;
 	ouid = ip->i_uid;
@@ -486,12 +477,10 @@ ulfs_chown(struct vnode *vp, uid_t uid, 
 	DIP_ASSIGN(ip, uid, ouid);
 	(void) lfs_chkdq(ip, change, cred, FORCE);
 	(void) lfs_chkiq(ip, 1, cred, FORCE);
-	fstrans_done(vp->v_mount);
 	return (error);
  good:
 #endif /* LFS_QUOTA || LFS_QUOTA2 */
 	ip->i_flag |= IN_CHANGE;
-	fstrans_done(vp->v_mount);
 	return (0);
 }
 
@@ -505,21 +494,18 @@ ulfs_remove(void *v)
 	} */ *ap = v;
 	struct vnode	*vp, *dvp;
 	struct inode	*ip;
-	struct mount	*mp;
 	int		error;
 	struct ulfs_lookup_results *ulr;
 
 	vp = ap->a_vp;
 	dvp = ap->a_dvp;
 	ip = VTOI(vp);
-	mp = dvp->v_mount;
-	KASSERT(mp == vp->v_mount); /* XXX Not stable without lock.  */
+	KASSERT(dvp->v_mount == vp->v_mount); /* XXX Not stable without lock. */
 
 	/* XXX should handle this material another way */
 	ulr = &VTOI(dvp)->i_crap;
 	ULFS_CHECK_CRAPCOUNTER(VTOI(dvp));
 
-	fstrans_start(mp, FSTRANS_SHARED);
 	if (vp->v_type == VDIR || (ip->i_flags & (IMMUTABLE | APPEND)) ||
 	    (VTOI(dvp)->i_flags & APPEND))
 		error = EPERM;
@@ -534,7 +520,6 @@ ulfs_remove(void *v)
 	else
 		vput(vp);
 	vput(dvp);
-	fstrans_done(mp);
 	return (error);
 }
 
@@ -552,20 +537,18 @@ ulfs_link(void *v)
 	struct vnode *dvp = ap->a_dvp;
 	struct vnode *vp = ap->a_vp;
 	struct componentname *cnp = ap->a_cnp;
-	struct mount *mp = dvp->v_mount;
 	struct inode *ip;
 	int error;
 	struct ulfs_lookup_results *ulr;
 
 	KASSERT(dvp != vp);
 	KASSERT(vp->v_type != VDIR);
-	KASSERT(mp == vp->v_mount); /* XXX Not stable without lock.  */
+	KASSERT(dvp->v_mount == vp->v_mount); /* XXX Not stable without lock. */
 
 	/* XXX should handle this material another way */
 	ulr = &VTOI(dvp)->i_crap;
 	ULFS_CHECK_CRAPCOUNTER(VTOI(dvp));
 
-	fstrans_start(mp, FSTRANS_SHARED);
 	error = vn_lock(vp, LK_EXCLUSIVE);
 	if (error) {
 		VOP_ABORTOP(dvp, cnp);
@@ -600,7 +583,6 @@ ulfs_link(void *v)
  out2:
 	VN_KNOTE(vp, NOTE_LINK);
 	VN_KNOTE(dvp, NOTE_WRITE);
-	fstrans_done(mp);
 	return (error);
 }
 
@@ -636,7 +618,6 @@ ulfs_whiteout(void *v)
 
 	case CREATE:
 		/* create a new directory whiteout */
-		fstrans_start(dvp->v_mount, FSTRANS_SHARED);
 		KASSERTMSG((fs->um_maxsymlinklen > 0),
 		    "ulfs_whiteout: old format filesystem");
 
@@ -646,7 +627,6 @@ ulfs_whiteout(void *v)
 
 	case DELETE:
 		/* remove an existing directory whiteout */
-		fstrans_start(dvp->v_mount, FSTRANS_SHARED);
 		KASSERTMSG((fs->um_maxsymlinklen > 0),
 		    "ulfs_whiteout: old format filesystem");
 
@@ -657,7 +637,6 @@ ulfs_whiteout(void *v)
 		panic("ulfs_whiteout: unknown op");
 		/* NOTREACHED */
 	}
-	fstrans_done(dvp->v_mount);
 	return (error);
 }
 
@@ -697,8 +676,6 @@ ulfs_rmdir(void *v)
 		return (EINVAL);
 	}
 
-	fstrans_start(dvp->v_mount, FSTRANS_SHARED);
-
 	/*
 	 * Do not remove a directory that is in the process of being renamed.
 	 * Verify that the directory is empty (and valid). (Rmdir ".." won't
@@ -747,7 +724,6 @@ ulfs_rmdir(void *v)
  out:
 	VN_KNOTE(vp, NOTE_DELETE);
 	vput(vp);
-	fstrans_done(dvp->v_mount);
 	vput(dvp);
 	return (error);
 }

Reply via email to