Subject: Re: Now: Fs suspension take 2
To: None <hannken@eis.cs.tu-bs.de>
From: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
List: tech-kern
Date: 08/18/2006 18:08:32
> @@ -704,12 +700,22 @@ uvmpd_scan_inactive(struct pglist *pglst
> }
> #endif /* defined(READAHEAD_STATS) */
>
> if ((p->pqflags & PQ_SWAPBACKED) == 0) {
> + struct vnode *vp = (struct vnode *)uobj;
> +
> + if (UVM_OBJ_IS_VNODE(uobj) && fstrans_start(vp->v_mount,
> + FSTRANS_SHARED | FSTRANS_NOWAIT) != 0) {
> + uvmexp.pdobscan--;
> + simple_unlock(slock);
> + continue;
> + }
> uvm_unlock_pageq();
> (void) (uobj->pgops->pgo_put)(uobj, p->offset,
> p->offset + PAGE_SIZE, PGO_CLEANIT|PGO_FREE);
> uvm_lock_pageq();
> + if (UVM_OBJ_IS_VNODE(uobj))
> + fstrans_done(vp->v_mount);
> if (nextpg &&
> (nextpg->pqflags & PQ_INACTIVE) == 0) {
> nextpg = TAILQ_FIRST(pglst);
> }
why is it done here, rather than ffs_putpages or vnode pager?
YAMAMOTO Takashi