Module Name: src
Committed By: maya
Date: Wed Jul 26 15:07:27 UTC 2017
Modified Files:
src/sys/ufs/lfs: lfs_segment.c
Log Message:
Revert r1.272 fix to PR kern/52301, the performance hit is making things
unusable.
To generate a diff of this commit:
cvs rdiff -u -r1.272 -r1.273 src/sys/ufs/lfs/lfs_segment.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_segment.c
diff -u src/sys/ufs/lfs/lfs_segment.c:1.272 src/sys/ufs/lfs/lfs_segment.c:1.273
--- src/sys/ufs/lfs/lfs_segment.c:1.272 Thu Jun 15 14:37:30 2017
+++ src/sys/ufs/lfs/lfs_segment.c Wed Jul 26 15:07:27 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_segment.c,v 1.272 2017/06/15 14:37:30 maya Exp $ */
+/* $NetBSD: lfs_segment.c,v 1.273 2017/07/26 15:07:27 maya 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_segment.c,v 1.272 2017/06/15 14:37:30 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.273 2017/07/26 15:07:27 maya Exp $");
#ifdef DEBUG
# define vndebug(vp, str) do { \
@@ -603,6 +603,7 @@ lfs_segwrite(struct mount *mp, int flags
SEGUSE *segusep;
int do_ckp, did_ckp, error;
unsigned n, segleft, maxseg, sn, i, curseg;
+ int writer_set = 0;
int dirty;
int redo;
SEGSUM *ssp;
@@ -627,8 +628,6 @@ lfs_segwrite(struct mount *mp, int flags
if (do_ckp)
flags &= ~SEGM_SINGLE;
- lfs_writer_enter(fs, "lfs segwrite");
-
lfs_seglock(fs, flags | (do_ckp ? SEGM_CKP : 0));
sp = fs->lfs_sp;
if (sp->seg_flags & (SEGM_CLEAN | SEGM_CKP))
@@ -654,7 +653,11 @@ lfs_segwrite(struct mount *mp, int flags
break;
}
- if (do_ckp) {
+ if (do_ckp || fs->lfs_dirops == 0) {
+ if (!writer_set) {
+ lfs_writer_enter(fs, "lfs writer");
+ writer_set = 1;
+ }
error = lfs_writevnodes(fs, mp, sp, VN_DIROP);
if (um_error == 0)
um_error = error;
@@ -803,7 +806,8 @@ lfs_segwrite(struct mount *mp, int flags
/* Note Ifile no longer needs to be written */
fs->lfs_doifile = 0;
- lfs_writer_leave(fs);
+ if (writer_set)
+ lfs_writer_leave(fs);
/*
* If we didn't write the Ifile, we didn't really do anything.