These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / fs / ocfs2 / dlm / dlmdomain.c
index 7df88a6..2ee7fe7 100644 (file)
@@ -1465,39 +1465,46 @@ static int dlm_request_join(struct dlm_ctxt *dlm,
        if (status == -ENOPROTOOPT) {
                status = 0;
                *response = JOIN_OK_NO_MAP;
-       } else if (packet.code == JOIN_DISALLOW ||
-                  packet.code == JOIN_OK_NO_MAP) {
-               *response = packet.code;
-       } else if (packet.code == JOIN_PROTOCOL_MISMATCH) {
-               mlog(ML_NOTICE,
-                    "This node requested DLM locking protocol %u.%u and "
-                    "filesystem locking protocol %u.%u.  At least one of "
-                    "the protocol versions on node %d is not compatible, "
-                    "disconnecting\n",
-                    dlm->dlm_locking_proto.pv_major,
-                    dlm->dlm_locking_proto.pv_minor,
-                    dlm->fs_locking_proto.pv_major,
-                    dlm->fs_locking_proto.pv_minor,
-                    node);
-               status = -EPROTO;
-               *response = packet.code;
-       } else if (packet.code == JOIN_OK) {
-               *response = packet.code;
-               /* Use the same locking protocol as the remote node */
-               dlm->dlm_locking_proto.pv_minor = packet.dlm_minor;
-               dlm->fs_locking_proto.pv_minor = packet.fs_minor;
-               mlog(0,
-                    "Node %d responds JOIN_OK with DLM locking protocol "
-                    "%u.%u and fs locking protocol %u.%u\n",
-                    node,
-                    dlm->dlm_locking_proto.pv_major,
-                    dlm->dlm_locking_proto.pv_minor,
-                    dlm->fs_locking_proto.pv_major,
-                    dlm->fs_locking_proto.pv_minor);
        } else {
-               status = -EINVAL;
-               mlog(ML_ERROR, "invalid response %d from node %u\n",
-                    packet.code, node);
+               *response = packet.code;
+               switch (packet.code) {
+               case JOIN_DISALLOW:
+               case JOIN_OK_NO_MAP:
+                       break;
+               case JOIN_PROTOCOL_MISMATCH:
+                       mlog(ML_NOTICE,
+                            "This node requested DLM locking protocol %u.%u and "
+                            "filesystem locking protocol %u.%u.  At least one of "
+                            "the protocol versions on node %d is not compatible, "
+                            "disconnecting\n",
+                            dlm->dlm_locking_proto.pv_major,
+                            dlm->dlm_locking_proto.pv_minor,
+                            dlm->fs_locking_proto.pv_major,
+                            dlm->fs_locking_proto.pv_minor,
+                            node);
+                       status = -EPROTO;
+                       break;
+               case JOIN_OK:
+                       /* Use the same locking protocol as the remote node */
+                       dlm->dlm_locking_proto.pv_minor = packet.dlm_minor;
+                       dlm->fs_locking_proto.pv_minor = packet.fs_minor;
+                       mlog(0,
+                            "Node %d responds JOIN_OK with DLM locking protocol "
+                            "%u.%u and fs locking protocol %u.%u\n",
+                            node,
+                            dlm->dlm_locking_proto.pv_major,
+                            dlm->dlm_locking_proto.pv_minor,
+                            dlm->fs_locking_proto.pv_major,
+                            dlm->fs_locking_proto.pv_minor);
+                       break;
+               default:
+                       status = -EINVAL;
+                       mlog(ML_ERROR, "invalid response %d from node %u\n",
+                            packet.code, node);
+                       /* Reset response to JOIN_DISALLOW */
+                       *response = JOIN_DISALLOW;
+                       break;
+               }
        }
 
        mlog(0, "status %d, node %d response is %d\n", status, node,
@@ -1725,12 +1732,13 @@ static int dlm_register_domain_handlers(struct dlm_ctxt *dlm)
 
        o2hb_setup_callback(&dlm->dlm_hb_down, O2HB_NODE_DOWN_CB,
                            dlm_hb_node_down_cb, dlm, DLM_HB_NODE_DOWN_PRI);
+       o2hb_setup_callback(&dlm->dlm_hb_up, O2HB_NODE_UP_CB,
+                           dlm_hb_node_up_cb, dlm, DLM_HB_NODE_UP_PRI);
+
        status = o2hb_register_callback(dlm->name, &dlm->dlm_hb_down);
        if (status)
                goto bail;
 
-       o2hb_setup_callback(&dlm->dlm_hb_up, O2HB_NODE_UP_CB,
-                           dlm_hb_node_up_cb, dlm, DLM_HB_NODE_UP_PRI);
        status = o2hb_register_callback(dlm->name, &dlm->dlm_hb_up);
        if (status)
                goto bail;
@@ -1845,8 +1853,6 @@ static int dlm_register_domain_handlers(struct dlm_ctxt *dlm)
                                        sizeof(struct dlm_exit_domain),
                                        dlm_begin_exit_domain_handler,
                                        dlm, NULL, &dlm->dlm_domain_handlers);
-       if (status)
-               goto bail;
 
 bail:
        if (status)
@@ -1860,6 +1866,7 @@ static int dlm_join_domain(struct dlm_ctxt *dlm)
        int status;
        unsigned int backoff;
        unsigned int total_backoff = 0;
+       char wq_name[O2NM_MAX_NAME_LEN];
 
        BUG_ON(!dlm);
 
@@ -1889,7 +1896,8 @@ static int dlm_join_domain(struct dlm_ctxt *dlm)
                goto bail;
        }
 
-       dlm->dlm_worker = create_singlethread_workqueue("dlm_wq");
+       snprintf(wq_name, O2NM_MAX_NAME_LEN, "dlm_wq-%s", dlm->name);
+       dlm->dlm_worker = create_singlethread_workqueue(wq_name);
        if (!dlm->dlm_worker) {
                status = -ENOMEM;
                mlog_errno(status);