Date: Sun, 17 Feb 2019 20:45:09 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 235708] panic: vnode_pager_generic_getpages: sector size 8192 too large Message-ID: <bug-235708-227-bTyNkQuWva@https.bugs.freebsd.org/bugzilla/> In-Reply-To: <bug-235708-227@https.bugs.freebsd.org/bugzilla/> References: <bug-235708-227@https.bugs.freebsd.org/bugzilla/>
next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D235708 Jason A. Harmening <jah@FreeBSD.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|bugs@FreeBSD.org |jah@FreeBSD.org CC| |jah@FreeBSD.org --- Comment #1 from Jason A. Harmening <jah@FreeBSD.org> --- It looks like FFS is still using the generic pager for its getpages_async V= NOP, which doesn't work with block sizes larger than the system page size. The synchronous variant uses vfs_bio_getpages() to handle larger blocksizes, but since that iteratively calls bread() it is a fundamentally synchronous operation. I need to do more digging, but right now it seems like trying to implement = an asynchronous-ish variant of vfs_bio_getpages() might be too much work for little real benefit in a not-common use case. It seems like it might be acceptable to implement an ffs_getpages_async() w= hich still uses the asynchronous generic pager when possible, but if blocksize > pagesize will fall back to synchronous vfs_bio_getpages() and then immediat= ely call iodone. In fact, vop_stdgetpages_async() is implemented as a call to synchronous VOP_GETPAGES() followed by iodone. This would allow sendfile(2= ) to work with larger blocksizes while still preserving the performance benefit = of asynchronous completion for the majority (blocksize <=3D pagesize) case. --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-235708-227-bTyNkQuWva>