summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/vnode.c
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2020-09-25 11:43:20 +0000
committerJerry Jelinek <jerry.jelinek@joyent.com>2020-09-25 11:43:20 +0000
commit483cfaba9947c7223e1971a45f9b473b324689d9 (patch)
treedabc1982ac9aa7140fb8b5d96840815f443d68ae /usr/src/uts/common/fs/vnode.c
parent03ba8404acefe94916ad776068d4e3f2f585a224 (diff)
parentedd580643f2cf1434e252cd7779e83182ea84945 (diff)
downloadillumos-joyent-483cfaba9947c7223e1971a45f9b473b324689d9.tar.gz
[illumos-gate merge]release-20200924
commit edd580643f2cf1434e252cd7779e83182ea84945 12363 add O_DIRECT support
Diffstat (limited to 'usr/src/uts/common/fs/vnode.c')
-rw-r--r--usr/src/uts/common/fs/vnode.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/usr/src/uts/common/fs/vnode.c b/usr/src/uts/common/fs/vnode.c
index c57884a940..3babdbecdb 100644
--- a/usr/src/uts/common/fs/vnode.c
+++ b/usr/src/uts/common/fs/vnode.c
@@ -51,6 +51,7 @@
#include <sys/vfs.h>
#include <sys/vfs_opreg.h>
#include <sys/vnode.h>
+#include <sys/filio.h>
#include <sys/rwstlock.h>
#include <sys/fem.h>
#include <sys/stat.h>
@@ -1254,6 +1255,22 @@ top:
if ((error = VOP_SETATTR(vp, &vattr, 0, CRED(), NULL)) != 0)
goto out;
}
+
+ /*
+ * Turn on directio, if requested.
+ */
+ if (filemode & FDIRECT) {
+ if ((error = VOP_IOCTL(vp, _FIODIRECTIO, DIRECTIO_ON, 0,
+ CRED(), NULL, NULL)) != 0) {
+ /*
+ * On Linux, O_DIRECT returns EINVAL when the file
+ * system does not support directio, so we'll do the
+ * same.
+ */
+ error = EINVAL;
+ goto out;
+ }
+ }
out:
ASSERT(vp->v_count > 0);