Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F109620639
D48863.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D48863.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D48863: sockets: make pr_aio_queue the default method
Attached
Detach File
Event Timeline
Log In to Comment