From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39543) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XKVGe-00083Q-Od for qemu-devel@nongnu.org; Thu, 21 Aug 2014 12:31:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XKVGY-0001zx-EN for qemu-devel@nongnu.org; Thu, 21 Aug 2014 12:31:16 -0400 Received: from mx1.redhat.com ([209.132.183.28]:1185) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XKVGY-0001zi-7D for qemu-devel@nongnu.org; Thu, 21 Aug 2014 12:31:10 -0400 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s7LGV8R4026484 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 21 Aug 2014 12:31:08 -0400 Date: Thu, 21 Aug 2014 17:31:06 +0100 From: Stefan Hajnoczi Message-ID: <20140821163106.GD22844@stefanha-thinkpad.redhat.com> References: <1408622216-9578-1-git-send-email-famz@redhat.com> <1408622216-9578-5-git-send-email-famz@redhat.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="fOHHtNG4YXGJ0yqR" Content-Disposition: inline In-Reply-To: <1408622216-9578-5-git-send-email-famz@redhat.com> Subject: Re: [Qemu-devel] [RFC PATCH 4/9] linux-aio: Implement .cancel_async List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng Cc: Kevin Wolf , Paolo Bonzini , qemu-devel@nongnu.org --fOHHtNG4YXGJ0yqR Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Aug 21, 2014 at 07:56:51PM +0800, Fam Zheng wrote: > @@ -110,6 +109,22 @@ static void qemu_laio_completion_cb(EventNotifier *e) > } > } > =20 > +static void laio_cancel_async(BlockDriverAIOCB *blockacb) > +{ > + struct qemu_laiocb *laiocb =3D (struct qemu_laiocb *)blockacb; > + struct io_event event; > + int ret; > + > + ret =3D io_cancel(laiocb->ctx->ctx, &laiocb->iocb, &event); > + laiocb->ret =3D -ECANCELED; > + if (!ret) { > + /* iocb is not cancelled, cb will be called by the event loop la= ter */ > + return; > + } No callback will be invoked if io_cancel(2) every cancels the request immediately. The current kernel implementation always returns -EINPROGRESS or some of other error value. But some day it might return 0 and this would leak the request! > + > + laiocb->common.cb(laiocb->common.opaque, laiocb->ret); > +} It would be cleaner to reuse laio_cancel_async() from laio_cancel() to avoid code duplication. For example, there is a useful comment in laio_cancel() explaining that io_cancel(2) doesn't cancel I/O in practice on 2.6.31 era kernels. --fOHHtNG4YXGJ0yqR Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJT9h7KAAoJEJykq7OBq3PISNgH/15hCE1rklmmNybojveNrPy4 3L6Pt4YeHY1s3Q2B73AdBM5TxNmyOSVCpqUROm6L/+rS+rVP3Luhisd6359rr5Mf taDTYRq2LwXMpxULOBjPs2gT317lstpyTQz0e4SaYMINFRMJJoMuW+xLOIallVA8 52h7NWppxi/7UlOQHQlTrZIhOhb+4J3SasWMYbjQQgAsC6JHQxavIv7/Qobw5GJz +xOXOu50CqP8BviXAf46djEn8s2pojPTX9lFTeRD9SazB9t1KXuYhXmmcYH00fef WshkMt5N1yQGVoE+CJNK3dTvkp7bUBZP/T45d4QW4FfydF/67b0A2GOJ7MCkyH8= =ulzR -----END PGP SIGNATURE----- --fOHHtNG4YXGJ0yqR--