All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Venkateswararao Jujjuri (JV)" <jvrao@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: "Venkateswararao Jujjuri (JV)" <jvrao@linux.vnet.ibm.com>,
	stefanha@linux.vnet.ibm.com
Subject: [Qemu-devel] [PATCH 18/29] [virtio-9p] clean up v9fs_create Rearrange the code
Date: Wed, 25 May 2011 16:53:06 -0700	[thread overview]
Message-ID: <1306367597-797-19-git-send-email-jvrao@linux.vnet.ibm.com> (raw)
In-Reply-To: <1306367597-797-1-git-send-email-jvrao@linux.vnet.ibm.com>

so that we can avoid V9fsCreateState and additional	malloc()s.

Signed-off-by: Venkateswararao Jujjuri "<jvrao@linux.vnet.ibm.com>
---
 hw/9pfs/virtio-9p.c |  149 ++++++++++++++++++++++-----------------------------
 hw/9pfs/virtio-9p.h |   14 -----
 2 files changed, 65 insertions(+), 98 deletions(-)

diff --git a/hw/9pfs/virtio-9p.c b/hw/9pfs/virtio-9p.c
index 14eefac..9976516 100644
--- a/hw/9pfs/virtio-9p.c
+++ b/hw/9pfs/virtio-9p.c
@@ -82,11 +82,6 @@ static int v9fs_do_lstat(V9fsState *s, V9fsString *path, struct stat *stbuf)
     return s->ops->lstat(&s->ctx, path->data, stbuf);
 }
 
-static DIR *v9fs_do_opendir(V9fsState *s, V9fsString *path)
-{
-    return s->ops->opendir(&s->ctx, path->data);
-}
-
 static void v9fs_do_rewinddir(V9fsState *s, DIR *dir)
 {
     return s->ops->rewinddir(&s->ctx, dir);
@@ -122,18 +117,6 @@ static int v9fs_do_chmod(V9fsState *s, V9fsString *path, mode_t mode)
     return s->ops->chmod(&s->ctx, path->data, &cred);
 }
 
-static int v9fs_do_mknod(V9fsState *s, char *name,
-        mode_t mode, dev_t dev, uid_t uid, gid_t gid)
-{
-    FsCred cred;
-    cred_init(&cred);
-    cred.fc_uid = uid;
-    cred.fc_gid = gid;
-    cred.fc_mode = mode;
-    cred.fc_rdev = dev;
-    return s->ops->mknod(&s->ctx, name, &cred);
-}
-
 static int v9fs_do_symlink(V9fsState *s, V9fsFidState *fidp,
         const char *oldpath, const char *newpath, gid_t gid)
 {
@@ -2002,71 +1985,75 @@ out:
 
 static void v9fs_create(void *opaque)
 {
-    int err = 0;
     int32_t fid;
-    V9fsCreateState *vs;
+    int err = 0;
+    size_t offset = 7;
+    V9fsFidState *fidp;
+    V9fsQID qid;
+    int32_t perm;
+    int8_t mode;
+    struct stat stbuf;
+    V9fsString name;
+    V9fsString extension;
+    V9fsString fullname;
+    int iounit;
     V9fsPDU *pdu = opaque;
-    V9fsState *s = pdu->s;
-
-    vs = qemu_malloc(sizeof(*vs));
-    vs->pdu = pdu;
-    vs->offset = 7;
 
-    v9fs_string_init(&vs->fullname);
+    v9fs_string_init(&fullname);
 
-    pdu_unmarshal(vs->pdu, vs->offset, "dsdbs", &fid, &vs->name,
-                                &vs->perm, &vs->mode, &vs->extension);
+    pdu_unmarshal(pdu, offset, "dsdbs", &fid, &name,
+                  &perm, &mode, &extension);
 
-    vs->fidp = lookup_fid(s, fid);
-    if (vs->fidp == NULL) {
+    fidp = lookup_fid(pdu->s, fid);
+    if (fidp == NULL) {
         err = -EINVAL;
         goto out;
     }
 
-    v9fs_string_sprintf(&vs->fullname, "%s/%s", vs->fidp->path.data,
-                                                        vs->name.data);
-    err = v9fs_do_lstat(s, &vs->fullname, &vs->stbuf);
-    if (err == 0 || errno != ENOENT) {
-        err = -errno;
+    v9fs_string_sprintf(&fullname, "%s/%s", fidp->path.data, name.data);
+    err = v9fs_co_lstat(pdu->s, &fullname, &stbuf);
+    if (!err) {
+        err = -EEXIST;
+        goto out;
+    } else if (err != -ENOENT) {
         goto out;
     }
-    if (vs->perm & P9_STAT_MODE_DIR) {
-        err = v9fs_co_mkdir(s, vs->fullname.data, vs->perm & 0777,
-                vs->fidp->uid, -1);
-        if (!err) {
-            vs->fidp->fs.dir = v9fs_do_opendir(s, &vs->fullname);
+    if (perm & P9_STAT_MODE_DIR) {
+        err = v9fs_co_mkdir(pdu->s, fullname.data, perm & 0777,
+                            fidp->uid, -1);
+        if (err < 0) {
+            goto out;
         }
-        if (err < 0 || !vs->fidp->fs.dir) {
-            err = -errno;
-            vs->fidp->fid_type = P9_FID_NONE;
+        err = v9fs_co_opendir(pdu->s, fidp);
+        if (err < 0) {
+            goto out;
         }
-        vs->fidp->fid_type = P9_FID_DIR;
-    } else if (vs->perm & P9_STAT_MODE_SYMLINK) {
-        err = v9fs_do_symlink(s, vs->fidp, vs->extension.data,
-                vs->fullname.data, -1);
+        fidp->fid_type = P9_FID_DIR;
+    } else if (perm & P9_STAT_MODE_SYMLINK) {
+        err = v9fs_do_symlink(pdu->s, fidp, extension.data,
+                              fullname.data, -1);
         if (err < 0) {
             err = -errno;
             goto out;
         }
-    } else if (vs->perm & P9_STAT_MODE_LINK) {
-        int32_t nfid = atoi(vs->extension.data);
-        V9fsFidState *nfidp = lookup_fid(s, nfid);
+    } else if (perm & P9_STAT_MODE_LINK) {
+        int32_t nfid = atoi(extension.data);
+        V9fsFidState *nfidp = lookup_fid(pdu->s, nfid);
         if (nfidp == NULL) {
             err = -EINVAL;
             goto out;
         }
-        err = v9fs_do_link(s, &nfidp->path, &vs->fullname);
+        err = v9fs_do_link(pdu->s, &nfidp->path, &fullname);
         if (err < 0) {
             err = -errno;
             goto out;
         }
-    } else if (vs->perm & P9_STAT_MODE_DEVICE) {
+    } else if (perm & P9_STAT_MODE_DEVICE) {
         char ctype;
         uint32_t major, minor;
         mode_t nmode = 0;
 
-        if (sscanf(vs->extension.data, "%c %u %u", &ctype, &major,
-                                        &minor) != 3) {
+        if (sscanf(extension.data, "%c %u %u", &ctype, &major, &minor) != 3) {
             err = -errno;
             goto out;
         }
@@ -2083,57 +2070,51 @@ static void v9fs_create(void *opaque)
             goto out;
         }
 
-        nmode |= vs->perm & 0777;
-        err = v9fs_do_mknod(s, vs->fullname.data, nmode,
-                makedev(major, minor), vs->fidp->uid, -1);
+        nmode |= perm & 0777;
+        err = v9fs_co_mknod(pdu->s, &fullname, fidp->uid, -1,
+                            makedev(major, minor), nmode);
         if (err < 0) {
-            err = -errno;
             goto out;
         }
-    } else if (vs->perm & P9_STAT_MODE_NAMED_PIPE) {
-        err = v9fs_do_mknod(s, vs->fullname.data, S_IFIFO | (vs->perm & 0777),
-                0, vs->fidp->uid, -1);
+    } else if (perm & P9_STAT_MODE_NAMED_PIPE) {
+        err = v9fs_co_mknod(pdu->s, &fullname, fidp->uid, -1,
+                            0, S_IFIFO | (perm & 0777));
         if (err < 0) {
-            err = -errno;
             goto out;
         }
-    } else if (vs->perm & P9_STAT_MODE_SOCKET) {
-        err = v9fs_do_mknod(s, vs->fullname.data, S_IFSOCK | (vs->perm & 0777),
-                0, vs->fidp->uid, -1);
+    } else if (perm & P9_STAT_MODE_SOCKET) {
+        err = v9fs_co_mknod(pdu->s, &fullname, fidp->uid, -1,
+                            0, S_IFSOCK | (perm & 0777));
         if (err < 0) {
-            err = -errno;
             goto out;
         }
     } else {
-        err = v9fs_co_open2(s, vs->fidp, vs->fullname.data, -1,
-                            omode_to_uflags(vs->mode)|O_CREAT, vs->perm);
+        err = v9fs_co_open2(pdu->s, fidp, fullname.data, -1,
+                            omode_to_uflags(mode)|O_CREAT, perm);
         if (err < 0) {
-            err = -errno;
             goto out;
         }
-        vs->fidp->fid_type = P9_FID_FILE;
+        fidp->fid_type = P9_FID_FILE;
     }
-    err = v9fs_do_lstat(s, &vs->fullname, &vs->stbuf);
+    err = v9fs_co_lstat(pdu->s, &fullname, &stbuf);
     if (err < 0) {
-        err = -errno;
-        vs->fidp->fid_type = P9_FID_NONE;
-        if (vs->fidp->fs.fd) {
-            close(vs->fidp->fs.fd);
+        fidp->fid_type = P9_FID_NONE;
+        if (fidp->fs.fd) {
+            close(fidp->fs.fd);
         }
         goto out;
     }
-    vs->iounit = get_iounit(s, &vs->fidp->path);
-    v9fs_string_copy(&vs->fidp->path, &vs->fullname);
-    stat_to_qid(&vs->stbuf, &vs->qid);
-    vs->offset += pdu_marshal(vs->pdu, vs->offset, "Qd", &vs->qid, vs->iounit);
-    err = vs->offset;
+    iounit = get_iounit(pdu->s, &fidp->path);
+    v9fs_string_copy(&fidp->path, &fullname);
+    stat_to_qid(&stbuf, &qid);
+    offset += pdu_marshal(pdu, offset, "Qd", &qid, iounit);
+    err = offset;
 
 out:
-   complete_pdu(s, vs->pdu, err);
-   v9fs_string_free(&vs->name);
-   v9fs_string_free(&vs->extension);
-   v9fs_string_free(&vs->fullname);
-   qemu_free(vs);
+   complete_pdu(pdu->s, pdu, err);
+   v9fs_string_free(&name);
+   v9fs_string_free(&extension);
+   v9fs_string_free(&fullname);
 }
 
 static void v9fs_post_symlink(V9fsState *s, V9fsSymlinkState *vs, int err)
diff --git a/hw/9pfs/virtio-9p.h b/hw/9pfs/virtio-9p.h
index 3b585f0..e7d87d9 100644
--- a/hw/9pfs/virtio-9p.h
+++ b/hw/9pfs/virtio-9p.h
@@ -222,20 +222,6 @@ typedef struct V9fsState
     int32_t msize;
 } V9fsState;
 
-typedef struct V9fsCreateState {
-    V9fsPDU *pdu;
-    size_t offset;
-    V9fsFidState *fidp;
-    V9fsQID qid;
-    int32_t perm;
-    int8_t mode;
-    struct stat stbuf;
-    V9fsString name;
-    V9fsString extension;
-    V9fsString fullname;
-    int iounit;
-} V9fsCreateState;
-
 typedef struct V9fsStatState {
     V9fsPDU *pdu;
     size_t offset;
-- 
1.7.1

  parent reply	other threads:[~2011-05-25 23:53 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-25 23:52 [Qemu-devel] [0/29] Second batch of VirtFS routines converted to coroutines Venkateswararao Jujjuri (JV)
2011-05-25 23:52 ` [Qemu-devel] [PATCH 01/29] hw/9pfs: Add yeild support to rename coroutine Venkateswararao Jujjuri (JV)
2011-05-25 23:52 ` [Qemu-devel] [PATCH 02/29] hw/9pfs: Update vfs_rename to use coroutines Venkateswararao Jujjuri (JV)
2011-05-25 23:52 ` [Qemu-devel] [PATCH 03/29] hw/9pfs: Add yeild support for fstat coroutine Venkateswararao Jujjuri (JV)
2011-05-25 23:52 ` [Qemu-devel] [PATCH 04/29] hw/9pfs: Update v9fs_lock to use coroutines Venkateswararao Jujjuri (JV)
2011-05-25 23:52 ` [Qemu-devel] [PATCH 05/29] hw/9pfs: Update v9fs_getlock " Venkateswararao Jujjuri (JV)
2011-05-25 23:52 ` [Qemu-devel] [PATCH 06/29] hw/9pfs: Add yield support for open and opendir coroutine Venkateswararao Jujjuri (JV)
2011-05-25 23:52 ` [Qemu-devel] [PATCH 07/29] hw/9pfs: Update v9fs_open to use coroutines Venkateswararao Jujjuri (JV)
2011-05-25 23:52 ` [Qemu-devel] [PATCH 08/29] [virtio-9p] Remove post functions for v9fs_lcreate Venkateswararao Jujjuri (JV)
2011-05-25 23:52 ` [Qemu-devel] [PATCH 09/29] [virtio-9p] clean up v9fs_lcreate Venkateswararao Jujjuri (JV)
2011-05-25 23:52 ` [Qemu-devel] [PATCH 10/29] [PATCH] [virtio-9p] coroutine and threading for open2 Venkateswararao Jujjuri (JV)
2011-05-25 23:52 ` [Qemu-devel] [PATCH 11/29] hw/9pfs: Update v9fs_stat to use coroutines Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 12/29] hw/9pfs: Update v9fs_walk " Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 13/29] hw/9pfs: Add yeild support for clunk related coroutine Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 14/29] hw/9pfs: Update v9fs_clunk to use coroutines Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 15/29] hw/9pfs: Add yield support for fsync coroutine Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 16/29] hw/9pfs: Update v9fs_fsync to use coroutines Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 17/29] [virtio-9p] Remove post functions for v9fs_create Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` Venkateswararao Jujjuri (JV) [this message]
2011-05-25 23:53 ` [Qemu-devel] [PATCH 19/29] [virtio-9p] Remove post functions for v9fs_symlink Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 20/29] [virtio-9p] clean up v9fs_symlink Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 21/29] [virtio-9p] coroutine and threading for v9fs_do_symlink Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 22/29] [virtio-9p] coroutine and threading for v9fs_do_link Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 23/29] hw/9pfs: Add yield support for pwritev coroutine Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 24/29] hw/9pfs: Update v9fs_write to use coroutines Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 25/29] hw/9pfs: Update v9fs_wstat " Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 26/29] hw/9pfs: Update v9fs_attach " Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 27/29] hw/9pfs: Add yield support for preadv coroutine Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 28/29] hw/9pfs: Update v9fs_read to use coroutines Venkateswararao Jujjuri (JV)
2011-05-25 23:53 ` [Qemu-devel] [PATCH 29/29] use readdir_r instead of readdir for reentrancy Venkateswararao Jujjuri (JV)

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=1306367597-797-19-git-send-email-jvrao@linux.vnet.ibm.com \
    --to=jvrao@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@linux.vnet.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.