summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorVenkateswararao Jujjuri (JV) <jvrao@linux.vnet.ibm.com>2010-09-19 10:47:11 -0700
committerAnthony Liguori <aliguori@us.ibm.com>2010-10-20 12:10:58 -0500
commit0f8151cb75e09c9a7de24a37f22166e46a9eaf7b (patch)
treefeb70b137196bc20f6d07176ecf5391ba9e0cbdc
parentdf0973a4650d4889463ff66cb6fbdf0ab8090c70 (diff)
downloadfocaccia-qemu-0f8151cb75e09c9a7de24a37f22166e46a9eaf7b.tar.gz
focaccia-qemu-0f8151cb75e09c9a7de24a37f22166e46a9eaf7b.zip
[virtio-9p] Ignore O_DIRECT hint from client.
The O_DIRECT flag imposes alignment restrictions on the length and address
of userspace buffers and the file offset of I/Os.

While VirtFS/9P has plans to implement O_DIRECT behavior on the server,
for now we will stick to a behavior like NFS by bypassing the page cache
only on the client. Server may still cache the I/O.

Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
-rw-r--r--hw/virtio-9p.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/hw/virtio-9p.c b/hw/virtio-9p.c
index 6c807953e9..cb6366bcc6 100644
--- a/hw/virtio-9p.c
+++ b/hw/virtio-9p.c
@@ -1704,6 +1704,8 @@ static void v9fs_open_post_lstat(V9fsState *s, V9fsOpenState *vs, int err)
         if (s->proto_version == V9FS_PROTO_2000L) {
             flags = vs->mode;
             flags &= ~(O_NOCTTY | O_ASYNC | O_CREAT);
+            /* Ignore direct disk access hint until the server supports it. */
+            flags &= ~O_DIRECT;
         } else {
             flags = omode_to_uflags(vs->mode);
         }
@@ -1826,6 +1828,9 @@ static void v9fs_lcreate(V9fsState *s, V9fsPDU *pdu)
     v9fs_string_sprintf(&vs->fullname, "%s/%s", vs->fidp->path.data,
              vs->name.data);
 
+    /* Ignore direct disk access hint until the server supports it. */
+    flags &= ~O_DIRECT;
+
     vs->fidp->fs.fd = v9fs_do_open2(s, vs->fullname.data, vs->fidp->uid,
             gid, flags, mode);
     v9fs_lcreate_post_do_open2(s, vs, err);