On Wed, 2018-10-10 at 13:01 -0500, Benjamin Marzinski wrote: > When mpathpersist tries to rollback the registration, it copies > the SARK to the RK, and clears the SARK. However, it repeated this > step > for each thread. This means that the first rollback thread correctly > had the RK set to the SARK used during registration. However, if more > than one registration needed to be rolled back, later threads would > have > both the RK and SARK cleared. This commit fixes that by only copying > and > clearing the SARK once. > > Signed-off-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx> > --- > libmpathpersist/mpath_persist.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/libmpathpersist/mpath_persist.c > b/libmpathpersist/mpath_persist.c > index 29e7fb4..2ffe56e 100644 > --- a/libmpathpersist/mpath_persist.c > +++ b/libmpathpersist/mpath_persist.c > @@ -559,11 +559,10 @@ int mpath_prout_reg(struct multipath *mpp,int > rq_servact, int rq_scope, > } > if (rollback && ((rq_servact == MPATH_PROUT_REG_SA) && sa_key > != 0 )){ > condlog (3, "%s: ERROR: initiating pr out rollback", > mpp->wwid); > + memcpy(¶mp->key, ¶mp->sa_key, 8); > + memset(¶mp->sa_key, 0, 8); > for( i=0 ; i < count ; i++){ > if(thread[i].param.status == MPATH_PR_SUCCESS) > { > - memcpy(&thread[i].param.paramp->key, > &thread[i].param.paramp->sa_key, 8); > - memset(&thread[i].param.paramp->sa_key, > 0, 8); > - thread[i].param.status = > MPATH_PR_SUCCESS; Why did you delete this last statement, too? Martin > rc = pthread_create(&thread[i].id, > &attr, mpath_prout_pthread_fn, > (void > *)(&thread[i].param)); > if (rc){ -- Dr. Martin Wilck <mwilck@xxxxxxxx>, Tel. +49 (0)911 74053 2107 SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton HRB 21284 (AG Nürnberg) -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel