[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] xen/blkback: Prevent missed completion when draining I/O
- To: Jan Beulich <jbeulich@xxxxxxxx>
- From: Gui-Dong Han <hanguidong02@xxxxxxxxx>
- Date: Thu, 30 Jul 2026 17:25:36 +0800
- Arc-authentication-results: i=1; mx.google.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=F3tmc6Hix679VZeoNLiFv83lH5jhtiL+H1oB5qeNyiE=; fh=Hc+ecmrD0kO/VhFp1XRGQOpctwLI7cBucsVHf49gkT8=; b=C1RkLbePEBN9LioTuMJwgkRSGoO4LaMMMTZyVJjXOfp/NVrnco8Einp1014Z2U9YZN Flnv9tRzH0FLW4OOsRj1nEd4fWHbreoLixDX5lgzQh5IqkFaQrflMeL35EG8Srbu4V6N VA0xbjJwOKQcFEZpbwVz2t5GbmYjYUFNjCz8bJS5OSnadJqU6Siu4p9xbwEt1A/XAkbx m0iIg0PDP2Ld+UeeHEcRba8V1SffCitk+XhCpHLyAsMG/UMj+J9mqRPM8RA/vA5EKLgb n0wU2h/Ad1RpnylnJSgTN2w7GVXZhVXI3Odl52QvP/mpLgsfX//bXrIW845AIClHo9dC bG3w==; darn=lists.xenproject.org
- Arc-seal: i=1; a=rsa-sha256; t=1785403547; cv=none; d=google.com; s=arc-20260327; b=gTACIrtKDLqi163KsaeRggmh2OOPKdtAoFDhmshxL4lAaNsx1I0QoKHug3EyV47/Fx GosWM/rNByVojGul0W+RFm8z+ACj1TtIstJFX+KVpBbRrs8eu5LSHk7bCrrh3oG7LuJT LgJAvZFnH8SWf+tPH3GEmQBaKQ2U+sEesnVARfeE5hoGfv2/3hBTT0IKjJ1AkCTq8bN+ MmLZBH2x8SnRzJsn+UESSjWLMXFeOCpqivJqxlNX9ATh/AsLcMR1P6TpmE9x8TfWjwd9 vjv+Iwz083+dnU0S8bkrJx3CE2DMUOO9nLo9nWogEDH50HkQ3GeWxuc+308cj4horQH5 LGhw==
- Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To:References:MIME-Version"
- Cc: axboe@xxxxxxxxx, linux-block@xxxxxxxxxxxxxxx, konrad.wilk@xxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, baijiaju1990@xxxxxxxxx, roger@xxxxxxxxxxxxxx, xen-devel@xxxxxxxxxxxxxxxxxxxx
- Delivery-date: Thu, 30 Jul 2026 09:25:59 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On Thu, Jul 30, 2026 at 4:43 PM Jan Beulich <jbeulich@xxxxxxxx> wrote:
>
> On 30.07.2026 10:40, Gui-Dong Han wrote:
> > --- a/drivers/block/xen-blkback/blkback.c
> > +++ b/drivers/block/xen-blkback/blkback.c
> > @@ -1021,6 +1021,13 @@ static void xen_blk_drain_io(struct xen_blkif_ring
> > *ring)
> > struct xen_blkif *blkif = ring->blkif;
> >
> > atomic_set(&blkif->drain, 1);
> > + /*
> > + * Publish drain before checking inflight. Otherwise,
> > + * xen_blkbk_unmap_and_respond_callback() can decrement inflight with
> > + * atomic_dec_and_test() and still see drain == 0 after this path saw
> > + * inflight > 0, missing the completion.
> > + */
> > + smp_mb();
> > do {
> > if (atomic_read(&ring->inflight) == 0)
> > break;
>
> Yet then don't we also need a barrier in
> xen_blkbk_unmap_and_respond_callback()'s
> check? Barriers almost always come in pairs, after all.
The matching barrier is already provided by atomic_dec_and_test(), which
is fully ordered. It orders the inflight decrement before the following
drain read.
Thus, an additional barrier in
xen_blkbk_unmap_and_respond_callback() would be redundant.
Thanks.
|