Commit f2651434 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

md: stop using for_each_mddev in md_notify_reboot

Just do a simple list_for_each_entry_safe on all_mddevs, and only grab a
reference when we drop the lock.
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarLogan Gunthorpe <logang@deltatee.com>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarSong Liu <song@kernel.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent b0e706a1
...@@ -9585,11 +9585,13 @@ EXPORT_SYMBOL_GPL(rdev_clear_badblocks); ...@@ -9585,11 +9585,13 @@ EXPORT_SYMBOL_GPL(rdev_clear_badblocks);
static int md_notify_reboot(struct notifier_block *this, static int md_notify_reboot(struct notifier_block *this,
unsigned long code, void *x) unsigned long code, void *x)
{ {
struct list_head *tmp; struct mddev *mddev, *n;
struct mddev *mddev;
int need_delay = 0; int need_delay = 0;
for_each_mddev(mddev, tmp) { spin_lock(&all_mddevs_lock);
list_for_each_entry_safe(mddev, n, &all_mddevs, all_mddevs) {
mddev_get(mddev);
spin_unlock(&all_mddevs_lock);
if (mddev_trylock(mddev)) { if (mddev_trylock(mddev)) {
if (mddev->pers) if (mddev->pers)
__md_stop_writes(mddev); __md_stop_writes(mddev);
...@@ -9598,7 +9600,11 @@ static int md_notify_reboot(struct notifier_block *this, ...@@ -9598,7 +9600,11 @@ static int md_notify_reboot(struct notifier_block *this,
mddev_unlock(mddev); mddev_unlock(mddev);
} }
need_delay = 1; need_delay = 1;
mddev_put(mddev);
spin_lock(&all_mddevs_lock);
} }
spin_unlock(&all_mddevs_lock);
/* /*
* certain more exotic SCSI devices are known to be * certain more exotic SCSI devices are known to be
* volatile wrt too early system reboots. While the * volatile wrt too early system reboots. While the
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment