From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50368) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WkapP-0007xT-Gz for qemu-devel@nongnu.org; Wed, 14 May 2014 11:10:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WkapJ-0003n4-OI for qemu-devel@nongnu.org; Wed, 14 May 2014 11:10:43 -0400 Received: from lputeaux-656-01-25-125.w80-12.abo.wanadoo.fr ([80.12.84.125]:35720 helo=paradis.irqsave.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WkapJ-0003mx-IG for qemu-devel@nongnu.org; Wed, 14 May 2014 11:10:37 -0400 Date: Wed, 14 May 2014 17:11:12 +0200 From: =?iso-8859-1?Q?Beno=EEt?= Canet Message-ID: <20140514151112.GC5955@irqsave.net> References: <1400077367-23409-1-git-send-email-stefanha@redhat.com> <1400077367-23409-4-git-send-email-stefanha@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <1400077367-23409-4-git-send-email-stefanha@redhat.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 3/3] blockdev: acquire AioContext in block_set_io_throttle List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: Kevin Wolf , =?iso-8859-1?Q?Beno=EEt?= Canet , qemu-devel@nongnu.org The Wednesday 14 May 2014 =E0 16:22:47 (+0200), Stefan Hajnoczi wrote :G > The block_set_io_throttle QMP and HMP commands modify I/O throttling > limits for block devices. >=20 > Acquire the BlockDriverState's AioContext to protect against race > conditions with an IOThread that is running I/O for this device. >=20 > Cc: Beno=EEt Canet > Signed-off-by: Stefan Hajnoczi > --- > blockdev.c | 6 ++++++ > 1 file changed, 6 insertions(+) >=20 > diff --git a/blockdev.c b/blockdev.c > index 7810e9f..e0f1978 100644 > --- a/blockdev.c > +++ b/blockdev.c > @@ -1663,6 +1663,7 @@ void qmp_block_set_io_throttle(const char *device= , int64_t bps, int64_t bps_rd, > { > ThrottleConfig cfg; > BlockDriverState *bs; > + AioContext *aio_context; > =20 > bs =3D bdrv_find(device); > if (!bs) { > @@ -1706,6 +1707,9 @@ void qmp_block_set_io_throttle(const char *device= , int64_t bps, int64_t bps_rd, > return; > } > =20 > + aio_context =3D bdrv_get_aio_context(bs); > + aio_context_acquire(aio_context); > + > if (!bs->io_limits_enabled && throttle_enabled(&cfg)) { > bdrv_io_limits_enable(bs); > } else if (bs->io_limits_enabled && !throttle_enabled(&cfg)) { > @@ -1715,6 +1719,8 @@ void qmp_block_set_io_throttle(const char *device= , int64_t bps, int64_t bps_rd, > if (bs->io_limits_enabled) { > bdrv_set_io_limits(bs, &cfg); > } > + > + aio_context_release(aio_context); > } > =20 > int do_drive_del(Monitor *mon, const QDict *qdict, QObject **ret_data) > --=20 > 1.9.0 >=20 Reviewed-by: Benoit Canet