Commit e59721cc authored by Goldwyn Rodrigues's avatar Goldwyn Rodrigues

Resync start/Finish actions

When a RESYNC_START message arrives, the node removes the entry
with the current slot number and adds the range to the
suspend_list.

Simlarly, when a RESYNC_FINISHED message is received, node clears
entry with respect to the bitmap number.
Signed-off-by: default avatarGoldwyn Rodrigues <rgoldwyn@suse.com>
parent 965400eb
...@@ -314,6 +314,50 @@ static void ack_bast(void *arg, int mode) ...@@ -314,6 +314,50 @@ static void ack_bast(void *arg, int mode)
md_wakeup_thread(cinfo->recv_thread); md_wakeup_thread(cinfo->recv_thread);
} }
static void __remove_suspend_info(struct md_cluster_info *cinfo, int slot)
{
struct suspend_info *s, *tmp;
list_for_each_entry_safe(s, tmp, &cinfo->suspend_list, list)
if (slot == s->slot) {
pr_info("%s:%d Deleting suspend_info: %d\n",
__func__, __LINE__, slot);
list_del(&s->list);
kfree(s);
break;
}
}
static void remove_suspend_info(struct md_cluster_info *cinfo, int slot)
{
spin_lock_irq(&cinfo->suspend_lock);
__remove_suspend_info(cinfo, slot);
spin_unlock_irq(&cinfo->suspend_lock);
}
static void process_suspend_info(struct md_cluster_info *cinfo,
int slot, sector_t lo, sector_t hi)
{
struct suspend_info *s;
if (!hi) {
remove_suspend_info(cinfo, slot);
return;
}
s = kzalloc(sizeof(struct suspend_info), GFP_KERNEL);
if (!s)
return;
s->slot = slot;
s->lo = lo;
s->hi = hi;
spin_lock_irq(&cinfo->suspend_lock);
/* Remove existing entry (if exists) before adding */
__remove_suspend_info(cinfo, slot);
list_add(&s->list, &cinfo->suspend_list);
spin_unlock_irq(&cinfo->suspend_lock);
}
static void process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg) static void process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg)
{ {
switch (msg->type) { switch (msg->type) {
...@@ -325,6 +369,8 @@ static void process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg) ...@@ -325,6 +369,8 @@ static void process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg)
case RESYNCING: case RESYNCING:
pr_info("%s: %d Received message: RESYNCING from %d\n", pr_info("%s: %d Received message: RESYNCING from %d\n",
__func__, __LINE__, msg->slot); __func__, __LINE__, msg->slot);
process_suspend_info(mddev->cluster_info, msg->slot,
msg->low, msg->high);
break; break;
}; };
} }
......
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