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>
This commit is contained in:
Venkateswararao Jujjuri 2011-08-08 23:50:20 +05:30 committed by Aneesh Kumar K.V
parent b4b1537b96
commit ae1ef571fc
2 changed files with 13 additions and 43 deletions

View file

@ -211,11 +211,6 @@ static int v9fs_do_utimensat(V9fsState *s, V9fsString *path,
return s->ops->utimensat(&s->ctx, path->data, times); 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) static int v9fs_do_fsync(V9fsState *s, int fd, int datasync)
{ {
return s->ops->fsync(&s->ctx, fd, datasync); return s->ops->fsync(&s->ctx, fd, datasync);
@ -2579,49 +2574,30 @@ out:
complete_pdu(s, pdu, err); 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) static void v9fs_remove(void *opaque)
{ {
V9fsPDU *pdu = opaque;
V9fsState *s = pdu->s;
int32_t fid; int32_t fid;
V9fsRemoveState *vs;
int err = 0; int err = 0;
size_t offset = 7;
V9fsFidState *fidp;
V9fsPDU *pdu = opaque;
vs = qemu_malloc(sizeof(*vs)); pdu_unmarshal(pdu, offset, "d", &fid);
vs->pdu = pdu;
vs->offset = 7;
pdu_unmarshal(vs->pdu, vs->offset, "d", &fid); fidp = lookup_fid(pdu->s, fid);
if (fidp == NULL) {
vs->fidp = lookup_fid(s, fid);
if (vs->fidp == NULL) {
err = -EINVAL; err = -EINVAL;
goto out; goto out;
} }
err = v9fs_co_remove(pdu->s, &fidp->path);
if (!err) {
err = offset;
}
err = v9fs_do_remove(s, &vs->fidp->path); /* For TREMOVE we need to clunk the fid even on failed remove */
v9fs_remove_post_remove(s, vs, err); free_fid(pdu->s, fidp->fid);
return;
out: out:
complete_pdu(s, pdu, err); complete_pdu(pdu->s, pdu, err);
qemu_free(vs);
} }
static void v9fs_wstat_post_truncate(V9fsState *s, V9fsWstatState *vs, int err) static void v9fs_wstat_post_truncate(V9fsState *s, V9fsWstatState *vs, int err)

View file

@ -333,12 +333,6 @@ typedef struct V9fsWriteState {
int cnt; int cnt;
} V9fsWriteState; } V9fsWriteState;
typedef struct V9fsRemoveState {
V9fsPDU *pdu;
size_t offset;
V9fsFidState *fidp;
} V9fsRemoveState;
typedef struct V9fsWstatState typedef struct V9fsWstatState
{ {
V9fsPDU *pdu; V9fsPDU *pdu;