Page MenuHomeFreeBSD

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

Authored by jah on Feb 25 2019, 4:42 AM.
Tags
None
Referenced Files
Unknown Object (File)
Oct 24 2024, 6:38 PM
Unknown Object (File)
Oct 3 2024, 7:09 PM
Unknown Object (File)
Sep 8 2024, 7:36 PM
Unknown Object (File)
Sep 7 2024, 5:29 PM
Unknown Object (File)
Sep 5 2024, 6:28 AM
Unknown Object (File)
Aug 18 2024, 7:37 PM
Unknown Object (File)
Aug 15 2024, 10:20 PM
Unknown Object (File)
Aug 5 2024, 11:28 PM
Subscribers

Details

Summary

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

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

kib added inline comments.
sys/vm/vnode_pager.c
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.
sys/vm/vnode_pager.c
796 ↗(On Diff #54331)

Yes, absolutely.

This revision was automatically updated to reflect the committed changes.