https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235708

Jason A. Harmening <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|[email protected]            |[email protected]
                 CC|                            |[email protected]

--- Comment #1 from Jason A. Harmening <[email protected]> ---
It looks like FFS is still using the generic pager for its getpages_async VNOP,
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() which
still uses the asynchronous generic pager when possible, but if blocksize >
pagesize will fall back to synchronous vfs_bio_getpages() and then immediately
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 <= pagesize) case.

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"

Reply via email to