Received: by 2002:a05:6602:18e:0:0:0:0 with SMTP id m14csp1627314ioo; Sun, 22 May 2022 22:03:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzP2MbjsYBRr2bKtGZXgMSj6vSq7bwdAy1BI7Yni6amMnwaUjTiJwSVPyBZ6RNnp4I7KRBn X-Received: by 2002:a05:6402:783:b0:42a:b251:6a9d with SMTP id d3-20020a056402078300b0042ab2516a9dmr21848894edy.315.1653282225756; Sun, 22 May 2022 22:03:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653282225; cv=none; d=google.com; s=arc-20160816; b=oXFuGoX3ZBARQ2wXmhCFbaOFF3yi6rPJrYeUjiPUc/nF1aS9kzv3zEjRqOglpjNRKx z/QsqBJOGrs/GwCCwXPhJft/RV8XzVv8jbg+b3AsOz5GjeVGJPE1MLJC6u9YuOzuQHrR O5/YMrY4eYRTBwarviDpuopcN7ekVAwbF8BJJZxXOv/g6A/FQIP+eioiFfH8XIOYQhnD IoTR2CR2sfj/dCUJYIoM3LkjPFZk/mbKxgqY2cxEKw4ky9vWAE2WqR5gmFJ6Iuie04PI M+n+YO3On78HGMRphYQxv5gi03SMfRpIK1xSJ2oknunGq9zWs1/c+kj6KLfXK2QJbDAQ G1OA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:subject:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:cc:to:from:dkim-signature; bh=XFZ9qtK6EIxz7zKswynAOMRF6eMeASTio7x7BlsXzf0=; b=Er5QHWw2UmadO0GuhErMsaWiU9thmnIXVuxbciLoHwX8avKTNk4iKeT1tG5O3cgAob NKOmDHM6HY+rVfsIaOOIR8z313mn0eSImOcIceVKXWiSb//OODY3fJmG6iquI/mCG9P6 gtPCR7hN5E2FL0BDyV/jSBZTe6FxA8tZwJeXdGu3gLPeqUQUqcq/3uoDig0acSCLZONK VAcBdq0r9/an5hj1ev7b8KonIV7xvmE67/ijFR72qLSuaWK2hJW6JWN+Bz1VIooxrc5e Qqm/QZHzcbdshHunCMR3Lw4blwowGRzmyT3qVIYEmpJXoUy9m54D5YqG9eq+9GTe/yMh +CKA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@deltatee.com header.s=20200525 header.b="ktMMl/fI"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=deltatee.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ch3-20020a170906c2c300b006f39478a8cbsi12472385ejb.865.2022.05.22.22.03.18; Sun, 22 May 2022 22:03:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@deltatee.com header.s=20200525 header.b="ktMMl/fI"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=deltatee.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241074AbiESTNs (ORCPT + 99 others); Thu, 19 May 2022 15:13:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50064 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243859AbiESTNZ (ORCPT ); Thu, 19 May 2022 15:13:25 -0400 Received: from ale.deltatee.com (ale.deltatee.com [204.191.154.188]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A9622AF1CD; Thu, 19 May 2022 12:13:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=deltatee.com; s=20200525; h=Subject:MIME-Version:References:In-Reply-To: Message-Id:Date:Cc:To:From:content-disposition; bh=XFZ9qtK6EIxz7zKswynAOMRF6eMeASTio7x7BlsXzf0=; b=ktMMl/fI83AHwrpwmEFpJSQUvD qZnKgzfKCccgJbH2rJUCPGzSkpyFoe8ekA+4efdpAUkUgnwy0LFDlUlW1QL7sq54ap+lzMuctOFfr 1GVcM1ZOK45WQFdPC4m5V/utPR7hUrKs9N9jowpwHzKj41hCnuT+iiyX1LCUo1tpokQsYvR2rxMsk n2g3HApQRi0rr9gk3HCaMsC7phMYrCMX6vJI0FPs6FUUgZFIdUyMoPih7uITyUwUxfPg7Fe+8ln3Z GaWbKQS/QUJG4fMuVFLpGciGVDHi8FV7vt+wZzvR0gzFSo+7LOnJVbP/XyBq4KXW1kE42leknWd7I HZQs2UVQ==; Received: from cgy1-donard.priv.deltatee.com ([172.16.1.31]) by ale.deltatee.com with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1nrlaJ-002TqR-WF; Thu, 19 May 2022 13:13:21 -0600 Received: from gunthorp by cgy1-donard.priv.deltatee.com with local (Exim 4.94.2) (envelope-from ) id 1nrlaE-0004TR-3I; Thu, 19 May 2022 13:13:14 -0600 From: Logan Gunthorpe To: linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, Song Liu Cc: Christoph Hellwig , Guoqing Jiang , Xiao Ni , Stephen Bates , Martin Oliveira , David Sloan , Logan Gunthorpe Date: Thu, 19 May 2022 13:13:02 -0600 Message-Id: <20220519191311.17119-7-logang@deltatee.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220519191311.17119-1-logang@deltatee.com> References: <20220519191311.17119-1-logang@deltatee.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 172.16.1.31 X-SA-Exim-Rcpt-To: linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, song@kernel.org, hch@infradead.org, guoqing.jiang@linux.dev, xni@redhat.com, sbates@raithlin.com, Martin.Oliveira@eideticom.com, David.Sloan@eideticom.com, logang@deltatee.com X-SA-Exim-Mail-From: gunthorp@deltatee.com X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 Subject: [PATCH v1 06/15] md/raid5-cache: Refactor remaining functions to take a r5conf X-SA-Exim-Version: 4.2.1 (built Sat, 13 Feb 2021 17:57:42 +0000) X-SA-Exim-Scanned: Yes (on ale.deltatee.com) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Many of the interface functions dereference conf->log in inline helpers in raid5-log.h. Refactor all off these to dereference conf->log inside the function instead. This will help to fix the rcu locking when accessing conf->log. No functional changes intended. Signed-off-by: Logan Gunthorpe --- drivers/md/raid5-cache.c | 18 +++++++++++------- drivers/md/raid5-log.h | 20 ++++++++++---------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c index 735666f9d793..cddc2c37d2c5 100644 --- a/drivers/md/raid5-cache.c +++ b/drivers/md/raid5-cache.c @@ -1004,9 +1004,9 @@ static inline void r5l_add_no_space_stripe(struct r5l_log *log, * running in raid5d, where reclaim could wait for raid5d too (when it flushes * data from log to raid disks), so we shouldn't wait for reclaim here */ -int r5l_write_stripe(struct r5l_log *log, struct stripe_head *sh) +int r5l_write_stripe(struct r5conf *conf, struct stripe_head *sh) { - struct r5conf *conf = sh->raid_conf; + struct r5l_log *log = conf->log; int write_disks = 0; int data_pages, parity_pages; int reserve; @@ -1102,8 +1102,9 @@ int r5l_write_stripe(struct r5l_log *log, struct stripe_head *sh) return 0; } -void r5l_write_stripe_run(struct r5l_log *log) +void r5l_write_stripe_run(struct r5conf *conf) { + struct r5l_log *log = conf->log; if (!log) return; mutex_lock(&log->io_mutex); @@ -1111,8 +1112,10 @@ void r5l_write_stripe_run(struct r5l_log *log) mutex_unlock(&log->io_mutex); } -int r5l_handle_flush_request(struct r5l_log *log, struct bio *bio) +int r5l_handle_flush_request(struct r5conf *conf, struct bio *bio) { + struct r5l_log *log = conf->log; + if (log->r5c_journal_mode == R5C_JOURNAL_MODE_WRITE_THROUGH) { /* * in write through (journal only) @@ -1580,8 +1583,9 @@ void r5l_wake_reclaim(struct r5conf *conf, sector_t space) __r5l_wake_reclaim(conf->log, space); } -void r5l_quiesce(struct r5l_log *log, int quiesce) +void r5l_quiesce(struct r5conf *conf, int quiesce) { + struct r5l_log *log = conf->log; struct mddev *mddev; if (quiesce) { @@ -2890,9 +2894,9 @@ void r5c_finish_stripe_write_out(struct r5conf *conf, set_bit(STRIPE_HANDLE, &sh->state); } -int r5c_cache_data(struct r5l_log *log, struct stripe_head *sh) +int r5c_cache_data(struct r5conf *conf, struct stripe_head *sh) { - struct r5conf *conf = sh->raid_conf; + struct r5l_log *log = conf->log; int pages = 0; int reserve; int i; diff --git a/drivers/md/raid5-log.h b/drivers/md/raid5-log.h index 3dd59dd4257f..ccfbf8814753 100644 --- a/drivers/md/raid5-log.h +++ b/drivers/md/raid5-log.h @@ -4,12 +4,12 @@ int r5l_init_log(struct r5conf *conf, struct md_rdev *rdev); void r5l_exit_log(struct r5conf *conf); -int r5l_write_stripe(struct r5l_log *log, struct stripe_head *head_sh); -void r5l_write_stripe_run(struct r5l_log *log); +int r5l_write_stripe(struct r5conf *conf, struct stripe_head *head_sh); +void r5l_write_stripe_run(struct r5conf *conf); void r5l_flush_stripe_to_raid(struct r5conf *conf); void r5l_stripe_write_finished(struct stripe_head *sh); -int r5l_handle_flush_request(struct r5l_log *log, struct bio *bio); -void r5l_quiesce(struct r5l_log *log, int quiesce); +int r5l_handle_flush_request(struct r5conf *conf, struct bio *bio); +void r5l_quiesce(struct r5conf *conf, int quiesce); bool r5l_log_disk_error(struct r5conf *conf); bool r5c_is_writeback(struct r5conf *conf); int r5c_try_caching_write(struct r5conf *conf, struct stripe_head *sh, @@ -21,7 +21,7 @@ void r5c_use_extra_page(struct stripe_head *sh); void r5l_wake_reclaim(struct r5conf *conf, sector_t space); void r5c_handle_cached_data_endio(struct r5conf *conf, struct stripe_head *sh, int disks); -int r5c_cache_data(struct r5l_log *log, struct stripe_head *sh); +int r5c_cache_data(struct r5conf *conf, struct stripe_head *sh); void r5c_make_stripe_write_out(struct stripe_head *sh); void r5c_flush_cache(struct r5conf *conf, int num); void r5c_check_stripe_cache_usage(struct r5conf *conf); @@ -63,10 +63,10 @@ static inline int log_stripe(struct stripe_head *sh, struct stripe_head_state *s /* writing out phase */ if (s->waiting_extra_page) return 0; - return r5l_write_stripe(conf->log, sh); + return r5l_write_stripe(conf, sh); } else if (test_bit(STRIPE_LOG_TRAPPED, &sh->state)) { /* caching phase */ - return r5c_cache_data(conf->log, sh); + return r5c_cache_data(conf, sh); } } else if (raid5_has_ppl(conf)) { return ppl_write_stripe(conf, sh); @@ -88,7 +88,7 @@ static inline void log_stripe_write_finished(struct stripe_head *sh) static inline void log_write_stripe_run(struct r5conf *conf) { if (conf->log) - r5l_write_stripe_run(conf->log); + r5l_write_stripe_run(conf); else if (raid5_has_ppl(conf)) ppl_write_stripe_run(conf); } @@ -106,7 +106,7 @@ static inline int log_handle_flush_request(struct r5conf *conf, struct bio *bio) int ret = -ENODEV; if (conf->log) - ret = r5l_handle_flush_request(conf->log, bio); + ret = r5l_handle_flush_request(conf, bio); else if (raid5_has_ppl(conf)) ret = ppl_handle_flush_request(conf->log, bio); @@ -116,7 +116,7 @@ static inline int log_handle_flush_request(struct r5conf *conf, struct bio *bio) static inline void log_quiesce(struct r5conf *conf, int quiesce) { if (conf->log) - r5l_quiesce(conf->log, quiesce); + r5l_quiesce(conf, quiesce); else if (raid5_has_ppl(conf)) ppl_quiesce(conf, quiesce); } -- 2.30.2