Date: Wed, 21 Mar 2001 13:42:01 -0800 (PST) From: Matt Dillon <dillon@earth.backplane.com> To: Poul-Henning Kamp <phk@critter.freebsd.dk> Cc: mjacob@feral.com, arch@FreeBSD.ORG Subject: Re: remind me again, why is MAXPHYS only 128k ? Message-ID: <200103212142.f2LLg1921851@earth.backplane.com> References: <89281.985210220@critter>
next in thread | previous in thread | raw e-mail | index | archive | help
:Yeah, it's a mistake for struct buf/bio to use a fixed array of pages :(b->b_pages) If we made that a ** instead we could have a variable :MAXPHYS... : :-- :Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 :phk@FreeBSD.ORG | TCP/IP since RFC 956 Remember that allocating struct buf's cannot block in MALLOC or anything like that. It is difficult to deal with struct buf exhaustion in vfs/bio. We can't add any new blocking conditions anywhere and still have a stable system. There are a couple of possible solutions, including preallocating a VM pages[] array of pointers that covers the *ENTIRE* struct buf KVA space and then simply assigning the appropriate point to a vm_page_t **b_pages element in the struct buf at the point where we associate KVM with the struct buf. This would give us maximum flexibility. Perhaps a pages[] array covering the entire kernel VM space would be an even better solution. 1G / 4K x 4 bytes = 1MB. Not a big deal. -Matt To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200103212142.f2LLg1921851>