From patchwork Fri Jan 11 11:07:51 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: 1023510 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 43bg8K2pG7z9sBQ; Fri, 11 Jan 2019 22:08:17 +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 1ghufb-00070w-KX; Fri, 11 Jan 2019 11:08:11 +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 1ghufa-00070A-97 for kernel-team@lists.ubuntu.com; Fri, 11 Jan 2019 11:08:10 +0000 Received: from mail-qt1-f197.google.com ([209.85.160.197]) by youngberry.canonical.com with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1ghufZ-0004sk-VG for kernel-team@lists.ubuntu.com; Fri, 11 Jan 2019 11:08:10 +0000 Received: by mail-qt1-f197.google.com with SMTP id w15so16259753qtk.19 for ; Fri, 11 Jan 2019 03:08:09 -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=7wwCEqYHa/evdG4KcVcRMc4pj1F9piwVSEuvAVrLESo=; b=XK9cwUJRFBx+XgmxAymdXiovvdsuuug1ozlDoulToJUe+fCmRO0VdJ2LVFQPszjmiP OufrxMbzL3gQToHDEshGyVMm/HnAmci80qOwt0O/gP1QzkhIf/jjCrq9cnW0K3K6HCI8 h7ZPAjQASJ73fH/Q9X/r0WufrOwT4h8DyppowSpWj+857nivBeoGy4T5/czNFfTs6fyN q4HD3I2XcbnmoiHJOEmzBC3YrtlQsnoSstpi3YkpYyfZNgewBhzoNWdAiQYgmmw8ZkS9 tqKbyVS4KbRJkVA0hkciOdQ1rwqPvKUz46LQ5bN8cGlYKMWJ1GtlDpDkeIv3wCwnY5Ji 33mQ== X-Gm-Message-State: AJcUukd//Xu/URIowdTMI2dRQwY4NZMQiAqUQ+TEWqHBnsuTP+G49j2q 4fCmSrKVZ8JR1wNyt/rP/Bdw2fetx+chDe7C1HIjzqwCzuyijLgI94PvDv/s46eYnZ3JsZJQ7MF MfUpZcW+BKzxYT5erxjPD+GX+6xSSoNoBEe+uvgc9Ug== X-Received: by 2002:a0c:ad16:: with SMTP id u22mr13651440qvc.240.1547204888744; Fri, 11 Jan 2019 03:08:08 -0800 (PST) X-Google-Smtp-Source: ALg8bN7v2nlTycRjOwfwHHzFJ9kOhvgeqllr92U6iMG1q3dIpQDG9NTM/Vw198j11FL7incFQ6l/+Q== X-Received: by 2002:a0c:ad16:: with SMTP id u22mr13651430qvc.240.1547204888581; Fri, 11 Jan 2019 03:08:08 -0800 (PST) Received: from localhost.localdomain ([177.181.227.3]) by smtp.gmail.com with ESMTPSA id o65sm39280460qkl.11.2019.01.11.03.08.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 11 Jan 2019 03:08:08 -0800 (PST) From: Mauricio Faria de Oliveira To: kernel-team@lists.ubuntu.com Subject: [SRU B][PATCH v2 1/7] blk-wbt: pass in enum wbt_flags to get_rq_wait() Date: Fri, 11 Jan 2019 09:07:51 -0200 Message-Id: <20190111110757.17936-2-mfo@canonical.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190111110757.17936-1-mfo@canonical.com> References: <20190111110757.17936-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 This is in preparation for having more write queues, in which case we would have needed to pass in more information than just a simple 'is_kswapd' boolean. Reviewed-by: Darrick J. Wong Reviewed-by: Omar Sandoval Signed-off-by: Jens Axboe (cherry-picked from commit 8bea60901974ad44b06b08d52e1dd421ea8c6e9c) Signed-off-by: Mauricio Faria de Oliveira --- block/blk-wbt.c | 25 +++++++++++++++---------- block/blk-wbt.h | 4 +++- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/block/blk-wbt.c b/block/blk-wbt.c index f92fc84b5e2c..4afa0ebb5953 100644 --- a/block/blk-wbt.c +++ b/block/blk-wbt.c @@ -101,9 +101,13 @@ static bool wb_recent_wait(struct rq_wb *rwb) return time_before(jiffies, wb->dirty_sleep + HZ); } -static inline struct rq_wait *get_rq_wait(struct rq_wb *rwb, bool is_kswapd) +static inline struct rq_wait *get_rq_wait(struct rq_wb *rwb, + enum wbt_flags wb_acct) { - return &rwb->rq_wait[is_kswapd]; + if (wb_acct & WBT_KSWAPD) + return &rwb->rq_wait[WBT_RWQ_KSWAPD]; + + return &rwb->rq_wait[WBT_RWQ_BG]; } static void rwb_wake_all(struct rq_wb *rwb) @@ -126,7 +130,7 @@ void __wbt_done(struct rq_wb *rwb, enum wbt_flags wb_acct) if (!(wb_acct & WBT_TRACKED)) return; - rqw = get_rq_wait(rwb, wb_acct & WBT_KSWAPD); + rqw = get_rq_wait(rwb, wb_acct); inflight = atomic_dec_return(&rqw->inflight); /* @@ -529,11 +533,12 @@ static inline bool may_queue(struct rq_wb *rwb, struct rq_wait *rqw, * Block if we will exceed our limit, or if we are currently waiting for * the timer to kick off queuing again. */ -static void __wbt_wait(struct rq_wb *rwb, unsigned long rw, spinlock_t *lock) +static void __wbt_wait(struct rq_wb *rwb, enum wbt_flags wb_acct, + unsigned long rw, spinlock_t *lock) __releases(lock) __acquires(lock) { - struct rq_wait *rqw = get_rq_wait(rwb, current_is_kswapd()); + struct rq_wait *rqw = get_rq_wait(rwb, wb_acct); DEFINE_WAIT(wait); if (may_queue(rwb, rqw, &wait, rw)) @@ -584,7 +589,7 @@ static inline bool wbt_should_throttle(struct rq_wb *rwb, struct bio *bio) */ enum wbt_flags wbt_wait(struct rq_wb *rwb, struct bio *bio, spinlock_t *lock) { - unsigned int ret = 0; + enum wbt_flags ret = 0; if (!rwb_enabled(rwb)) return 0; @@ -598,14 +603,14 @@ enum wbt_flags wbt_wait(struct rq_wb *rwb, struct bio *bio, spinlock_t *lock) return ret; } - __wbt_wait(rwb, bio->bi_opf, lock); + if (current_is_kswapd()) + ret |= WBT_KSWAPD; + + __wbt_wait(rwb, ret, bio->bi_opf, lock); if (!blk_stat_is_active(rwb->cb)) rwb_arm_timer(rwb); - if (current_is_kswapd()) - ret |= WBT_KSWAPD; - return ret | WBT_TRACKED; } diff --git a/block/blk-wbt.h b/block/blk-wbt.h index a232c98fbf4d..8038b4a0d4ef 100644 --- a/block/blk-wbt.h +++ b/block/blk-wbt.h @@ -19,7 +19,9 @@ enum wbt_flags { }; enum { - WBT_NUM_RWQ = 2, + WBT_RWQ_BG = 0, + WBT_RWQ_KSWAPD, + WBT_NUM_RWQ, }; /*