Page MenuHomeFreeBSD

FFS: allow sendfile(2) to work with block sizes greater than the page size

Authored by jah on Feb 25 2019, 4:42 AM.



Implement ffs_getpages_async(), which when possible calls the asynchronous
flavor of the generic pager's getpages function. When the underlying
block size is larger than the system page size, however, it will invoke
the (synchronous) buffer cache pager, followed by a call to the client
completion routine. This retains true asynchronous completion in the most
common (block size <= page size) case, which is important for the performance
of the new sendfile(2). The behavior in the larger block size case mirrors
the default implementation of VOP_GETPAGES_ASYNC, which most other
filesystems use anyway as they do not override the getpages_async method.

While here, fix an incorrect assert in the generic pager code.

PR: 235708

Diff Detail

rS FreeBSD src repository
Lint OK
No Unit Test Coverage
Build Status
Buildable 22710
Build 21808: arc lint + arc unit

Event Timeline

jah created this revision.Feb 25 2019, 4:42 AM
kib accepted this revision.Feb 25 2019, 7:18 AM
kib added inline comments.

Perhaps this should be committed on its own.

This revision is now accepted and ready to land.Feb 25 2019, 7:18 AM
glebius accepted this revision.Feb 25 2019, 9:58 PM
glebius added inline comments.

Yes, absolutely.

This revision was automatically updated to reflect the committed changes.