summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2016-07-28 12:06:40 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2016-07-28 12:06:40 +0000
commitbc225c5b51d24934a292e103ff405bf5c5487ea3 (patch)
tree48b3b74a6804439dd6bd2f28b2a5501642542977
parentcc9d6d44c8da4aac990e6a17890358f21cdeaf6b (diff)
Notes
-rw-r--r--sys/kern/vfs_aio.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/sys/kern/vfs_aio.c b/sys/kern/vfs_aio.c
index 3c9aa446fb84..1c75ff9d4b86 100644
--- a/sys/kern/vfs_aio.c
+++ b/sys/kern/vfs_aio.c
@@ -1664,7 +1664,10 @@ aio_queue_file(struct file *fp, struct kaiocb *job)
struct aioliojob *lj;
struct kaioinfo *ki;
struct kaiocb *job2;
+ struct vnode *vp;
+ struct mount *mp;
int error, opcode;
+ bool safe;
lj = job->lio;
ki = job->userproc->p_aioinfo;
@@ -1685,7 +1688,16 @@ aio_queue_file(struct file *fp, struct kaiocb *job)
goto done;
#endif
queueit:
- if (!enable_aio_unsafe)
+ safe = false;
+ if (fp->f_type == DTYPE_VNODE) {
+ vp = fp->f_vnode;
+ if (vp->v_type == VREG || vp->v_type == VDIR) {
+ mp = fp->f_vnode->v_mount;
+ if (mp == NULL || (mp->mnt_flag & MNT_LOCAL) != 0)
+ safe = true;
+ }
+ }
+ if (!(safe || enable_aio_unsafe))
return (EOPNOTSUPP);
if (opcode == LIO_SYNC) {