lkml.org 
[lkml]   [2022]   [May]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Date
Subject[PATCH v1 04/15] md/raid5-cache: Refactor r5l_flush_stripe_to_raid() to take a struct r5conf
All calls to r5l_flush_stripe_to_raid() have to dereference conf to
get the log. The log pointer should be protected by RCU, but isn't. Push
the dereference of conf->log into r5l_flush_stripe_to_raid() to reduce
the number of sites that dereference conf->log so this can be improved.

No functional changes intended.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
---
drivers/md/raid5-cache.c | 3 ++-
drivers/md/raid5-log.h | 4 ++--
drivers/md/raid5.c | 6 +++---
3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c
index 0049c4f45e9c..6db8040fb01b 100644
--- a/drivers/md/raid5-cache.c
+++ b/drivers/md/raid5-cache.c
@@ -1287,8 +1287,9 @@ static void r5l_log_flush_endio(struct bio *bio)
* only write stripes of an io_unit to raid disks till the io_unit is the first
* one whose data/parity is in log.
*/
-void r5l_flush_stripe_to_raid(struct r5l_log *log)
+void r5l_flush_stripe_to_raid(struct r5conf *conf)
{
+ struct r5l_log *log = conf->log;
bool do_flush;

if (!log || !log->need_cache_flush)
diff --git a/drivers/md/raid5-log.h b/drivers/md/raid5-log.h
index c6f877df4f3e..ead541075528 100644
--- a/drivers/md/raid5-log.h
+++ b/drivers/md/raid5-log.h
@@ -6,7 +6,7 @@ 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);
-void r5l_flush_stripe_to_raid(struct r5l_log *log);
+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);
@@ -96,7 +96,7 @@ static inline void log_write_stripe_run(struct r5conf *conf)
static inline void log_flush_stripe_to_raid(struct r5conf *conf)
{
if (conf->log)
- r5l_flush_stripe_to_raid(conf->log);
+ r5l_flush_stripe_to_raid(conf);
else if (raid5_has_ppl(conf))
ppl_write_stripe_run(conf);
}
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 355760f34cb6..436be2a42cc1 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -6427,7 +6427,7 @@ static int handle_active_stripes(struct r5conf *conf, int group,
release_inactive_stripe_list(conf, temp_inactive_list,
NR_STRIPE_HASH_LOCKS);

- r5l_flush_stripe_to_raid(conf->log);
+ r5l_flush_stripe_to_raid(conf);
if (release_inactive) {
spin_lock_irq(&conf->device_lock);
return 0;
@@ -6483,7 +6483,7 @@ static void raid5_do_work(struct work_struct *work)

flush_deferred_bios(conf);

- r5l_flush_stripe_to_raid(conf->log);
+ r5l_flush_stripe_to_raid(conf);

async_tx_issue_pending_all();
blk_finish_plug(&plug);
@@ -6570,7 +6570,7 @@ static void raid5d(struct md_thread *thread)

flush_deferred_bios(conf);

- r5l_flush_stripe_to_raid(conf->log);
+ r5l_flush_stripe_to_raid(conf);

async_tx_issue_pending_all();
blk_finish_plug(&plug);
--
2.30.2
\
 
 \ /
  Last update: 2022-05-19 21:14    [W:0.257 / U:0.268 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site