mpath_pr_event_handle() creates a separate thread to do the persistent
reservation work, but it doesn't take any advantage of the work being
done in another thread. Merge mpath_pr_event_handle() and
mpath_pr_event_handler_fn() into a single function with no separate
thread.

Signed-off-by: Benjamin Marzinski <bmarz...@redhat.com>
---
 multipathd/main.c | 50 +++++++++++------------------------------------
 1 file changed, 11 insertions(+), 39 deletions(-)

diff --git a/multipathd/main.c b/multipathd/main.c
index 2d5c146d..46eef222 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -89,8 +89,7 @@
 #define CMDSIZE 160
 #define MSG_SIZE 32
 
-int mpath_pr_event_handle(struct path *pp);
-void * mpath_pr_event_handler_fn (void * );
+static void mpath_pr_event_handle(struct path *pp);
 
 #define LOG_MSG(lvl, pp)                                       \
 do {                                                           \
@@ -4229,17 +4228,24 @@ main (int argc, char *argv[])
                return (child(NULL));
 }
 
-void *  mpath_pr_event_handler_fn (void * pathp )
+static void mpath_pr_event_handle(struct path *pp)
 {
        struct multipath * mpp;
        unsigned int i;
        int ret, isFound;
-       struct path * pp = (struct path *)pathp;
        struct prout_param_descriptor *param;
        struct prin_resp *resp;
 
-       rcu_register_thread();
        mpp = pp->mpp;
+       if (pp->bus != SYSFS_BUS_SCSI) {
+               mpp->prflag = PRFLAG_UNSET;
+               return;
+       }
+
+       if (!get_be64(mpp->reservation_key)) {
+               mpp->prflag = PRFLAG_UNSET;
+               return;
+       }
 
        resp = mpath_alloc_prin_response(MPATH_PRIN_RKEY_SA);
        if (!resp){
@@ -4306,38 +4312,4 @@ void *  mpath_pr_event_handler_fn (void * pathp )
 out:
        if (resp)
                free(resp);
-       rcu_unregister_thread();
-       return NULL;
-}
-
-int mpath_pr_event_handle(struct path *pp)
-{
-       pthread_t thread;
-       int rc;
-       pthread_attr_t attr;
-       struct multipath * mpp;
-
-       if (pp->bus != SYSFS_BUS_SCSI)
-               goto no_pr;
-
-       mpp = pp->mpp;
-
-       if (!get_be64(mpp->reservation_key))
-               goto no_pr;
-
-       pthread_attr_init(&attr);
-       pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
-
-       rc = pthread_create(&thread, NULL , mpath_pr_event_handler_fn, pp);
-       if (rc) {
-               condlog(0, "%s: ERROR; return code from pthread_create() is 
%d", pp->dev, rc);
-               return -1;
-       }
-       pthread_attr_destroy(&attr);
-       rc = pthread_join(thread, NULL);
-       return 0;
-
-no_pr:
-       pp->mpp->prflag = PRFLAG_UNSET;
-       return 0;
 }
-- 
2.48.1


Reply via email to