The semantics for the asyncio function are split between the PFS
and the LFS. Some of the features whose support might be ambiguous
are discussed here. Refer to aio_suspend (BPX1ASP, BPX4ASP) — Wait for an asynchronous
I/O request in z/OS UNIX System Services Programming: Assembler Callable Services Reference while
reading this topic.
The LFS must handle the following:
- The aiocb structure. The interface to the PFS is through the
regular vnode operations, such as vn_rdwr and vn_sndrcv.
- The returned information. The PFS should return 0 for a successful
Part 1, and the normal functional values from Part 2. In particular,
the LFS handles the EINPROGRESS return_code.
- Scheduling the SRB and calling the I/O completion notification.
This includes calling the user exit, posting an ECB, and sending a
signal.
- AioSync. This appears to the PFS as a normal synchronous operation
(osi_asy1=osi_asy2=OFF).
- AioOk2CompImd, for accept and connect. The osi_ok2compimd bit
is always on in the PFS for vn_accept and vn_connect, so the PFS can
always complete these operations immediately without calling osi_upda
or osi_sched. osi_compimd should be turned on if the PFS does happen
to complete these operations immediately.
- The select and poll functions, which are already asynchronous
with respect to the PFS. The PFS continues to call osi_selpost for
the vfs_batsel and vn_select operations.
The PFS must handle or contribute to the support of:
- AioOk2CompImd, for reads (including accept_and_recv) and writes,
through support for osi_ok2compimd. Even when the PFS is able to complete
a read or write type of operation immediately, it must still call
osi_sched whenever osi_ok2compimd=off. See Asynchronous I/O flow details for
details.
- AioCallB4 and deferred buffer allocation, by not requiring the
presence of the user's data buffers during Part 1, unless osi_ok2compimd=on;
and by passing the length of data that is available to be received
to osi_sched.
- The ECANCELED Return_code, by failing a request with that return
code when the request has been removed from a waiting queue because
of vn_cancel. The race condition between vn_cancel and data arrival
can only be resolved by the PFS.