[dm-devel] [PATCH 02/78] mpath_persist: Do not call exit() from a shared library
Hannes Reinecke
hare at suse.de
Mon Mar 16 12:35:49 UTC 2015
mpath_persist is a shared library, and shouldn't call exit().
Just return an error code here.
And cleanup formatting while we're at it.
Signed-off-by: Hannes Reinecke <hare at suse.de>
---
libmpathpersist/mpath_persist.c | 52 ++++++++++++++++++++++++-----------------
1 file changed, 31 insertions(+), 21 deletions(-)
diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c
index bd30125..9f65ca6 100644
--- a/libmpathpersist/mpath_persist.c
+++ b/libmpathpersist/mpath_persist.c
@@ -386,18 +386,20 @@ void * mpath_prin_pthread_fn (void *p)
int ret;
struct prin_param * pparam = (struct prin_param *)p;
- ret = prin_do_scsi_ioctl(pparam->dev, pparam->rq_servact, pparam->resp, pparam->noisy);
- pparam->status = ret;
- pthread_exit(NULL);
+ ret = prin_do_scsi_ioctl(pparam->dev, pparam->rq_servact,
+ pparam->resp, pparam->noisy);
+ pparam->status = ret;
+ pthread_exit(NULL);
}
-int mpath_send_prin_activepath (char * dev, int rq_servact, struct prin_resp * resp, int noisy)
+int mpath_send_prin_activepath (char * dev, int rq_servact,
+ struct prin_resp * resp, int noisy)
{
int rc;
rc = prin_do_scsi_ioctl(dev, rq_servact, resp, noisy);
-
+
return (rc);
}
@@ -409,14 +411,14 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope,
struct pathgroup *pgp = NULL;
struct path *pp = NULL;
int rollback = 0;
- int active_pathcount=0;
+ int active_pathcount=0;
int rc;
int count=0;
int status = MPATH_PR_SUCCESS;
uint64_t sa_key = 0;
if (!mpp)
- return MPATH_PR_DMMP_ERROR;
+ return MPATH_PR_DMMP_ERROR;
active_pathcount = pathcount(mpp, PATH_UP) + pathcount(mpp, PATH_GHOST);
@@ -444,12 +446,13 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope,
condlog (3, "THRED ID [%d] INFO]", i);
condlog (3, "rq_servact=%d ", thread[i].param.rq_servact);
- condlog (3, "rq_scope=%d ", thread[i].param.rq_scope);
- condlog (3, "rq_type=%d ", thread[i].param.rq_type);
- condlog (3, "rkey=");
- condlog (3, "paramp->sa_flags =%02x ", thread[i].param.paramp->sa_flags);
- condlog (3, "noisy=%d ", thread[i].param.noisy);
- condlog (3, "status=%d ", thread[i].param.status);
+ condlog (3, "rq_scope=%d ", thread[i].param.rq_scope);
+ condlog (3, "rq_type=%d ", thread[i].param.rq_type);
+ condlog (3, "rkey=");
+ condlog (3, "paramp->sa_flags =%02x ",
+ thread[i].param.paramp->sa_flags);
+ condlog (3, "noisy=%d ", thread[i].param.noisy);
+ condlog (3, "status=%d ", thread[i].param.status);
}
pthread_attr_t attr;
@@ -548,13 +551,15 @@ int mpath_prout_common(struct multipath *mpp,int rq_servact, int rq_scope,
vector_foreach_slot (mpp->pg, pgp, j){
vector_foreach_slot (pgp->paths, pp, i){
if (!((pp->state == PATH_UP) || (pp->state == PATH_GHOST))){
- condlog (1, "%s: %s path not up. Skip", mpp->wwid, pp->dev);
+ condlog (1, "%s: %s path not up. Skip",
+ mpp->wwid, pp->dev);
continue;
}
condlog (3, "%s: sending pr out command to %s", mpp->wwid, pp->dev);
- ret = send_prout_activepath(pp->dev, rq_servact, rq_scope, rq_type,
- paramp, noisy);
+ ret = send_prout_activepath(pp->dev, rq_servact,
+ rq_scope, rq_type,
+ paramp, noisy);
return ret ;
}
}
@@ -585,7 +590,7 @@ int send_prout_activepath(char * dev, int rq_servact, int rq_scope,
rc = pthread_create(&thread, &attr, mpath_prout_pthread_fn, (void *)(¶m));
if (rc){
condlog (3, "%s: failed to create thread %d", dev, rc);
- exit(-1);
+ return MPATH_PR_OTHER;
}
/* Free attribute and wait for the other threads */
pthread_attr_destroy(&attr);
@@ -723,16 +728,21 @@ int mpath_prout_rel(struct multipath *mpp,int rq_servact, int rq_scope,
condlog (3, "%s: reservation key set.", mpp->wwid);
}
- mpath_prout_common (mpp, MPATH_PROUT_CLEAR_SA, rq_scope, rq_type, pamp,
- noisy);
+ status = mpath_prout_common (mpp, MPATH_PROUT_CLEAR_SA,
+ rq_scope, rq_type, pamp, noisy);
+
+ if (status) {
+ condlog(0, "%s: failed to send CLEAR_SA", mpp->wwid);
+ goto out1;
+ }
pamp->num_transportid = 1;
pptr=pamp->trnptid_list[0];
for (i = 0; i < num; i++){
- if (mpp->reservation_key &&
+ if (mpp->reservation_key &&
memcmp(pr_buff->prin_descriptor.prin_readfd.descriptors[i]->key,
- mpp->reservation_key, 8)){
+ mpp->reservation_key, 8)){
/*register with tarnsport id*/
memset(pamp, 0, length);
pamp->trnptid_list[0] = pptr;
--
1.8.4.5
More information about the dm-devel
mailing list