Page MenuHomeFreeBSD

D48863.diff
No OneTemporary

D48863.diff

diff --git a/sys/dev/cxgbe/tom/t4_tom.c b/sys/dev/cxgbe/tom/t4_tom.c
--- a/sys/dev/cxgbe/tom/t4_tom.c
+++ b/sys/dev/cxgbe/tom/t4_tom.c
@@ -2219,11 +2219,16 @@
if (ulp_mode(toep) == ULP_MODE_TCPDDP ||
ulp_mode(toep) == ULP_MODE_NONE) {
error = t4_aio_queue_ddp(so, job);
- if (error != EOPNOTSUPP)
- return (error);
+ if (error == 0)
+ return (0);
+ else if (error != EOPNOTSUPP)
+ return (soaio_queue_generic(so, job));
}
- return (t4_aio_queue_aiotx(so, job));
+ if (t4_aio_queue_aiotx(so, job) != 0)
+ return (soaio_queue_generic(so, job));
+ else
+ return (0);
}
static int
diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c
--- a/sys/kern/sys_socket.c
+++ b/sys/kern/sys_socket.c
@@ -810,15 +810,16 @@
static int
soo_aio_queue(struct file *fp, struct kaiocb *job)
{
- struct socket *so;
+ struct socket *so = fp->f_data;
+
+ return (so->so_proto->pr_aio_queue(so, job));
+}
+
+int
+soaio_queue_generic(struct socket *so, struct kaiocb *job)
+{
struct sockbuf *sb;
sb_which which;
- int error;
-
- so = fp->f_data;
- error = so->so_proto->pr_aio_queue(so, job);
- if (error == 0)
- return (0);
/* Lock through the socket, since this may be a listening socket. */
switch (job->uaiocb.aio_lio_opcode & (LIO_WRITE | LIO_READ)) {
diff --git a/sys/kern/uipc_domain.c b/sys/kern/uipc_domain.c
--- a/sys/kern/uipc_domain.c
+++ b/sys/kern/uipc_domain.c
@@ -58,12 +58,6 @@
return (EOPNOTSUPP);
}
-static int
-pr_aio_queue_notsupp(struct socket *so, struct kaiocb *job)
-{
- return (EOPNOTSUPP);
-}
-
static int
pr_bind_notsupp(struct socket *so, struct sockaddr *nam, struct thread *td)
{
@@ -197,10 +191,10 @@
DEFAULT(pr_sopoll, sopoll_generic);
DEFAULT(pr_setsbopt, sbsetopt);
DEFAULT(pr_kqfilter, sokqfilter_generic);
+ DEFAULT(pr_aio_queue, soaio_queue_generic);
#define NOTSUPP(foo) if (pr->foo == NULL) pr->foo = foo ## _notsupp
NOTSUPP(pr_accept);
- NOTSUPP(pr_aio_queue);
NOTSUPP(pr_bind);
NOTSUPP(pr_bindat);
NOTSUPP(pr_connect);
diff --git a/sys/sys/socketvar.h b/sys/sys/socketvar.h
--- a/sys/sys/socketvar.h
+++ b/sys/sys/socketvar.h
@@ -527,6 +527,7 @@
sopeeloff(struct socket *);
int sopoll_generic(struct socket *so, int events, struct thread *td);
int sokqfilter_generic(struct socket *so, struct knote *kn);
+int soaio_queue_generic(struct socket *so, struct kaiocb *job);
int soreceive(struct socket *so, struct sockaddr **paddr, struct uio *uio,
struct mbuf **mp0, struct mbuf **controlp, int *flagsp);
int soreceive_stream(struct socket *so, struct sockaddr **paddr,

File Metadata

Mime Type
text/plain
Expires
Sat, Feb 8, 2:02 PM (21 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16527391
Default Alt Text
D48863.diff (2 KB)

Event Timeline