summaryrefslogtreecommitdiffstats
path: root/drivers/md/raid5-cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/raid5-cache.c')
-rw-r--r--drivers/md/raid5-cache.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c
index 0460882a5fd7..289ca3f5d4b3 100644
--- a/drivers/md/raid5-cache.c
+++ b/drivers/md/raid5-cache.c
@@ -748,6 +748,24 @@ static void r5l_wake_reclaim(struct r5l_log *log, sector_t space)
748 md_wakeup_thread(log->reclaim_thread); 748 md_wakeup_thread(log->reclaim_thread);
749} 749}
750 750
751void r5l_quiesce(struct r5l_log *log, int state)
752{
753 if (!log || state == 2)
754 return;
755 if (state == 0) {
756 log->reclaim_thread = md_register_thread(r5l_reclaim_thread,
757 log->rdev->mddev, "reclaim");
758 } else if (state == 1) {
759 /*
760 * at this point all stripes are finished, so io_unit is at
761 * least in STRIPE_END state
762 */
763 r5l_wake_reclaim(log, -1L);
764 md_unregister_thread(&log->reclaim_thread);
765 r5l_do_reclaim(log);
766 }
767}
768
751struct r5l_recovery_ctx { 769struct r5l_recovery_ctx {
752 struct page *meta_page; /* current meta */ 770 struct page *meta_page; /* current meta */
753 sector_t meta_total_blocks; /* total size of current meta and data */ 771 sector_t meta_total_blocks; /* total size of current meta and data */
@@ -1120,19 +1138,7 @@ io_kc:
1120 1138
1121void r5l_exit_log(struct r5l_log *log) 1139void r5l_exit_log(struct r5l_log *log)
1122{ 1140{
1123 /*
1124 * at this point all stripes are finished, so io_unit is at least in
1125 * STRIPE_END state
1126 */
1127 r5l_wake_reclaim(log, -1L);
1128 md_unregister_thread(&log->reclaim_thread); 1141 md_unregister_thread(&log->reclaim_thread);
1129 r5l_do_reclaim(log);
1130 /*
1131 * force a super update, r5l_do_reclaim might updated the super.
1132 * mddev->thread is already stopped
1133 */
1134 md_update_sb(log->rdev->mddev, 1);
1135
1136 kmem_cache_destroy(log->io_kc); 1142 kmem_cache_destroy(log->io_kc);
1137 kfree(log); 1143 kfree(log);
1138} 1144}