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
Automatic diff as part of commit; lint not applicable.
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

kib added inline comments.
796 ↗(On Diff #54331)

Perhaps this should be committed on its own.

This revision is now accepted and ready to land.Feb 25 2019, 7:18 AM
glebius added inline comments.
796 ↗(On Diff #54331)

Yes, absolutely.

This revision was automatically updated to reflect the committed changes.