Introduce a new protocol hook pru_aio_queue.
This allows a protocol to claim individual AIO requests instead of using the default socket AIO handling. Sponsored by: Chelsio Communications
This commit is contained in:
parent
e27428fd1c
commit
8722384b22
@ -734,8 +734,13 @@ soo_aio_queue(struct file *fp, struct kaiocb *job)
|
||||
{
|
||||
struct socket *so;
|
||||
struct sockbuf *sb;
|
||||
int error;
|
||||
|
||||
so = fp->f_data;
|
||||
error = (*so->so_proto->pr_usrreqs->pru_aio_queue)(so, job);
|
||||
if (error == 0)
|
||||
return (0);
|
||||
|
||||
switch (job->uaiocb.aio_lio_opcode) {
|
||||
case LIO_READ:
|
||||
sb = &so->so_rcv;
|
||||
|
@ -135,6 +135,7 @@ protosw_init(struct protosw *pr)
|
||||
|
||||
#define DEFAULT(foo, bar) if ((foo) == NULL) (foo) = (bar)
|
||||
DEFAULT(pu->pru_accept, pru_accept_notsupp);
|
||||
DEFAULT(pu->pru_aio_queue, pru_aio_queue_notsupp);
|
||||
DEFAULT(pu->pru_bind, pru_bind_notsupp);
|
||||
DEFAULT(pu->pru_bindat, pru_bindat_notsupp);
|
||||
DEFAULT(pu->pru_connect, pru_connect_notsupp);
|
||||
|
@ -3102,6 +3102,13 @@ pru_accept_notsupp(struct socket *so, struct sockaddr **nam)
|
||||
return EOPNOTSUPP;
|
||||
}
|
||||
|
||||
int
|
||||
pru_aio_queue_notsupp(struct socket *so, struct kaiocb *job)
|
||||
{
|
||||
|
||||
return EOPNOTSUPP;
|
||||
}
|
||||
|
||||
int
|
||||
pru_attach_notsupp(struct socket *so, int proto, struct thread *td)
|
||||
{
|
||||
|
@ -34,6 +34,7 @@
|
||||
#define _SYS_PROTOSW_H_
|
||||
|
||||
/* Forward declare these structures referenced from prototypes below. */
|
||||
struct kaiocb;
|
||||
struct mbuf;
|
||||
struct thread;
|
||||
struct sockaddr;
|
||||
@ -228,12 +229,14 @@ struct pr_usrreqs {
|
||||
struct thread *td);
|
||||
int (*pru_connectat)(int fd, struct socket *so,
|
||||
struct sockaddr *nam, struct thread *td);
|
||||
int (*pru_aio_queue)(struct socket *so, struct kaiocb *job);
|
||||
};
|
||||
|
||||
/*
|
||||
* All nonvoid pru_*() functions below return EOPNOTSUPP.
|
||||
*/
|
||||
int pru_accept_notsupp(struct socket *so, struct sockaddr **nam);
|
||||
int pru_aio_queue_notsupp(struct socket *so, struct kaiocb *job);
|
||||
int pru_attach_notsupp(struct socket *so, int proto, struct thread *td);
|
||||
int pru_bind_notsupp(struct socket *so, struct sockaddr *nam,
|
||||
struct thread *td);
|
||||
|
Loading…
Reference in New Issue
Block a user