HomeFreeBSD

kern_sendfile.c: fix bugs with handling of busy page states.

Description

kern_sendfile.c: fix bugs with handling of busy page states.

  • Do not call into a vnode pager while leaving some pages from the same block as the current run, xbusy. This immediately deadlocks if pager needs to instantiate the buffer.
  • Only relookup bogus pages after io finished, otherwise we might obliterate the valid pages by out of date disk content. While there, expand the comment explaining this pecularity.
  • Do not double-unbusy on error. Split unbusy for error case, which is left in the sendfile_swapin(), from the more properly coded normal case in sendfile_iodone().
  • Add an XXXKIB comment explaining the serious bug in the validation algorithm, not fixed by this patch series.

PR: 244713
Reviewed by: glebius, markj
Tested by: pho
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D24038

Details

Provenance
kibAuthored on
Reviewer
glebius
Differential Revision
D24038: Fixes for sendfile.
Parents
rS359472: MFC r343758 (mmacy): Fix deterministic builds by sorting input...
Branches
Unknown
Tags
Unknown