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 void dlm_rcom_out(struct dlm_rcom
*rc
)
136 header_out(&rc
->rc_header
);
138 rc
->rc_type
= cpu_to_le32(rc
->rc_type
);
139 rc
->rc_result
= cpu_to_le32(rc
->rc_result
);
140 rc
->rc_id
= cpu_to_le64(rc
->rc_id
);
141 rc
->rc_seq
= cpu_to_le64(rc
->rc_seq
);
142 rc
->rc_seq_reply
= cpu_to_le64(rc
->rc_seq_reply
);
145 void dlm_rcom_in(struct dlm_rcom
*rc
)
147 header_in(&rc
->rc_header
);
149 rc
->rc_type
= le32_to_cpu(rc
->rc_type
);
150 rc
->rc_result
= le32_to_cpu(rc
->rc_result
);
151 rc
->rc_id
= le64_to_cpu(rc
->rc_id
);
152 rc
->rc_seq
= le64_to_cpu(rc
->rc_seq
);
153 rc
->rc_seq_reply
= le64_to_cpu(rc
->rc_seq_reply
);