diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-09-25 11:43:20 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-09-25 11:43:20 +0000 |
commit | 483cfaba9947c7223e1971a45f9b473b324689d9 (patch) | |
tree | dabc1982ac9aa7140fb8b5d96840815f443d68ae /usr/src/uts/common/fs/vnode.c | |
parent | 03ba8404acefe94916ad776068d4e3f2f585a224 (diff) | |
parent | edd580643f2cf1434e252cd7779e83182ea84945 (diff) | |
download | illumos-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.c | 17 |
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); |