/*-1* SPDX-License-Identifier: BSD-2-Clause2*3* Copyright (c) 2024 The FreeBSD Foundation4*5* This software were developed by Konstantin Belousov <[email protected]>6* under sponsorship from the FreeBSD Foundation.7*8* Redistribution and use in source and binary forms, with or without9* modification, are permitted provided that the following conditions10* are met:11* 1. Redistributions of source code must retain the above copyright12* notice, this list of conditions and the following disclaimer.13* 2. Redistributions in binary form must reproduce the above copyright14* notice, this list of conditions and the following disclaimer in the15* documentation and/or other materials provided with the distribution.16*17* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND18* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE19* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE20* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE21* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL22* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS23* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)24* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT25* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY26* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF27* SUCH DAMAGE.28*/2930#include <sys/aio.h>31#include <errno.h>32#include <stddef.h>3334int35aio_read2(struct aiocb *iocb, int flags)36{37int error;3839if ((flags & ~(AIO_OP2_FOFFSET | AIO_OP2_VECTORED)) != 0) {40errno = EINVAL;41return (-1);42}43iocb->aio_lio_opcode = LIO_READ;44if ((flags & AIO_OP2_FOFFSET) != 0)45iocb->aio_lio_opcode |= LIO_FOFFSET;46if ((flags & AIO_OP2_VECTORED) != 0)47iocb->aio_lio_opcode |= LIO_VECTORED;4849error = lio_listio(LIO_NOWAIT, &iocb, 1, NULL);50if (error == -1 && errno == EIO) {51error = aio_error(iocb);52if (error != -1 && error != 0)53errno = error;54error = -1;55}56return (error);57}585960