diff options
author | Song Liu <songliubraving@fb.com> | 2017-08-09 01:56:52 -0400 |
---|---|---|
committer | Shaohua Li <shli@fb.com> | 2017-08-25 13:21:46 -0400 |
commit | a72cbf83b0cb2368568d4e78cf1687079aad4d25 (patch) | |
tree | db55f2260db6cb8f0bff001767148adaddda81fb | |
parent | 26e13043b7ea14c0b038f3f5a4af0d5cdda9e95f (diff) |
md/r5cache: call mddev_lock/unlock() in r5c_journal_mode_show
In r5c_journal_mode_show(), it is necessary to call mddev_lock()
before accessing conf and conf->log. Otherwise, the conf->log
may change (and become NULL).
Signed-off-by: Song Liu <songliubraving@fb.com>
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: Shaohua Li <shli@fb.com>
-rw-r--r-- | drivers/md/raid5-cache.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c index 2dcbafa8e66c..e357ed367140 100644 --- a/drivers/md/raid5-cache.c +++ b/drivers/md/raid5-cache.c | |||
@@ -2529,11 +2529,18 @@ static void r5l_write_super(struct r5l_log *log, sector_t cp) | |||
2529 | 2529 | ||
2530 | static ssize_t r5c_journal_mode_show(struct mddev *mddev, char *page) | 2530 | static ssize_t r5c_journal_mode_show(struct mddev *mddev, char *page) |
2531 | { | 2531 | { |
2532 | struct r5conf *conf = mddev->private; | 2532 | struct r5conf *conf; |
2533 | int ret; | 2533 | int ret; |
2534 | 2534 | ||
2535 | if (!conf->log) | 2535 | ret = mddev_lock(mddev); |
2536 | if (ret) | ||
2537 | return ret; | ||
2538 | |||
2539 | conf = mddev->private; | ||
2540 | if (!conf || !conf->log) { | ||
2541 | mddev_unlock(mddev); | ||
2536 | return 0; | 2542 | return 0; |
2543 | } | ||
2537 | 2544 | ||
2538 | switch (conf->log->r5c_journal_mode) { | 2545 | switch (conf->log->r5c_journal_mode) { |
2539 | case R5C_JOURNAL_MODE_WRITE_THROUGH: | 2546 | case R5C_JOURNAL_MODE_WRITE_THROUGH: |
@@ -2551,6 +2558,7 @@ static ssize_t r5c_journal_mode_show(struct mddev *mddev, char *page) | |||
2551 | default: | 2558 | default: |
2552 | ret = 0; | 2559 | ret = 0; |
2553 | } | 2560 | } |
2561 | mddev_unlock(mddev); | ||
2554 | return ret; | 2562 | return ret; |
2555 | } | 2563 | } |
2556 | 2564 | ||