|
@@ -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,
|