Commit 9ed38ff5 authored by Goldwyn Rodrigues's avatar Goldwyn Rodrigues

md-cluster: complete all write requests before adding suspend_info

process_suspend_info - which handles the RESYNCING request - must not
reply until all writes which were initiated before the request arrived,
have completed.

As a by-product, all process_* functions now take mddev as their
first arguement making it uniform.
Signed-off-by: default avatarGoldwyn Rodrigues <rgoldwyn@suse.com>
Signed-off-by: default avatarNeilBrown <neilb@suse.com>
parent da6fb7a9
...@@ -374,9 +374,10 @@ static void remove_suspend_info(struct md_cluster_info *cinfo, int slot) ...@@ -374,9 +374,10 @@ static void remove_suspend_info(struct md_cluster_info *cinfo, int slot)
} }
static void process_suspend_info(struct md_cluster_info *cinfo, static void process_suspend_info(struct mddev *mddev,
int slot, sector_t lo, sector_t hi) int slot, sector_t lo, sector_t hi)
{ {
struct md_cluster_info *cinfo = mddev->cluster_info;
struct suspend_info *s; struct suspend_info *s;
if (!hi) { if (!hi) {
...@@ -389,6 +390,8 @@ static void process_suspend_info(struct md_cluster_info *cinfo, ...@@ -389,6 +390,8 @@ static void process_suspend_info(struct md_cluster_info *cinfo,
s->slot = slot; s->slot = slot;
s->lo = lo; s->lo = lo;
s->hi = hi; s->hi = hi;
mddev->pers->quiesce(mddev, 1);
mddev->pers->quiesce(mddev, 0);
spin_lock_irq(&cinfo->suspend_lock); spin_lock_irq(&cinfo->suspend_lock);
/* Remove existing entry (if exists) before adding */ /* Remove existing entry (if exists) before adding */
__remove_suspend_info(cinfo, slot); __remove_suspend_info(cinfo, slot);
...@@ -457,7 +460,7 @@ static void process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg) ...@@ -457,7 +460,7 @@ 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, process_suspend_info(mddev, msg->slot,
msg->low, msg->high); msg->low, msg->high);
break; break;
case NEWDISK: case NEWDISK:
......
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