On Fri, Nov 06 2015, rgoldwyn@xxxxxxx wrote: > From: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx> > > If a RESYNCING message with (0,0) has been sent before, do not send it > again. This avoids a resync ping pong between the nodes. We read > the bitmap lockresource's LVB to figure out the previous value > of the RESYNCING message. This seems like a bandaid more than a real fix, but maybe I'm wrong. I'll apply it for now. If I end of figuring out that there is some other issue I discuss it then. > > Signed-off-by: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx> > --- > drivers/md/md-cluster.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c > index a93734e..3daa464 100644 > --- a/drivers/md/md-cluster.c > +++ b/drivers/md/md-cluster.c > @@ -898,8 +898,16 @@ static int resync_start(struct mddev *mddev) > static int resync_info_update(struct mddev *mddev, sector_t lo, sector_t hi) > { > struct md_cluster_info *cinfo = mddev->cluster_info; > + struct resync_info ri; > struct cluster_msg cmsg = {0}; > > + /* do not send zero again, if we have sent before */ > + if (hi == 0) { > + memcpy(&ri, cinfo->bitmap_lockres->lksb.sb_lvbptr, sizeof(struct resync_info)); > + if (le64_to_cpu(ri.hi) == 0) > + return 0; I feel this would look so much better as: if (hi == 0) { struct resync_info ri; memcpy(&ri, cinfo->bitmap_lockres->lksb.sb_lvbptr, sizeof(ri)); } so if you happened to resend it like that I'd probably remove what I have already applied and use this instead. (make variable more local, use sizeof(var) instead of sizeof(type), and wrap the long line) Thanks, NeilBrown > + } > + > add_resync_info(mddev, cinfo->bitmap_lockres, lo, hi); > /* Re-acquire the lock to refresh LVB */ > dlm_lock_sync(cinfo->bitmap_lockres, DLM_LOCK_PW); > -- > 1.8.5.6
Attachment:
signature.asc
Description: PGP signature