aboutsummaryrefslogtreecommitdiff
path: root/hw/9pfs
diff options
context:
space:
mode:
authorAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>2011-05-07 21:25:51 +0530
committerAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>2011-08-22 09:44:21 +0530
commit4e9ad444982576f8434929b8e23c9fefb625c9e4 (patch)
tree5af10782561eeec4bdb932dede102acb13ae149b /hw/9pfs
parent4743d1f5d31c76ff60223dcf05f5358dc4605015 (diff)
hw/9pfs: Update v9fs_fsync to use coroutines
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Diffstat (limited to 'hw/9pfs')
-rw-r--r--hw/9pfs/virtio-9p.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/hw/9pfs/virtio-9p.c b/hw/9pfs/virtio-9p.c
index c113294fcb..fc1f513def 100644
--- a/hw/9pfs/virtio-9p.c
+++ b/hw/9pfs/virtio-9p.c
@@ -1530,33 +1530,28 @@ out:
v9fs_string_free(&fullname);
}
-static void v9fs_post_do_fsync(V9fsState *s, V9fsPDU *pdu, int err)
-{
- if (err == -1) {
- err = -errno;
- }
- complete_pdu(s, pdu, err);
-}
-
static void v9fs_fsync(void *opaque)
{
- V9fsPDU *pdu = opaque;
- V9fsState *s = pdu->s;
+ int err;
int32_t fid;
+ int datasync;
size_t offset = 7;
V9fsFidState *fidp;
- int datasync;
- int err;
+ V9fsPDU *pdu = opaque;
+ V9fsState *s = pdu->s;
pdu_unmarshal(pdu, offset, "dd", &fid, &datasync);
fidp = lookup_fid(s, fid);
if (fidp == NULL) {
err = -ENOENT;
- v9fs_post_do_fsync(s, pdu, err);
- return;
+ goto out;
}
- err = v9fs_do_fsync(s, fidp->fs.fd, datasync);
- v9fs_post_do_fsync(s, pdu, err);
+ err = v9fs_co_fsync(s, fidp, datasync);
+ if (!err) {
+ err = offset;
+ }
+out:
+ complete_pdu(s, pdu, err);
}
static void v9fs_clunk(void *opaque)