Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F152336981
D7151.id18646.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D7151.id18646.diff
View Options
Index: head/lib/libc/sys/aio_fsync.2
===================================================================
--- head/lib/libc/sys/aio_fsync.2
+++ head/lib/libc/sys/aio_fsync.2
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd July 15, 2016
+.Dd July 21, 2016
.Dt AIO_FSYNC 2
.Os
.Sh NAME
@@ -107,10 +107,10 @@
The asynchronous notification method in
.Fa iocb->aio_sigevent.sigev_notify
is invalid or not supported.
-.It Bq Er ENOSYS
-The
-.Fn aio_fsync
-system call is not supported.
+.It Bq Er EOPNOTSUPP
+Asynchronous file synchronization operations on the file descriptor
+.Fa iocb->aio_fildes
+are unsafe and unsafe asynchronous I/O operations are disabled.
.It Bq Er EINVAL
A value of the
.Fa op
Index: head/lib/libc/sys/aio_mlock.2
===================================================================
--- head/lib/libc/sys/aio_mlock.2
+++ head/lib/libc/sys/aio_mlock.2
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd July 15, 2016
+.Dd July 21, 2016
.Dt AIO_MLOCK 2
.Os
.Sh NAME
@@ -102,10 +102,6 @@
The asynchronous notification method in
.Fa iocb->aio_sigevent.sigev_notify
is invalid or not supported.
-.It Bq Er ENOSYS
-The
-.Fn aio_mlock
-system call is not supported.
.El
.Pp
If the request is successfully enqueued, but subsequently cancelled
Index: head/lib/libc/sys/aio_read.2
===================================================================
--- head/lib/libc/sys/aio_read.2
+++ head/lib/libc/sys/aio_read.2
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd July 15, 2016
+.Dd July 21, 2016
.Dt AIO_READ 2
.Os
.Sh NAME
@@ -125,10 +125,10 @@
The asynchronous notification method in
.Fa iocb->aio_sigevent.sigev_notify
is invalid or not supported.
-.It Bq Er ENOSYS
-The
-.Fn aio_read
-system call is not supported.
+.It Bq Er EOPNOTSUPP
+Asynchronous read operations on the file descriptor
+.Fa iocb->aio_fildes
+are unsafe and unsafe asynchronous I/O operations are disabled.
.El
.Pp
The following conditions may be synchronously detected when the
Index: head/lib/libc/sys/aio_write.2
===================================================================
--- head/lib/libc/sys/aio_write.2
+++ head/lib/libc/sys/aio_write.2
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd July 15, 2016
+.Dd July 21, 2016
.Dt AIO_WRITE 2
.Os
.Sh NAME
@@ -129,10 +129,10 @@
The asynchronous notification method in
.Fa iocb->aio_sigevent.sigev_notify
is invalid or not supported.
-.It Bq Er ENOSYS
-The
-.Fn aio_write
-system call is not supported.
+.It Bq Er EOPNOTSUPP
+Asynchronous write operations on the file descriptor
+.Fa iocb->aio_fildes
+are unsafe and unsafe asynchronous I/O operations are disabled.
.El
.Pp
The following conditions may be synchronously detected when the
Index: head/share/man/man4/aio.4
===================================================================
--- head/share/man/man4/aio.4
+++ head/share/man/man4/aio.4
@@ -27,7 +27,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd July 15, 2016
+.Dd July 21, 2016
.Dt AIO 4
.Os
.Sh NAME
@@ -37,17 +37,25 @@
The
.Nm
facility provides system calls for asynchronous I/O.
-However, asynchronous I/O operations are only enabled for certain file
-types by default.
-Asynchronous I/O operations for other file types may block an AIO daemon
-indefinitely resulting in process and/or system hangs.
-Asynchronous I/O operations can be enabled for all file types by setting
+Asynchronous I/O operations are not completed synchronously by the
+calling thread.
+Instead, the calling thread invokes one system call to request an
+asynchronous I/O operation.
+The status of a completed request is retrieved later via a separate
+system call.
+.Pp
+Asynchronous I/O operations on some file descriptor types may block an
+AIO daemon indefinitely resulting in process and/or system hangs.
+Operations on these file descriptor types are considered
+.Dq unsafe
+and disabled by default.
+They can be enabled by setting
the
.Va vfs.aio.enable_unsafe
sysctl node to a non-zero value.
.Pp
Asynchronous I/O operations on sockets and raw disk devices do not block
-indefinitely and are enabled by default.
+indefinitely and are always enabled.
.Pp
The
.Nm
Index: head/sys/kern/vfs_aio.c
===================================================================
--- head/sys/kern/vfs_aio.c
+++ head/sys/kern/vfs_aio.c
@@ -53,6 +53,7 @@
#include <sys/syscall.h>
#include <sys/sysent.h>
#include <sys/sysctl.h>
+#include <sys/syslog.h>
#include <sys/sx.h>
#include <sys/taskqueue.h>
#include <sys/vnode.h>
@@ -110,6 +111,11 @@
SYSCTL_INT(_vfs_aio, OID_AUTO, enable_unsafe, CTLFLAG_RW, &enable_aio_unsafe, 0,
"Permit asynchronous IO on all file types, not just known-safe types");
+static unsigned int unsafe_warningcnt = 1;
+SYSCTL_UINT(_vfs_aio, OID_AUTO, unsafe_warningcnt, CTLFLAG_RW,
+ &unsafe_warningcnt, 0,
+ "Warnings that will be triggered upon failed IO requests on unsafe files");
+
static int max_aio_procs = MAX_AIO_PROCS;
SYSCTL_INT(_vfs_aio, OID_AUTO, max_aio_procs, CTLFLAG_RW, &max_aio_procs, 0,
"Maximum number of kernel processes to use for handling async IO ");
@@ -1697,8 +1703,11 @@
safe = true;
}
}
- if (!(safe || enable_aio_unsafe))
+ if (!(safe || enable_aio_unsafe)) {
+ counted_warning(&unsafe_warningcnt,
+ "is attempting to use unsafe AIO requests");
return (EOPNOTSUPP);
+ }
if (opcode == LIO_SYNC) {
AIO_LOCK(ki);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Apr 15, 6:40 AM (6 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31524930
Default Alt Text
D7151.id18646.diff (5 KB)
Attached To
Mode
D7151: Add more documentation regarding unsafe AIO requests.
Attached
Detach File
Event Timeline
Log In to Comment