Merge branch 'for-linus' of git://oss.sgi.com:8090/xfs/xfs-2.6
[linux-2.6] / fs / dlm / util.c
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