summaryrefslogtreecommitdiff
path: root/hw/9pfs/virtio-9p.c
diff options
context:
space:
mode:
authorVenkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>2011-08-08 23:50:20 +0530
committerAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>2011-08-08 23:50:27 +0530
commitae1ef571fc4ce5cc016311a030357c6a8d851dfe (patch)
treed1a5c3600074f8823eaeeb39e4f0a4da30c7f5c6 /hw/9pfs/virtio-9p.c
parentb4b1537b96fc57b50a676006868ab97093d040c8 (diff)
downloadqemu-ae1ef571fc4ce5cc016311a030357c6a8d851dfe.tar.gz
hw/9pfs: Update v9fs_remove to use coroutines
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Diffstat (limited to 'hw/9pfs/virtio-9p.c')
-rw-r--r--hw/9pfs/virtio-9p.c50
1 files changed, 13 insertions, 37 deletions
diff --git a/hw/9pfs/virtio-9p.c b/hw/9pfs/virtio-9p.c
index 37ba72cc8f..86d4dec157 100644
--- a/hw/9pfs/virtio-9p.c
+++ b/hw/9pfs/virtio-9p.c
@@ -211,11 +211,6 @@ static int v9fs_do_utimensat(V9fsState *s, V9fsString *path,
return s->ops->utimensat(&s->ctx, path->data, times);
}
-static int v9fs_do_remove(V9fsState *s, V9fsString *path)
-{
- return s->ops->remove(&s->ctx, path->data);
-}
-
static int v9fs_do_fsync(V9fsState *s, int fd, int datasync)
{
return s->ops->fsync(&s->ctx, fd, datasync);
@@ -2579,49 +2574,30 @@ out:
complete_pdu(s, pdu, err);
}
-static void v9fs_remove_post_remove(V9fsState *s, V9fsRemoveState *vs,
- int err)
-{
- if (err < 0) {
- err = -errno;
- } else {
- err = vs->offset;
- }
-
- /* For TREMOVE we need to clunk the fid even on failed remove */
- free_fid(s, vs->fidp->fid);
-
- complete_pdu(s, vs->pdu, err);
- qemu_free(vs);
-}
-
static void v9fs_remove(void *opaque)
{
- V9fsPDU *pdu = opaque;
- V9fsState *s = pdu->s;
int32_t fid;
- V9fsRemoveState *vs;
int err = 0;
+ size_t offset = 7;
+ V9fsFidState *fidp;
+ V9fsPDU *pdu = opaque;
- vs = qemu_malloc(sizeof(*vs));
- vs->pdu = pdu;
- vs->offset = 7;
-
- pdu_unmarshal(vs->pdu, vs->offset, "d", &fid);
+ pdu_unmarshal(pdu, offset, "d", &fid);
- vs->fidp = lookup_fid(s, fid);
- if (vs->fidp == NULL) {
+ fidp = lookup_fid(pdu->s, fid);
+ if (fidp == NULL) {
err = -EINVAL;
goto out;
}
+ err = v9fs_co_remove(pdu->s, &fidp->path);
+ if (!err) {
+ err = offset;
+ }
- err = v9fs_do_remove(s, &vs->fidp->path);
- v9fs_remove_post_remove(s, vs, err);
- return;
-
+ /* For TREMOVE we need to clunk the fid even on failed remove */
+ free_fid(pdu->s, fidp->fid);
out:
- complete_pdu(s, pdu, err);
- qemu_free(vs);
+ complete_pdu(pdu->s, pdu, err);
}
static void v9fs_wstat_post_truncate(V9fsState *s, V9fsWstatState *vs, int err)