|
@@ -549,16 +549,19 @@ static int core_get_resync_work(struct dirty_log *log, region_t *region)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
-static void core_complete_resync_work(struct dirty_log *log, region_t region,
|
|
|
- int success)
|
|
|
+static void core_set_region_sync(struct dirty_log *log, region_t region,
|
|
|
+ int in_sync)
|
|
|
{
|
|
|
struct log_c *lc = (struct log_c *) log->context;
|
|
|
|
|
|
log_clear_bit(lc, lc->recovering_bits, region);
|
|
|
- if (success) {
|
|
|
+ if (in_sync) {
|
|
|
log_set_bit(lc, lc->sync_bits, region);
|
|
|
lc->sync_count++;
|
|
|
- }
|
|
|
+ } else if (log_test_bit(lc->sync_bits, region)) {
|
|
|
+ lc->sync_count--;
|
|
|
+ log_clear_bit(lc, lc->sync_bits, region);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static region_t core_get_sync_count(struct dirty_log *log)
|
|
@@ -625,7 +628,7 @@ static struct dirty_log_type _core_type = {
|
|
|
.mark_region = core_mark_region,
|
|
|
.clear_region = core_clear_region,
|
|
|
.get_resync_work = core_get_resync_work,
|
|
|
- .complete_resync_work = core_complete_resync_work,
|
|
|
+ .set_region_sync = core_set_region_sync,
|
|
|
.get_sync_count = core_get_sync_count,
|
|
|
.status = core_status,
|
|
|
};
|
|
@@ -644,7 +647,7 @@ static struct dirty_log_type _disk_type = {
|
|
|
.mark_region = core_mark_region,
|
|
|
.clear_region = core_clear_region,
|
|
|
.get_resync_work = core_get_resync_work,
|
|
|
- .complete_resync_work = core_complete_resync_work,
|
|
|
+ .set_region_sync = core_set_region_sync,
|
|
|
.get_sync_count = core_get_sync_count,
|
|
|
.status = disk_status,
|
|
|
};
|