1 /******************************************************************************
2 *******************************************************************************
4 ** Copyright (C) 2005-2008 Red Hat, Inc. All rights reserved.
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.
10 *******************************************************************************
11 ******************************************************************************/
13 #include "dlm_internal.h"
17 #define DLM_ERRNO_EDEADLK 35
18 #define DLM_ERRNO_EBADR 53
19 #define DLM_ERRNO_EBADSLT 57
20 #define DLM_ERRNO_EPROTO 71
21 #define DLM_ERRNO_EOPNOTSUPP 95
22 #define DLM_ERRNO_ETIMEDOUT 110
23 #define DLM_ERRNO_EINPROGRESS 115
25 static void header_out(struct dlm_header
*hd
)
27 hd
->h_version
= cpu_to_le32(hd
->h_version
);
28 hd
->h_lockspace
= cpu_to_le32(hd
->h_lockspace
);
29 hd
->h_nodeid
= cpu_to_le32(hd
->h_nodeid
);
30 hd
->h_length
= cpu_to_le16(hd
->h_length
);
33 static void header_in(struct dlm_header
*hd
)
35 hd
->h_version
= le32_to_cpu(hd
->h_version
);
36 hd
->h_lockspace
= le32_to_cpu(hd
->h_lockspace
);
37 hd
->h_nodeid
= le32_to_cpu(hd
->h_nodeid
);
38 hd
->h_length
= le16_to_cpu(hd
->h_length
);
41 /* higher errno values are inconsistent across architectures, so select
42 one set of values for on the wire */
44 static int to_dlm_errno(int err
)
48 return -DLM_ERRNO_EDEADLK
;
50 return -DLM_ERRNO_EBADR
;
52 return -DLM_ERRNO_EBADSLT
;
54 return -DLM_ERRNO_EPROTO
;
56 return -DLM_ERRNO_EOPNOTSUPP
;
58 return -DLM_ERRNO_ETIMEDOUT
;
60 return -DLM_ERRNO_EINPROGRESS
;
65 static int from_dlm_errno(int err
)
68 case -DLM_ERRNO_EDEADLK
:
70 case -DLM_ERRNO_EBADR
:
72 case -DLM_ERRNO_EBADSLT
:
74 case -DLM_ERRNO_EPROTO
:
76 case -DLM_ERRNO_EOPNOTSUPP
:
78 case -DLM_ERRNO_ETIMEDOUT
:
80 case -DLM_ERRNO_EINPROGRESS
:
86 void dlm_message_out(struct dlm_message
*ms
)
88 header_out(&ms
->m_header
);
90 ms
->m_type
= cpu_to_le32(ms
->m_type
);
91 ms
->m_nodeid
= cpu_to_le32(ms
->m_nodeid
);
92 ms
->m_pid
= cpu_to_le32(ms
->m_pid
);
93 ms
->m_lkid
= cpu_to_le32(ms
->m_lkid
);
94 ms
->m_remid
= cpu_to_le32(ms
->m_remid
);
95 ms
->m_parent_lkid
= cpu_to_le32(ms
->m_parent_lkid
);
96 ms
->m_parent_remid
= cpu_to_le32(ms
->m_parent_remid
);
97 ms
->m_exflags
= cpu_to_le32(ms
->m_exflags
);
98 ms
->m_sbflags
= cpu_to_le32(ms
->m_sbflags
);
99 ms
->m_flags
= cpu_to_le32(ms
->m_flags
);
100 ms
->m_lvbseq
= cpu_to_le32(ms
->m_lvbseq
);
101 ms
->m_hash
= cpu_to_le32(ms
->m_hash
);
102 ms
->m_status
= cpu_to_le32(ms
->m_status
);
103 ms
->m_grmode
= cpu_to_le32(ms
->m_grmode
);
104 ms
->m_rqmode
= cpu_to_le32(ms
->m_rqmode
);
105 ms
->m_bastmode
= cpu_to_le32(ms
->m_bastmode
);
106 ms
->m_asts
= cpu_to_le32(ms
->m_asts
);
107 ms
->m_result
= cpu_to_le32(to_dlm_errno(ms
->m_result
));
110 void dlm_message_in(struct dlm_message
*ms
)
112 header_in(&ms
->m_header
);
114 ms
->m_type
= le32_to_cpu(ms
->m_type
);
115 ms
->m_nodeid
= le32_to_cpu(ms
->m_nodeid
);
116 ms
->m_pid
= le32_to_cpu(ms
->m_pid
);
117 ms
->m_lkid
= le32_to_cpu(ms
->m_lkid
);
118 ms
->m_remid
= le32_to_cpu(ms
->m_remid
);
119 ms
->m_parent_lkid
= le32_to_cpu(ms
->m_parent_lkid
);
120 ms
->m_parent_remid
= le32_to_cpu(ms
->m_parent_remid
);
121 ms
->m_exflags
= le32_to_cpu(ms
->m_exflags
);
122 ms
->m_sbflags
= le32_to_cpu(ms
->m_sbflags
);
123 ms
->m_flags
= le32_to_cpu(ms
->m_flags
);
124 ms
->m_lvbseq
= le32_to_cpu(ms
->m_lvbseq
);
125 ms
->m_hash
= le32_to_cpu(ms
->m_hash
);
126 ms
->m_status
= le32_to_cpu(ms
->m_status
);
127 ms
->m_grmode
= le32_to_cpu(ms
->m_grmode
);
128 ms
->m_rqmode
= le32_to_cpu(ms
->m_rqmode
);
129 ms
->m_bastmode
= le32_to_cpu(ms
->m_bastmode
);
130 ms
->m_asts
= le32_to_cpu(ms
->m_asts
);
131 ms
->m_result
= from_dlm_errno(le32_to_cpu(ms
->m_result
));
134 static void rcom_lock_out(struct rcom_lock
*rl
)
136 rl
->rl_ownpid
= cpu_to_le32(rl
->rl_ownpid
);
137 rl
->rl_lkid
= cpu_to_le32(rl
->rl_lkid
);
138 rl
->rl_remid
= cpu_to_le32(rl
->rl_remid
);
139 rl
->rl_parent_lkid
= cpu_to_le32(rl
->rl_parent_lkid
);
140 rl
->rl_parent_remid
= cpu_to_le32(rl
->rl_parent_remid
);
141 rl
->rl_exflags
= cpu_to_le32(rl
->rl_exflags
);
142 rl
->rl_flags
= cpu_to_le32(rl
->rl_flags
);
143 rl
->rl_lvbseq
= cpu_to_le32(rl
->rl_lvbseq
);
144 rl
->rl_result
= cpu_to_le32(rl
->rl_result
);
145 rl
->rl_wait_type
= cpu_to_le16(rl
->rl_wait_type
);
146 rl
->rl_namelen
= cpu_to_le16(rl
->rl_namelen
);
149 static void rcom_lock_in(struct rcom_lock
*rl
)
151 rl
->rl_ownpid
= le32_to_cpu(rl
->rl_ownpid
);
152 rl
->rl_lkid
= le32_to_cpu(rl
->rl_lkid
);
153 rl
->rl_remid
= le32_to_cpu(rl
->rl_remid
);
154 rl
->rl_parent_lkid
= le32_to_cpu(rl
->rl_parent_lkid
);
155 rl
->rl_parent_remid
= le32_to_cpu(rl
->rl_parent_remid
);
156 rl
->rl_exflags
= le32_to_cpu(rl
->rl_exflags
);
157 rl
->rl_flags
= le32_to_cpu(rl
->rl_flags
);
158 rl
->rl_lvbseq
= le32_to_cpu(rl
->rl_lvbseq
);
159 rl
->rl_result
= le32_to_cpu(rl
->rl_result
);
160 rl
->rl_wait_type
= le16_to_cpu(rl
->rl_wait_type
);
161 rl
->rl_namelen
= le16_to_cpu(rl
->rl_namelen
);
164 static void rcom_config_out(struct rcom_config
*rf
)
166 rf
->rf_lvblen
= cpu_to_le32(rf
->rf_lvblen
);
167 rf
->rf_lsflags
= cpu_to_le32(rf
->rf_lsflags
);
170 static void rcom_config_in(struct rcom_config
*rf
)
172 rf
->rf_lvblen
= le32_to_cpu(rf
->rf_lvblen
);
173 rf
->rf_lsflags
= le32_to_cpu(rf
->rf_lsflags
);
176 void dlm_rcom_out(struct dlm_rcom
*rc
)
178 int type
= rc
->rc_type
;
180 header_out(&rc
->rc_header
);
182 rc
->rc_type
= cpu_to_le32(rc
->rc_type
);
183 rc
->rc_result
= cpu_to_le32(rc
->rc_result
);
184 rc
->rc_id
= cpu_to_le64(rc
->rc_id
);
185 rc
->rc_seq
= cpu_to_le64(rc
->rc_seq
);
186 rc
->rc_seq_reply
= cpu_to_le64(rc
->rc_seq_reply
);
188 if ((type
== DLM_RCOM_LOCK
) || (type
== DLM_RCOM_LOCK_REPLY
))
189 rcom_lock_out((struct rcom_lock
*) rc
->rc_buf
);
191 else if (type
== DLM_RCOM_STATUS_REPLY
)
192 rcom_config_out((struct rcom_config
*) rc
->rc_buf
);
195 void dlm_rcom_in(struct dlm_rcom
*rc
)
199 header_in(&rc
->rc_header
);
201 rc
->rc_type
= le32_to_cpu(rc
->rc_type
);
202 rc
->rc_result
= le32_to_cpu(rc
->rc_result
);
203 rc
->rc_id
= le64_to_cpu(rc
->rc_id
);
204 rc
->rc_seq
= le64_to_cpu(rc
->rc_seq
);
205 rc
->rc_seq_reply
= le64_to_cpu(rc
->rc_seq_reply
);
209 if ((type
== DLM_RCOM_LOCK
) || (type
== DLM_RCOM_LOCK_REPLY
))
210 rcom_lock_in((struct rcom_lock
*) rc
->rc_buf
);
212 else if (type
== DLM_RCOM_STATUS_REPLY
)
213 rcom_config_in((struct rcom_config
*) rc
->rc_buf
);
This page took 0.039143 seconds and 6 git commands to generate.