From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:51977) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TaSf1-0006BE-KY for qemu-devel@nongnu.org; Mon, 19 Nov 2012 09:49:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TaSeR-0000K9-EY for qemu-devel@nongnu.org; Mon, 19 Nov 2012 09:49:19 -0500 Received: from mail.profihost.ag ([85.158.179.208]:35229) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TaSeR-0000Iy-1e for qemu-devel@nongnu.org; Mon, 19 Nov 2012 09:48:43 -0500 Message-ID: <50AA46C7.2070104@profihost.ag> Date: Mon, 19 Nov 2012 15:48:39 +0100 From: Stefan Priebe - Profihost AG MIME-Version: 1.0 References: <589082222.7272963.1352241778123.JavaMail.root@redhat.com> <50A95A6A.4010109@profihost.ag> <50A9E991.2070609@redhat.com> <50A9FD86.3050400@profihost.ag> <50AA01C0.8030709@redhat.com> <50AA0314.6090208@profihost.ag> <50AA04A7.4080200@redhat.com> <50AA065F.5010602@profihost.ag> <50AA089B.7010400@redhat.com> <50AA0A2E.2090506@profihost.ag> <50AA0B90.6060702@redhat.com> <50AA1085.6000106@profihost.ag> <50AA151A.7030008@redhat.com> <50AA1CE7.7090100@profihost.ag> <50AA24E7.7010009@redhat.com> <50AA2DB0.6010107@profihost.ag> <50AA2EDF.6070409@redhat.com> <50AA420D.6070806@profihost.ag> <50AA4507.4080401@redhat.com> In-Reply-To: <50AA4507.4080401@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] scsi-hd with discard_granularity and unmap results in Aborted Commands List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: josh.durgin@inktank.com, qemu-devel@nongnu.org, sage@newdream.net Am 19.11.2012 15:41, schrieb Paolo Bonzini: > Il 19/11/2012 15:28, Stefan Priebe - Profihost AG ha scritto: >> typedef struct RADOSCB { >> @@ -376,6 +377,10 @@ static void qemu_rbd_complete_aio(RADOSCB *rcb) >> RBDAIOCB *acb = rcb->acb; >> int64_t r; >> >> + if (acb->bh) { >> + return; >> + } >> + >> r = rcb->ret; >> >> if (acb->cmd == RBD_AIO_WRITE || >> @@ -560,6 +565,20 @@ static void qemu_rbd_close(BlockDriverState *bs) >> rados_shutdown(s->cluster); >> } >> >> +static void qemu_rbd_aio_abort(void *private_data) >> +{ >> + RBDAIOCB *acb = (RBDAIOCB *) private_data; >> + >> + acb->status = -ECANCELED; >> + >> + if (acb->bh) { >> + return; >> + } >> + >> + acb->bh = qemu_bh_new(rbd_aio_bh_cb, acb); >> + qemu_bh_schedule(acb->bh); >> +} > > I think this is all unneeded. Just store rcb->ret into > rcb->acb->status, and your version of qemu_rbd_aio_cancel should just work. > > Also, I think the acb->cancelled field is not necessary anymore after > these changes. The iscsi driver still relies on canceled that's why i left it here in too. So you mean in qemu_rbd_complete_aio i should remove the check for cancelled and then just overwrite acb->status to that it changes from -EINPROGRESS to something else? And qemu_rbd_aio_cancel should just wait for status != -EINPROGRESS? Stefan