diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2016-07-28 12:06:40 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2016-07-28 12:06:40 +0000 |
commit | bc225c5b51d24934a292e103ff405bf5c5487ea3 (patch) | |
tree | 48b3b74a6804439dd6bd2f28b2a5501642542977 | |
parent | cc9d6d44c8da4aac990e6a17890358f21cdeaf6b (diff) |
Notes
-rw-r--r-- | sys/kern/vfs_aio.c | 14 |
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) { |