Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753897AbbGUKue (ORCPT ); Tue, 21 Jul 2015 06:50:34 -0400 Received: from aserp1040.oracle.com ([141.146.126.69]:40141 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752507AbbGUKud (ORCPT ); Tue, 21 Jul 2015 06:50:33 -0400 Message-ID: <55AE23EE.9060606@oracle.com> Date: Tue, 21 Jul 2015 18:50:22 +0800 From: Bob Liu User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130308 Thunderbird/17.0.4 MIME-Version: 1.0 To: =?windows-1252?Q?Roger_Pau_Monn=E9?= CC: xen-devel@lists.xenproject.org, david.vrabel@citrix.com, linux-kernel@vger.kernel.org, konrad.wilk@oracle.com Subject: Re: [PATCH 3/3] xen-blkback: rm BUG_ON() in purge_persistent_gnt() References: <1437449441-2964-1-git-send-email-bob.liu@oracle.com> <1437449441-2964-3-git-send-email-bob.liu@oracle.com> <55AE0D1E.1070203@citrix.com> In-Reply-To: <55AE0D1E.1070203@citrix.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Source-IP: userv0022.oracle.com [156.151.31.74] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2025 Lines: 50 On 07/21/2015 05:13 PM, Roger Pau Monn? wrote: > El 21/07/15 a les 5.30, Bob Liu ha escrit: >> This BUG_ON() will be triggered when previous purge work haven't finished. >> It's reasonable under pretty extreme load and should not panic the system. >> >> Signed-off-by: Bob Liu >> --- >> drivers/block/xen-blkback/blkback.c | 4 +++- >> 1 file changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c >> index ced9677..b90ac8e 100644 >> --- a/drivers/block/xen-blkback/blkback.c >> +++ b/drivers/block/xen-blkback/blkback.c >> @@ -394,7 +394,9 @@ static void purge_persistent_gnt(struct xen_blkif *blkif) >> >> pr_debug("Going to purge %u persistent grants\n", num_clean); >> >> - BUG_ON(!list_empty(&blkif->persistent_purge_list)); >> + if (!list_empty(&blkif->persistent_purge_list)) >> + return; >> + > > I see the problem with this, there's a check for work_pending before > this BUG_ON, but it doesn't account if the work is currently running. I Exactly. > would rather prefer to replace the work_pending check with work_busy > instead, which will also take into account if the work is still running. > The comment on work_busy however makes me nervous: > > * Test whether @work is currently pending or running. There is no > * synchronization around this function and the test result is > * unreliable and only useful as advisory hints or for debugging. > > AFAICT I think it should be safe because we don't have concurrent > purge_persistent_gnt calls, but I'm no expert on Linux workqueues. It Me neither, that's why I just replace this BUG_ON() with a simple return. > also makes me wonder why we have such a half-baked function in the Linux > kernel. > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/