mirror of https://github.com/xemu-project/xemu.git
sheepdog: remove unused cancellation support
SheepdogAIOCB is internal to sheepdog.c, hence it is never canceled. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Message-id: 20161129113245.32724-2-pbonzini@redhat.com Signed-off-by: Jeff Cody <jcody@redhat.com>
This commit is contained in:
parent
a0def59428
commit
a71264f9f5
|
@ -347,7 +347,6 @@ struct SheepdogAIOCB {
|
||||||
Coroutine *coroutine;
|
Coroutine *coroutine;
|
||||||
void (*aio_done_func)(SheepdogAIOCB *);
|
void (*aio_done_func)(SheepdogAIOCB *);
|
||||||
|
|
||||||
bool cancelable;
|
|
||||||
int nr_pending;
|
int nr_pending;
|
||||||
|
|
||||||
uint32_t min_affect_data_idx;
|
uint32_t min_affect_data_idx;
|
||||||
|
@ -486,7 +485,6 @@ static inline void free_aio_req(BDRVSheepdogState *s, AIOReq *aio_req)
|
||||||
{
|
{
|
||||||
SheepdogAIOCB *acb = aio_req->aiocb;
|
SheepdogAIOCB *acb = aio_req->aiocb;
|
||||||
|
|
||||||
acb->cancelable = false;
|
|
||||||
QLIST_REMOVE(aio_req, aio_siblings);
|
QLIST_REMOVE(aio_req, aio_siblings);
|
||||||
g_free(aio_req);
|
g_free(aio_req);
|
||||||
|
|
||||||
|
@ -499,57 +497,8 @@ static void coroutine_fn sd_finish_aiocb(SheepdogAIOCB *acb)
|
||||||
qemu_aio_unref(acb);
|
qemu_aio_unref(acb);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Check whether the specified acb can be canceled
|
|
||||||
*
|
|
||||||
* We can cancel aio when any request belonging to the acb is:
|
|
||||||
* - Not processed by the sheepdog server.
|
|
||||||
* - Not linked to the inflight queue.
|
|
||||||
*/
|
|
||||||
static bool sd_acb_cancelable(const SheepdogAIOCB *acb)
|
|
||||||
{
|
|
||||||
BDRVSheepdogState *s = acb->common.bs->opaque;
|
|
||||||
AIOReq *aioreq;
|
|
||||||
|
|
||||||
if (!acb->cancelable) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
QLIST_FOREACH(aioreq, &s->inflight_aio_head, aio_siblings) {
|
|
||||||
if (aioreq->aiocb == acb) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sd_aio_cancel(BlockAIOCB *blockacb)
|
|
||||||
{
|
|
||||||
SheepdogAIOCB *acb = (SheepdogAIOCB *)blockacb;
|
|
||||||
BDRVSheepdogState *s = acb->common.bs->opaque;
|
|
||||||
AIOReq *aioreq, *next;
|
|
||||||
|
|
||||||
if (sd_acb_cancelable(acb)) {
|
|
||||||
/* Remove outstanding requests from failed queue. */
|
|
||||||
QLIST_FOREACH_SAFE(aioreq, &s->failed_aio_head, aio_siblings,
|
|
||||||
next) {
|
|
||||||
if (aioreq->aiocb == acb) {
|
|
||||||
free_aio_req(s, aioreq);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(acb->nr_pending == 0);
|
|
||||||
if (acb->common.cb) {
|
|
||||||
acb->common.cb(acb->common.opaque, -ECANCELED);
|
|
||||||
}
|
|
||||||
sd_finish_aiocb(acb);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static const AIOCBInfo sd_aiocb_info = {
|
static const AIOCBInfo sd_aiocb_info = {
|
||||||
.aiocb_size = sizeof(SheepdogAIOCB),
|
.aiocb_size = sizeof(SheepdogAIOCB),
|
||||||
.cancel_async = sd_aio_cancel,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static SheepdogAIOCB *sd_aio_setup(BlockDriverState *bs, QEMUIOVector *qiov,
|
static SheepdogAIOCB *sd_aio_setup(BlockDriverState *bs, QEMUIOVector *qiov,
|
||||||
|
@ -569,7 +518,6 @@ static SheepdogAIOCB *sd_aio_setup(BlockDriverState *bs, QEMUIOVector *qiov,
|
||||||
acb->nb_sectors = nb_sectors;
|
acb->nb_sectors = nb_sectors;
|
||||||
|
|
||||||
acb->aio_done_func = NULL;
|
acb->aio_done_func = NULL;
|
||||||
acb->cancelable = true;
|
|
||||||
acb->coroutine = qemu_coroutine_self();
|
acb->coroutine = qemu_coroutine_self();
|
||||||
acb->ret = 0;
|
acb->ret = 0;
|
||||||
acb->nr_pending = 0;
|
acb->nr_pending = 0;
|
||||||
|
|
Loading…
Reference in New Issue