Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
WAPBL patch for testing
Hi all,
the attached patch is supposed to fix both hangs (wchan tstile) and
performance issues with WAPBL. Please test it and report any issues.
I'd like to see some review for this too. I can't find a reason why the
WAPBL lock should be hold in that places nor can I find a code path from
UFS itself to getpages with lock already being hold, but I could be
wrong.
Joerg
Index: genfs_io.c
===================================================================
RCS file: /home/joerg/repo/netbsd/src/sys/miscfs/genfs/genfs_io.c,v
retrieving revision 1.13
diff -u -p -r1.13 genfs_io.c
--- genfs_io.c 19 Oct 2008 18:17:13 -0000 1.13
+++ genfs_io.c 31 Oct 2008 01:53:36 -0000
@@ -779,7 +779,6 @@ genfs_do_putpages(struct vnode *vp, off_
int flags;
int dirtygen;
bool modified;
- bool need_wapbl;
bool has_trans;
bool cleanall;
bool onworklst;
@@ -794,8 +793,6 @@ genfs_do_putpages(struct vnode *vp, off_
vp, uobj->uo_npages, startoff, endoff - startoff);
has_trans = false;
- need_wapbl = (!pagedaemon && vp->v_mount && vp->v_mount->mnt_wapbl &&
- (origflags & PGO_JOURNALLOCKED) == 0);
retry:
modified = false;
@@ -809,8 +806,6 @@ retry:
vn_syncer_remove_from_worklist(vp);
}
if (has_trans) {
- if (need_wapbl)
- WAPBL_END(vp->v_mount);
fstrans_done(vp->v_mount);
}
mutex_exit(slock);
@@ -829,13 +824,6 @@ retry:
return error;
} else
fstrans_start(vp->v_mount, FSTRANS_LAZY);
- if (need_wapbl) {
- error = WAPBL_BEGIN(vp->v_mount);
- if (error) {
- fstrans_done(vp->v_mount);
- return error;
- }
- }
has_trans = true;
mutex_enter(slock);
goto retry;
@@ -958,6 +946,7 @@ retry:
mutex_enter(slock);
} else {
pg->flags |= PG_WANTED;
+ printf(".");
UVM_UNLOCK_AND_WAIT(pg, slock, 0, "genput", 0);
mutex_enter(slock);
}
@@ -1210,8 +1199,6 @@ skip_scan:
}
if (has_trans) {
- if (need_wapbl)
- WAPBL_END(vp->v_mount);
fstrans_done(vp->v_mount);
}
@@ -1585,12 +1572,6 @@ genfs_directio(struct vnode *vp, struct
return;
}
- if ((ioflag & IO_JOURNALLOCKED) == 0) {
- error = WAPBL_BEGIN(vp->v_mount);
- if (error)
- return;
- }
-
/*
* Do as much of the uio as possible with direct I/O.
*/
@@ -1636,9 +1617,6 @@ genfs_directio(struct vnode *vp, struct
uio->uio_offset += len;
uio->uio_resid -= len;
}
-
- if ((ioflag & IO_JOURNALLOCKED) == 0)
- WAPBL_END(vp->v_mount);
}
/*
Home |
Main Index |
Thread Index |
Old Index