From patchwork Fri Jan 11 11:08:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mauricio Faria de Oliveira X-Patchwork-Id: 1023518 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43bg9C5BlCz9sLw; Fri, 11 Jan 2019 22:09:03 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1ghugL-0007ML-Tv; Fri, 11 Jan 2019 11:08:57 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.86_2) (envelope-from ) id 1ghugK-0007LR-Ae for kernel-team@lists.ubuntu.com; Fri, 11 Jan 2019 11:08:56 +0000 Received: from mail-qt1-f198.google.com ([209.85.160.198]) by youngberry.canonical.com with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1ghugK-0004wN-0J for kernel-team@lists.ubuntu.com; Fri, 11 Jan 2019 11:08:56 +0000 Received: by mail-qt1-f198.google.com with SMTP id m37so16121740qte.10 for ; Fri, 11 Jan 2019 03:08:55 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=OT07/r3+dkPLSvYGkw7jxrtfQxCfSmsrYj/XX1k1M8o=; b=fZFof9dBcP0zE0dsWzZxQYrU9jYpluUjoHBdcdfIr9NpJ9RX9Ym6OFuxsVUMU4rNeq 87/TbEHhfj5fbm67jZMmd8fAC4lOkY7cZ3LsPAprcGVAufNIybR6ujtUTCspNQbEIFoT OgtZMaJjBBKPSEgWZNFB1Pt3VXJOmFI+LOH73D8ohAB310oQvAj/DGUyy94VuEEzscqn Wwoj2sMLPAKT0SDu2XN6XpQZD7AIuHhNbqMnj8QKndSO4OVEN2lDuAS07z/vjbIBjeKa i5JHk5KBhmc1BRRDrZgNxZq3nCPT1yk4iA9cWAR1inQfEreUOD042ZCogYyFv72GQOVx S39w== X-Gm-Message-State: AJcUukfFmkUxbDBjFqSVwIu+ZRiiFMPYpk2cF+Fn80K4CWYRPgktRTwe /uS/oo6qsOTrhZAzObzhBLd2Acg4vHZJPkd76DbBI2GftVRc/fKHDGh57UhM/batlkpA3qZ7hQy Pg3BmvgLLW3WqD3shrTGgkmnO5jM8oJRU13hZnl8zwg== X-Received: by 2002:a37:a28d:: with SMTP id l135mr12831171qke.226.1547204935039; Fri, 11 Jan 2019 03:08:55 -0800 (PST) X-Google-Smtp-Source: ALg8bN4DQuGgVbIy4DeRGvubH1XWma8Pw4gL1523BidkTyfnobPENqtEhJhxpEINMExU1X0aTqWNhQ== X-Received: by 2002:a37:a28d:: with SMTP id l135mr12831159qke.226.1547204934869; Fri, 11 Jan 2019 03:08:54 -0800 (PST) Received: from localhost.localdomain ([177.181.227.3]) by smtp.gmail.com with ESMTPSA id x202sm35844345qka.67.2019.01.11.03.08.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 11 Jan 2019 03:08:54 -0800 (PST) From: Mauricio Faria de Oliveira To: kernel-team@lists.ubuntu.com Subject: [SRU C][PATCH v2 2/6] blk-wbt: move disable check into get_limit() Date: Fri, 11 Jan 2019 09:08:39 -0200 Message-Id: <20190111110843.18042-3-mfo@canonical.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190111110843.18042-1-mfo@canonical.com> References: <20190111110843.18042-1-mfo@canonical.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Jens Axboe BugLink: https://bugs.launchpad.net/bugs/1810998 Check it in one place, instead of in multiple places. Tested-by: Anchal Agarwal Signed-off-by: Jens Axboe (backported from commit ffa358dcaae1f2f00926484e712e06daa8953cb4) [mfo: backport: - blk-wbt.c: - hunk 2: s/rq_wait_inc_below(rqw/atomic_inc_below(&rqw->inflight/ - hunk 3: s/rq_wait_inc_below(rqw/atomic_inc_below(&rqw->inflight/ Signed-off-by: Mauricio Faria de Oliveira --- block/blk-wbt.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/block/blk-wbt.c b/block/blk-wbt.c index 5733d3ab8ed5..84e5cefbb3bb 100644 --- a/block/blk-wbt.c +++ b/block/blk-wbt.c @@ -508,6 +508,13 @@ static inline unsigned int get_limit(struct rq_wb *rwb, unsigned long rw) { unsigned int limit; + /* + * If we got disabled, just return UINT_MAX. This ensures that + * we'll properly inc a new IO, and dec+wakeup at the end. + */ + if (!rwb_enabled(rwb)) + return UINT_MAX; + if ((rw & REQ_OP_MASK) == REQ_OP_DISCARD) return rwb->wb_background; @@ -545,16 +552,6 @@ static void __wbt_wait(struct rq_wb *rwb, enum wbt_flags wb_acct, struct rq_wait *rqw = get_rq_wait(rwb, wb_acct); DECLARE_WAITQUEUE(wait, current); - /* - * inc it here even if disabled, since we'll dec it at completion. - * this only happens if the task was sleeping in __wbt_wait(), - * and someone turned it off at the same time. - */ - if (!rwb_enabled(rwb)) { - atomic_inc(&rqw->inflight); - return; - } - if (!waitqueue_active(&rqw->wait) && atomic_inc_below(&rqw->inflight, get_limit(rwb, rw))) return; @@ -563,11 +560,6 @@ static void __wbt_wait(struct rq_wb *rwb, enum wbt_flags wb_acct, do { set_current_state(TASK_UNINTERRUPTIBLE); - if (!rwb_enabled(rwb)) { - atomic_inc(&rqw->inflight); - break; - } - if (atomic_inc_below(&rqw->inflight, get_limit(rwb, rw))) break;