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

md: stop using for_each_mddev in md_do_sync

Just do a plain list_for_each that only grabs a mddev reference in
the case where the thread sleeps and restarts the list iteration.
Signed-off-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 2652a1bd
...@@ -8723,7 +8723,6 @@ void md_do_sync(struct md_thread *thread) ...@@ -8723,7 +8723,6 @@ void md_do_sync(struct md_thread *thread)
unsigned long update_time; unsigned long update_time;
sector_t mark_cnt[SYNC_MARKS]; sector_t mark_cnt[SYNC_MARKS];
int last_mark,m; int last_mark,m;
struct list_head *tmp;
sector_t last_check; sector_t last_check;
int skipped = 0; int skipped = 0;
struct md_rdev *rdev; struct md_rdev *rdev;
...@@ -8787,7 +8786,8 @@ void md_do_sync(struct md_thread *thread) ...@@ -8787,7 +8786,8 @@ void md_do_sync(struct md_thread *thread)
try_again: try_again:
if (test_bit(MD_RECOVERY_INTR, &mddev->recovery)) if (test_bit(MD_RECOVERY_INTR, &mddev->recovery))
goto skip; goto skip;
for_each_mddev(mddev2, tmp) { spin_lock(&all_mddevs_lock);
list_for_each_entry(mddev2, &all_mddevs, all_mddevs) {
if (mddev2 == mddev) if (mddev2 == mddev)
continue; continue;
if (!mddev->parallel_resync if (!mddev->parallel_resync
...@@ -8819,7 +8819,8 @@ void md_do_sync(struct md_thread *thread) ...@@ -8819,7 +8819,8 @@ void md_do_sync(struct md_thread *thread)
desc, mdname(mddev), desc, mdname(mddev),
mdname(mddev2)); mdname(mddev2));
} }
mddev_put(mddev2); spin_unlock(&all_mddevs_lock);
if (signal_pending(current)) if (signal_pending(current))
flush_signals(current); flush_signals(current);
schedule(); schedule();
...@@ -8829,6 +8830,7 @@ void md_do_sync(struct md_thread *thread) ...@@ -8829,6 +8830,7 @@ void md_do_sync(struct md_thread *thread)
finish_wait(&resync_wait, &wq); finish_wait(&resync_wait, &wq);
} }
} }
spin_unlock(&all_mddevs_lock);
} while (mddev->curr_resync < MD_RESYNC_DELAYED); } while (mddev->curr_resync < MD_RESYNC_DELAYED);
j = 0; j = 0;
......
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