HomeFreeBSD

Generalize resources freeing in sendfile with different scenarios.

Description

Generalize resources freeing in sendfile with different scenarios.
Now we execute sendfile_iodone() in all possible cases, which
guarantees that vm_object_pip_wakeup() is called and sfio structure
is freed.

At the beginning of sendfile initialize sfio->m to NULL, that would
indicate that the mbuf chain either doesn't exist, or belongs to the
syscall (not to I/O completion). Fill sfio->m only at a point when
we are positive that there are I/Os ongoing and before releasing
syscall's reference on sfio.

In sendfile_iodone() perform vm_object_pip_wakeup() once last
reference is released, then check for sfio->m. NULL pointer
indicates that we need only to free the memory.

Reviewed by: jtl, gallatin

Details

Provenance
glebiusAuthored on
Parents
rS358319: Make ktls_frame() never fail. Caller must supply correct mbufs.
Branches
Unknown
Tags
Unknown