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