qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Venkateswararao Jujjuri (JV)" <jvrao@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: aliguori@us.ibm.com, Sripathi Kodi <sripathik@in.ibm.com>,
	Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
Subject: [Qemu-devel] [PATCH -V5 28/28] virtio-9p: Change handling of flags in open() path for 9P2000.L
Date: Thu,  2 Sep 2010 12:39:48 -0700	[thread overview]
Message-ID: <1283456388-13083-29-git-send-email-jvrao@linux.vnet.ibm.com> (raw)
In-Reply-To: <1283456388-13083-1-git-send-email-jvrao@linux.vnet.ibm.com>

From: Sripathi Kodi <sripathik@in.ibm.com>

This patch applies on top of 9P2000.L patches that we have on the list.
I took a look at how 9P server is handling open() flags in 9P2000.L path.
I think we can do away with the valid_flags() function and simplify the
code. The reasoning is as follows:

O_NOCTTY: (If the file is a terminal, don't make it the controlling
terminal of the process even though the process does not have a controlling
terminal) By the time the control reaches 9P client it is clear that what
we have is not a terminal device. Hence it does not matter what we do with
this flag. In any case 9P server can filter this flag out before making the
syscall.

O_NONBLOCK: (Don't block if i) Can't read/write to the file ii) Can't get
locks) This has an impact on FIFOs, but also on file locks. Hence we can
pass it down to the system call.

O_ASYNC: From the manpage:

   O_ASYNC
          Enable signal-driven I/O: generate a signal (SIGIO by default,  but
          this  can be changed via fcntl(2)) when input or output becomes pos-
          sible on this file descriptor.  This feature is only available  for
          terminals,  pseudo-terminals,  sockets,  and (since Linux 2.6) pipes
          and FIFOs.  See fcntl(2) for further details.

Again, this does not make any impact on regular files handled by 9P. Also,
we don't want 9P server to receive SIGIO. Hence I think 9P server can
filter this flag out before making the syscall.

O_CLOEXEC: This flag makes sense only on the client. If guest user space
sets this flag the guest VFS will take care of calling close() on the fd if
an exec() happens. Hence 9P client need not be bothered with this flag.
Also I think QEMU will not do an exec, but if it does, it makes sense to
close these fds. Hence we can pass this flag down to the syscall.

O_CREAT: Since we are in open() path it means we have confirmed that the file
exists. Hence there is no need to pass O_CREAT flag down to the system. In fact
on some versions of glibc this causes problems, because we pass O_CREAT flag,
but don't have permission bits. Hence we can just mask this flag out.

So in summary:

Mask out:
O_NOCTTY
O_ASYNC
O_CREAT

Pass-through:
O_NONBLOCK
O_CLOEXEC

Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
---
 hw/virtio-9p.c |   14 +-------------
 1 files changed, 1 insertions(+), 13 deletions(-)

diff --git a/hw/virtio-9p.c b/hw/virtio-9p.c
index 4b15ce7..32fa3bc 100644
--- a/hw/virtio-9p.c
+++ b/hw/virtio-9p.c
@@ -1684,15 +1684,6 @@ out:
     qemu_free(vs);
 }
 
-static inline int valid_flags(int flag)
-{
-    if (flag & O_NOCTTY || flag & O_NONBLOCK || flag & O_ASYNC ||
-            flag & O_CLOEXEC)
-        return 0;
-    else
-        return 1;
-}
-
 static void v9fs_open_post_lstat(V9fsState *s, V9fsOpenState *vs, int err)
 {
     int flags;
@@ -1709,11 +1700,8 @@ static void v9fs_open_post_lstat(V9fsState *s, V9fsOpenState *vs, int err)
         v9fs_open_post_opendir(s, vs, err);
     } else {
         if (s->proto_version == V9FS_PROTO_2000L) {
-            if (!valid_flags(vs->mode)) {
-                err = -EINVAL;
-                goto out;
-            }
             flags = vs->mode;
+            flags &= ~(O_NOCTTY | O_ASYNC | O_CREAT);
         } else {
             flags = omode_to_uflags(vs->mode);
         }
-- 
1.6.5.2

      parent reply	other threads:[~2010-09-02 19:29 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-02 19:39 [Qemu-devel] [PATCH-V5 00/28] Consolidated VirtFS work Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 01/28] qemu: virtio-9p: Recognize 9P2000.L protocol Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 02/28] qemu: virtio-9p: Implement statfs support in server Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 03/28] virtio-9p: Return correct error from v9fs_remove Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 04/28] [V4] virtio-9p: readdir implementation for 9p2000.L Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 05/28] virtio-9p: Compute iounit based on host filesystem block size Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 06/28] virtio-9p: getattr server implementation for 9P2000.L protocol Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 07/28] virtio-9p: Do not reset atime Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 08/28] [virtio-9p] Make v9fs_do_utimensat accept timespec structures instead of v9stat Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 09/28] virtio-9p: Implement server side of setattr for 9P2000.L protocol Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 10/28] [virtio-9p] Implement TLINK for 9P2000.L Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 11/28] [virtio-9p] Define and implement TSYMLINK " Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 12/28] [virtio-9p] This patch implements TLCREATE for 9p2000.L protocol Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 13/28] qemu: virtio-9p: Implement TMKNOD Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 14/28] qemu: virtio-9p: Implement TMKDIR Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 15/28] rename - change name of file or directory Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 16/28] [virtio-9p] qemu: virtio-9p: Implement LOPEN Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 17/28] virtio-9p: Add fidtype so that we can do type specific operation Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 18/28] virtio-9p: Implement TXATTRWALK Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 19/28] virtio-9p: Implement TXATTRCREATE Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 20/28] virtio-9p: Hide user.virtfs xattr in case of mapped security Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 21/28] virtio-9p: Add SM_NONE security model Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 22/28] virtio-9p: Use lchown which won't follow symlink Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 23/28] virtio-9p: Fix the memset usage Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 24/28] virtio-9p: Add support for removing xattr Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 25/28] virtio-9p: Make sure -virtfs option works correctly Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 26/28] [virtio-9p] Remove all instances of unnecessary dotu variable Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` [Qemu-devel] [PATCH -V5 27/28] [virtio-9p] This patch implements TLERROR/RLERROR on the qemu 9P server Venkateswararao Jujjuri (JV)
2010-09-02 19:39 ` Venkateswararao Jujjuri (JV) [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1283456388-13083-29-git-send-email-jvrao@linux.vnet.ibm.com \
    --to=jvrao@linux.vnet.ibm.com \
    --cc=aliguori@us.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=sripathik@in.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).