1 /****************************************************************************** 2 ******************************************************************************* 3 ** 4 ** Copyright (C) 2005 Red Hat, Inc. All rights reserved. 5 ** 6 ** This copyrighted material is made available to anyone wishing to use, 7 ** modify, copy, or redistribute it subject to the terms and conditions 8 ** of the GNU General Public License v.2. 9 ** 10 ******************************************************************************* 11 ******************************************************************************/ 12 13 #include "dlm_internal.h" 14 #include "rcom.h" 15 #include "util.h" 16 17 static void header_out(struct dlm_header *hd) 18 { 19 hd->h_version = cpu_to_le32(hd->h_version); 20 hd->h_lockspace = cpu_to_le32(hd->h_lockspace); 21 hd->h_nodeid = cpu_to_le32(hd->h_nodeid); 22 hd->h_length = cpu_to_le16(hd->h_length); 23 } 24 25 static void header_in(struct dlm_header *hd) 26 { 27 hd->h_version = le32_to_cpu(hd->h_version); 28 hd->h_lockspace = le32_to_cpu(hd->h_lockspace); 29 hd->h_nodeid = le32_to_cpu(hd->h_nodeid); 30 hd->h_length = le16_to_cpu(hd->h_length); 31 } 32 33 void dlm_message_out(struct dlm_message *ms) 34 { 35 struct dlm_header *hd = (struct dlm_header *) ms; 36 37 header_out(hd); 38 39 ms->m_type = cpu_to_le32(ms->m_type); 40 ms->m_nodeid = cpu_to_le32(ms->m_nodeid); 41 ms->m_pid = cpu_to_le32(ms->m_pid); 42 ms->m_lkid = cpu_to_le32(ms->m_lkid); 43 ms->m_remid = cpu_to_le32(ms->m_remid); 44 ms->m_parent_lkid = cpu_to_le32(ms->m_parent_lkid); 45 ms->m_parent_remid = cpu_to_le32(ms->m_parent_remid); 46 ms->m_exflags = cpu_to_le32(ms->m_exflags); 47 ms->m_sbflags = cpu_to_le32(ms->m_sbflags); 48 ms->m_flags = cpu_to_le32(ms->m_flags); 49 ms->m_lvbseq = cpu_to_le32(ms->m_lvbseq); 50 ms->m_hash = cpu_to_le32(ms->m_hash); 51 ms->m_status = cpu_to_le32(ms->m_status); 52 ms->m_grmode = cpu_to_le32(ms->m_grmode); 53 ms->m_rqmode = cpu_to_le32(ms->m_rqmode); 54 ms->m_bastmode = cpu_to_le32(ms->m_bastmode); 55 ms->m_asts = cpu_to_le32(ms->m_asts); 56 ms->m_result = cpu_to_le32(ms->m_result); 57 } 58 59 void dlm_message_in(struct dlm_message *ms) 60 { 61 struct dlm_header *hd = (struct dlm_header *) ms; 62 63 header_in(hd); 64 65 ms->m_type = le32_to_cpu(ms->m_type); 66 ms->m_nodeid = le32_to_cpu(ms->m_nodeid); 67 ms->m_pid = le32_to_cpu(ms->m_pid); 68 ms->m_lkid = le32_to_cpu(ms->m_lkid); 69 ms->m_remid = le32_to_cpu(ms->m_remid); 70 ms->m_parent_lkid = le32_to_cpu(ms->m_parent_lkid); 71 ms->m_parent_remid = le32_to_cpu(ms->m_parent_remid); 72 ms->m_exflags = le32_to_cpu(ms->m_exflags); 73 ms->m_sbflags = le32_to_cpu(ms->m_sbflags); 74 ms->m_flags = le32_to_cpu(ms->m_flags); 75 ms->m_lvbseq = le32_to_cpu(ms->m_lvbseq); 76 ms->m_hash = le32_to_cpu(ms->m_hash); 77 ms->m_status = le32_to_cpu(ms->m_status); 78 ms->m_grmode = le32_to_cpu(ms->m_grmode); 79 ms->m_rqmode = le32_to_cpu(ms->m_rqmode); 80 ms->m_bastmode = le32_to_cpu(ms->m_bastmode); 81 ms->m_asts = le32_to_cpu(ms->m_asts); 82 ms->m_result = le32_to_cpu(ms->m_result); 83 } 84 85 static void rcom_lock_out(struct rcom_lock *rl) 86 { 87 rl->rl_ownpid = cpu_to_le32(rl->rl_ownpid); 88 rl->rl_lkid = cpu_to_le32(rl->rl_lkid); 89 rl->rl_remid = cpu_to_le32(rl->rl_remid); 90 rl->rl_parent_lkid = cpu_to_le32(rl->rl_parent_lkid); 91 rl->rl_parent_remid = cpu_to_le32(rl->rl_parent_remid); 92 rl->rl_exflags = cpu_to_le32(rl->rl_exflags); 93 rl->rl_flags = cpu_to_le32(rl->rl_flags); 94 rl->rl_lvbseq = cpu_to_le32(rl->rl_lvbseq); 95 rl->rl_result = cpu_to_le32(rl->rl_result); 96 rl->rl_wait_type = cpu_to_le16(rl->rl_wait_type); 97 rl->rl_namelen = cpu_to_le16(rl->rl_namelen); 98 } 99 100 static void rcom_lock_in(struct rcom_lock *rl) 101 { 102 rl->rl_ownpid = le32_to_cpu(rl->rl_ownpid); 103 rl->rl_lkid = le32_to_cpu(rl->rl_lkid); 104 rl->rl_remid = le32_to_cpu(rl->rl_remid); 105 rl->rl_parent_lkid = le32_to_cpu(rl->rl_parent_lkid); 106 rl->rl_parent_remid = le32_to_cpu(rl->rl_parent_remid); 107 rl->rl_exflags = le32_to_cpu(rl->rl_exflags); 108 rl->rl_flags = le32_to_cpu(rl->rl_flags); 109 rl->rl_lvbseq = le32_to_cpu(rl->rl_lvbseq); 110 rl->rl_result = le32_to_cpu(rl->rl_result); 111 rl->rl_wait_type = le16_to_cpu(rl->rl_wait_type); 112 rl->rl_namelen = le16_to_cpu(rl->rl_namelen); 113 } 114 115 static void rcom_config_out(struct rcom_config *rf) 116 { 117 rf->rf_lvblen = cpu_to_le32(rf->rf_lvblen); 118 rf->rf_lsflags = cpu_to_le32(rf->rf_lsflags); 119 } 120 121 static void rcom_config_in(struct rcom_config *rf) 122 { 123 rf->rf_lvblen = le32_to_cpu(rf->rf_lvblen); 124 rf->rf_lsflags = le32_to_cpu(rf->rf_lsflags); 125 } 126 127 void dlm_rcom_out(struct dlm_rcom *rc) 128 { 129 struct dlm_header *hd = (struct dlm_header *) rc; 130 int type = rc->rc_type; 131 132 header_out(hd); 133 134 rc->rc_type = cpu_to_le32(rc->rc_type); 135 rc->rc_result = cpu_to_le32(rc->rc_result); 136 rc->rc_id = cpu_to_le64(rc->rc_id); 137 rc->rc_seq = cpu_to_le64(rc->rc_seq); 138 rc->rc_seq_reply = cpu_to_le64(rc->rc_seq_reply); 139 140 if (type == DLM_RCOM_LOCK) 141 rcom_lock_out((struct rcom_lock *) rc->rc_buf); 142 143 else if (type == DLM_RCOM_STATUS_REPLY) 144 rcom_config_out((struct rcom_config *) rc->rc_buf); 145 } 146 147 void dlm_rcom_in(struct dlm_rcom *rc) 148 { 149 struct dlm_header *hd = (struct dlm_header *) rc; 150 151 header_in(hd); 152 153 rc->rc_type = le32_to_cpu(rc->rc_type); 154 rc->rc_result = le32_to_cpu(rc->rc_result); 155 rc->rc_id = le64_to_cpu(rc->rc_id); 156 rc->rc_seq = le64_to_cpu(rc->rc_seq); 157 rc->rc_seq_reply = le64_to_cpu(rc->rc_seq_reply); 158 159 if (rc->rc_type == DLM_RCOM_LOCK) 160 rcom_lock_in((struct rcom_lock *) rc->rc_buf); 161 162 else if (rc->rc_type == DLM_RCOM_STATUS_REPLY) 163 rcom_config_in((struct rcom_config *) rc->rc_buf); 164 } 165 166