Date: Mon, 18 Jan 1999 20:20:06 -0500 (EST) From: "John S. Dyson" <root@dyson.iquest.net> To: dillon@apollo.backplane.com (Matthew Dillon) Cc: dg@root.com, jkh@FreeBSD.ORG, hackers@FreeBSD.ORG Subject: Re: Found problem w/ Paging performance over NFS Message-ID: <199901190120.UAA27272@dyson.iquest.net> In-Reply-To: <199901190001.QAA82498@apollo.backplane.com> from Matthew Dillon at "Jan 18, 99 04:01:52 pm"
next in thread | previous in thread | raw e-mail | index | archive | help
> Here's another piece of code to check:
>
> in kern/vfs_bio.c, allocbuf()
>
> } else if (m->flags & PG_BUSY) {
> s = splvm();
> if (m->flags & PG_BUSY) {
> vm_page_flag_set(m, PG_WANTED);
> tsleep(m, PVM, "pgtblk", 0);
> }
> splx(s);
> goto doretry;
> } else {
> ...
> if (tinc > (newbsize - toff))
> tinc = newbsize - toff;
> if (bp->b_flags & B_CACHE)
> vfs_buf_set_valid(bp, off, toff, tinc, m);
> vm_page_flag_clear(m, PG_ZERO);
> vm_page_wire(m);
> }
>
> Shouldn't those conditionals be 'm->busy || (m->flags & PG_BUSY)' instead
> of just testing against PG_BUSY? A pageout operation will set m->busy
> without setting PG_BUSY.
>
The existing code is okay. Pageouts don't need to set PG_BUSY. Also, *generally*
during buffer cache read write operations, the PG_BUSY flag doesn't need to be set
during the *entire* operation. Think filesystems with block sizes < PAGE_SIZE
as an example.
PG_BUSY is quite severe, and not always needed.
John
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199901190120.UAA27272>
