1 // SPDX-License-Identifier: GPL-2.0-only
2 /******************************************************************************
3 *******************************************************************************
5 ** Copyright (C) 2005-2008 Red Hat, Inc. All rights reserved.
8 *******************************************************************************
9 ******************************************************************************/
11 #include "dlm_internal.h"
15 #define DLM_ERRNO_EDEADLK 35
16 #define DLM_ERRNO_EBADR 53
17 #define DLM_ERRNO_EBADSLT 57
18 #define DLM_ERRNO_EPROTO 71
19 #define DLM_ERRNO_EOPNOTSUPP 95
20 #define DLM_ERRNO_ETIMEDOUT 110
21 #define DLM_ERRNO_EINPROGRESS 115
23 static void header_out(struct dlm_header
*hd
)
25 hd
->h_version
= cpu_to_le32(hd
->h_version
);
26 hd
->h_lockspace
= cpu_to_le32(hd
->h_lockspace
);
27 hd
->h_nodeid
= cpu_to_le32(hd
->h_nodeid
);
28 hd
->h_length
= cpu_to_le16(hd
->h_length
);
31 static void header_in(struct dlm_header
*hd
)
33 hd
->h_version
= le32_to_cpu(hd
->h_version
);
34 hd
->h_lockspace
= le32_to_cpu(hd
->h_lockspace
);
35 hd
->h_nodeid
= le32_to_cpu(hd
->h_nodeid
);
36 hd
->h_length
= le16_to_cpu(hd
->h_length
);
39 /* higher errno values are inconsistent across architectures, so select
40 one set of values for on the wire */
42 static int to_dlm_errno(int err
)
46 return -DLM_ERRNO_EDEADLK
;
48 return -DLM_ERRNO_EBADR
;
50 return -DLM_ERRNO_EBADSLT
;
52 return -DLM_ERRNO_EPROTO
;
54 return -DLM_ERRNO_EOPNOTSUPP
;
56 return -DLM_ERRNO_ETIMEDOUT
;
58 return -DLM_ERRNO_EINPROGRESS
;
63 static int from_dlm_errno(int err
)
66 case -DLM_ERRNO_EDEADLK
:
68 case -DLM_ERRNO_EBADR
:
70 case -DLM_ERRNO_EBADSLT
:
72 case -DLM_ERRNO_EPROTO
:
74 case -DLM_ERRNO_EOPNOTSUPP
:
76 case -DLM_ERRNO_ETIMEDOUT
:
78 case -DLM_ERRNO_EINPROGRESS
:
84 void dlm_message_out(struct dlm_message
*ms
)
86 header_out(&ms
->m_header
);
88 ms
->m_type
= cpu_to_le32(ms
->m_type
);
89 ms
->m_nodeid
= cpu_to_le32(ms
->m_nodeid
);
90 ms
->m_pid
= cpu_to_le32(ms
->m_pid
);
91 ms
->m_lkid
= cpu_to_le32(ms
->m_lkid
);
92 ms
->m_remid
= cpu_to_le32(ms
->m_remid
);
93 ms
->m_parent_lkid
= cpu_to_le32(ms
->m_parent_lkid
);
94 ms
->m_parent_remid
= cpu_to_le32(ms
->m_parent_remid
);
95 ms
->m_exflags
= cpu_to_le32(ms
->m_exflags
);
96 ms
->m_sbflags
= cpu_to_le32(ms
->m_sbflags
);
97 ms
->m_flags
= cpu_to_le32(ms
->m_flags
);
98 ms
->m_lvbseq
= cpu_to_le32(ms
->m_lvbseq
);
99 ms
->m_hash
= cpu_to_le32(ms
->m_hash
);
100 ms
->m_status
= cpu_to_le32(ms
->m_status
);
101 ms
->m_grmode
= cpu_to_le32(ms
->m_grmode
);
102 ms
->m_rqmode
= cpu_to_le32(ms
->m_rqmode
);
103 ms
->m_bastmode
= cpu_to_le32(ms
->m_bastmode
);
104 ms
->m_asts
= cpu_to_le32(ms
->m_asts
);
105 ms
->m_result
= cpu_to_le32(to_dlm_errno(ms
->m_result
));
108 void dlm_message_in(struct dlm_message
*ms
)
110 header_in(&ms
->m_header
);
112 ms
->m_type
= le32_to_cpu(ms
->m_type
);
113 ms
->m_nodeid
= le32_to_cpu(ms
->m_nodeid
);
114 ms
->m_pid
= le32_to_cpu(ms
->m_pid
);
115 ms
->m_lkid
= le32_to_cpu(ms
->m_lkid
);
116 ms
->m_remid
= le32_to_cpu(ms
->m_remid
);
117 ms
->m_parent_lkid
= le32_to_cpu(ms
->m_parent_lkid
);
118 ms
->m_parent_remid
= le32_to_cpu(ms
->m_parent_remid
);
119 ms
->m_exflags
= le32_to_cpu(ms
->m_exflags
);
120 ms
->m_sbflags
= le32_to_cpu(ms
->m_sbflags
);
121 ms
->m_flags
= le32_to_cpu(ms
->m_flags
);
122 ms
->m_lvbseq
= le32_to_cpu(ms
->m_lvbseq
);
123 ms
->m_hash
= le32_to_cpu(ms
->m_hash
);
124 ms
->m_status
= le32_to_cpu(ms
->m_status
);
125 ms
->m_grmode
= le32_to_cpu(ms
->m_grmode
);
126 ms
->m_rqmode
= le32_to_cpu(ms
->m_rqmode
);
127 ms
->m_bastmode
= le32_to_cpu(ms
->m_bastmode
);
128 ms
->m_asts
= le32_to_cpu(ms
->m_asts
);
129 ms
->m_result
= from_dlm_errno(le32_to_cpu(ms
->m_result
));
132 void dlm_rcom_out(struct dlm_rcom
*rc
)
134 header_out(&rc
->rc_header
);
136 rc
->rc_type
= cpu_to_le32(rc
->rc_type
);
137 rc
->rc_result
= cpu_to_le32(rc
->rc_result
);
138 rc
->rc_id
= cpu_to_le64(rc
->rc_id
);
139 rc
->rc_seq
= cpu_to_le64(rc
->rc_seq
);
140 rc
->rc_seq_reply
= cpu_to_le64(rc
->rc_seq_reply
);
143 void dlm_rcom_in(struct dlm_rcom
*rc
)
145 header_in(&rc
->rc_header
);
147 rc
->rc_type
= le32_to_cpu(rc
->rc_type
);
148 rc
->rc_result
= le32_to_cpu(rc
->rc_result
);
149 rc
->rc_id
= le64_to_cpu(rc
->rc_id
);
150 rc
->rc_seq
= le64_to_cpu(rc
->rc_seq
);
151 rc
->rc_seq_reply
= le64_to_cpu(rc
->rc_seq_reply
);