diff options
| -rw-r--r-- | fs/ocfs2/cluster/heartbeat.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c index d66b17c000d4..2a7cd17e96f0 100644 --- a/fs/ocfs2/cluster/heartbeat.c +++ b/fs/ocfs2/cluster/heartbeat.c | |||
| @@ -65,8 +65,10 @@ static DECLARE_WAIT_QUEUE_HEAD(o2hb_steady_queue); | |||
| 65 | /* | 65 | /* |
| 66 | * In global heartbeat, we maintain a series of region bitmaps. | 66 | * In global heartbeat, we maintain a series of region bitmaps. |
| 67 | * - o2hb_region_bitmap allows us to limit the region number to max region. | 67 | * - o2hb_region_bitmap allows us to limit the region number to max region. |
| 68 | * - o2hb_live_region_bitmap tracks live regions (seen steady iterations). | ||
| 68 | */ | 69 | */ |
| 69 | static unsigned long o2hb_region_bitmap[BITS_TO_LONGS(O2NM_MAX_REGIONS)]; | 70 | static unsigned long o2hb_region_bitmap[BITS_TO_LONGS(O2NM_MAX_REGIONS)]; |
| 71 | static unsigned long o2hb_live_region_bitmap[BITS_TO_LONGS(O2NM_MAX_REGIONS)]; | ||
| 70 | 72 | ||
| 71 | #define O2HB_DB_TYPE_LIVENODES 0 | 73 | #define O2HB_DB_TYPE_LIVENODES 0 |
| 72 | struct o2hb_debug_buf { | 74 | struct o2hb_debug_buf { |
| @@ -1135,6 +1137,7 @@ int o2hb_init(void) | |||
| 1135 | 1137 | ||
| 1136 | memset(o2hb_live_node_bitmap, 0, sizeof(o2hb_live_node_bitmap)); | 1138 | memset(o2hb_live_node_bitmap, 0, sizeof(o2hb_live_node_bitmap)); |
| 1137 | memset(o2hb_region_bitmap, 0, sizeof(o2hb_region_bitmap)); | 1139 | memset(o2hb_region_bitmap, 0, sizeof(o2hb_region_bitmap)); |
| 1140 | memset(o2hb_live_region_bitmap, 0, sizeof(o2hb_live_region_bitmap)); | ||
| 1138 | 1141 | ||
| 1139 | return o2hb_debug_init(); | 1142 | return o2hb_debug_init(); |
| 1140 | } | 1143 | } |
| @@ -1563,6 +1566,8 @@ static ssize_t o2hb_region_dev_write(struct o2hb_region *reg, | |||
| 1563 | /* Ok, we were woken. Make sure it wasn't by drop_item() */ | 1566 | /* Ok, we were woken. Make sure it wasn't by drop_item() */ |
| 1564 | spin_lock(&o2hb_live_lock); | 1567 | spin_lock(&o2hb_live_lock); |
| 1565 | hb_task = reg->hr_task; | 1568 | hb_task = reg->hr_task; |
| 1569 | if (o2hb_global_heartbeat_active()) | ||
| 1570 | set_bit(reg->hr_region_num, o2hb_live_region_bitmap); | ||
| 1566 | spin_unlock(&o2hb_live_lock); | 1571 | spin_unlock(&o2hb_live_lock); |
| 1567 | 1572 | ||
| 1568 | if (hb_task) | 1573 | if (hb_task) |
| @@ -1751,8 +1756,10 @@ static void o2hb_heartbeat_group_drop_item(struct config_group *group, | |||
| 1751 | 1756 | ||
| 1752 | /* stop the thread when the user removes the region dir */ | 1757 | /* stop the thread when the user removes the region dir */ |
| 1753 | spin_lock(&o2hb_live_lock); | 1758 | spin_lock(&o2hb_live_lock); |
| 1754 | if (o2hb_global_heartbeat_active()) | 1759 | if (o2hb_global_heartbeat_active()) { |
| 1755 | clear_bit(reg->hr_region_num, o2hb_region_bitmap); | 1760 | clear_bit(reg->hr_region_num, o2hb_region_bitmap); |
| 1761 | clear_bit(reg->hr_region_num, o2hb_live_region_bitmap); | ||
| 1762 | } | ||
| 1756 | hb_task = reg->hr_task; | 1763 | hb_task = reg->hr_task; |
| 1757 | reg->hr_task = NULL; | 1764 | reg->hr_task = NULL; |
| 1758 | spin_unlock(&o2hb_live_lock); | 1765 | spin_unlock(&o2hb_live_lock); |
