2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
3 * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
5 * This copyrighted material is made available to anyone wishing to use,
6 * modify, copy, or redistribute it subject to the terms and conditions
7 * of the GNU General Public License version 2.
10 #include <linux/sched.h>
11 #include <linux/slab.h>
12 #include <linux/spinlock.h>
13 #include <linux/completion.h>
14 #include <linux/buffer_head.h>
17 #include <linux/gfs2_ondisk.h>
18 #include <linux/lm_interface.h>
21 #define pv(struct, member, fmt) printk(KERN_INFO " "#member" = "fmt"\n", \
25 * gfs2_xxx_in - read in an xxx struct
26 * first arg: the cpu-order structure
27 * buf: the disk-order buffer
29 * gfs2_xxx_out - write out an xxx struct
30 * first arg: the cpu-order structure
31 * buf: the disk-order buffer
33 * gfs2_xxx_print - print out an xxx struct
34 * first arg: the cpu-order structure
37 void gfs2_inum_in(struct gfs2_inum_host
*no
, const void *buf
)
39 const struct gfs2_inum
*str
= buf
;
41 no
->no_formal_ino
= be64_to_cpu(str
->no_formal_ino
);
42 no
->no_addr
= be64_to_cpu(str
->no_addr
);
45 void gfs2_inum_out(const struct gfs2_inum_host
*no
, void *buf
)
47 struct gfs2_inum
*str
= buf
;
49 str
->no_formal_ino
= cpu_to_be64(no
->no_formal_ino
);
50 str
->no_addr
= cpu_to_be64(no
->no_addr
);
53 static void gfs2_inum_print(const struct gfs2_inum_host
*no
)
55 printk(KERN_INFO
" no_formal_ino = %llu\n", (unsigned long long)no
->no_formal_ino
);
56 printk(KERN_INFO
" no_addr = %llu\n", (unsigned long long)no
->no_addr
);
59 void gfs2_meta_header_in(struct gfs2_meta_header_host
*mh
, const void *buf
)
61 const struct gfs2_meta_header
*str
= buf
;
63 mh
->mh_magic
= be32_to_cpu(str
->mh_magic
);
64 mh
->mh_type
= be32_to_cpu(str
->mh_type
);
65 mh
->mh_format
= be32_to_cpu(str
->mh_format
);
68 static void gfs2_meta_header_out(const struct gfs2_meta_header_host
*mh
, void *buf
)
70 struct gfs2_meta_header
*str
= buf
;
72 str
->mh_magic
= cpu_to_be32(mh
->mh_magic
);
73 str
->mh_type
= cpu_to_be32(mh
->mh_type
);
74 str
->mh_format
= cpu_to_be32(mh
->mh_format
);
77 static void gfs2_meta_header_print(const struct gfs2_meta_header_host
*mh
)
79 pv(mh
, mh_magic
, "0x%.8X");
80 pv(mh
, mh_type
, "%u");
81 pv(mh
, mh_format
, "%u");
84 void gfs2_sb_in(struct gfs2_sb_host
*sb
, const void *buf
)
86 const struct gfs2_sb
*str
= buf
;
88 gfs2_meta_header_in(&sb
->sb_header
, buf
);
90 sb
->sb_fs_format
= be32_to_cpu(str
->sb_fs_format
);
91 sb
->sb_multihost_format
= be32_to_cpu(str
->sb_multihost_format
);
92 sb
->sb_bsize
= be32_to_cpu(str
->sb_bsize
);
93 sb
->sb_bsize_shift
= be32_to_cpu(str
->sb_bsize_shift
);
95 gfs2_inum_in(&sb
->sb_master_dir
, (char *)&str
->sb_master_dir
);
96 gfs2_inum_in(&sb
->sb_root_dir
, (char *)&str
->sb_root_dir
);
98 memcpy(sb
->sb_lockproto
, str
->sb_lockproto
, GFS2_LOCKNAME_LEN
);
99 memcpy(sb
->sb_locktable
, str
->sb_locktable
, GFS2_LOCKNAME_LEN
);
102 void gfs2_rindex_in(struct gfs2_rindex_host
*ri
, const void *buf
)
104 const struct gfs2_rindex
*str
= buf
;
106 ri
->ri_addr
= be64_to_cpu(str
->ri_addr
);
107 ri
->ri_length
= be32_to_cpu(str
->ri_length
);
108 ri
->ri_data0
= be64_to_cpu(str
->ri_data0
);
109 ri
->ri_data
= be32_to_cpu(str
->ri_data
);
110 ri
->ri_bitbytes
= be32_to_cpu(str
->ri_bitbytes
);
114 void gfs2_rindex_print(const struct gfs2_rindex_host
*ri
)
116 printk(KERN_INFO
" ri_addr = %llu\n", (unsigned long long)ri
->ri_addr
);
117 pv(ri
, ri_length
, "%u");
119 printk(KERN_INFO
" ri_data0 = %llu\n", (unsigned long long)ri
->ri_data0
);
120 pv(ri
, ri_data
, "%u");
122 pv(ri
, ri_bitbytes
, "%u");
125 void gfs2_rgrp_in(struct gfs2_rgrp_host
*rg
, const void *buf
)
127 const struct gfs2_rgrp
*str
= buf
;
129 gfs2_meta_header_in(&rg
->rg_header
, buf
);
130 rg
->rg_flags
= be32_to_cpu(str
->rg_flags
);
131 rg
->rg_free
= be32_to_cpu(str
->rg_free
);
132 rg
->rg_dinodes
= be32_to_cpu(str
->rg_dinodes
);
133 rg
->rg_igeneration
= be64_to_cpu(str
->rg_igeneration
);
136 void gfs2_rgrp_out(const struct gfs2_rgrp_host
*rg
, void *buf
)
138 struct gfs2_rgrp
*str
= buf
;
140 gfs2_meta_header_out(&rg
->rg_header
, buf
);
141 str
->rg_flags
= cpu_to_be32(rg
->rg_flags
);
142 str
->rg_free
= cpu_to_be32(rg
->rg_free
);
143 str
->rg_dinodes
= cpu_to_be32(rg
->rg_dinodes
);
144 str
->__pad
= cpu_to_be32(0);
145 str
->rg_igeneration
= cpu_to_be64(rg
->rg_igeneration
);
146 memset(&str
->rg_reserved
, 0, sizeof(str
->rg_reserved
));
149 void gfs2_quota_in(struct gfs2_quota_host
*qu
, const void *buf
)
151 const struct gfs2_quota
*str
= buf
;
153 qu
->qu_limit
= be64_to_cpu(str
->qu_limit
);
154 qu
->qu_warn
= be64_to_cpu(str
->qu_warn
);
155 qu
->qu_value
= be64_to_cpu(str
->qu_value
);
158 void gfs2_dinode_out(const struct gfs2_inode
*ip
, void *buf
)
160 const struct gfs2_dinode_host
*di
= &ip
->i_di
;
161 struct gfs2_dinode
*str
= buf
;
163 gfs2_meta_header_out(&di
->di_header
, buf
);
164 gfs2_inum_out(&di
->di_num
, (char *)&str
->di_num
);
166 str
->di_mode
= cpu_to_be32(di
->di_mode
);
167 str
->di_uid
= cpu_to_be32(di
->di_uid
);
168 str
->di_gid
= cpu_to_be32(di
->di_gid
);
169 str
->di_nlink
= cpu_to_be32(di
->di_nlink
);
170 str
->di_size
= cpu_to_be64(di
->di_size
);
171 str
->di_blocks
= cpu_to_be64(di
->di_blocks
);
172 str
->di_atime
= cpu_to_be64(di
->di_atime
);
173 str
->di_mtime
= cpu_to_be64(di
->di_mtime
);
174 str
->di_ctime
= cpu_to_be64(di
->di_ctime
);
175 str
->di_major
= cpu_to_be32(di
->di_major
);
176 str
->di_minor
= cpu_to_be32(di
->di_minor
);
178 str
->di_goal_meta
= cpu_to_be64(di
->di_goal_meta
);
179 str
->di_goal_data
= cpu_to_be64(di
->di_goal_data
);
180 str
->di_generation
= cpu_to_be64(di
->di_generation
);
182 str
->di_flags
= cpu_to_be32(di
->di_flags
);
183 str
->di_payload_format
= cpu_to_be32(di
->di_payload_format
);
184 str
->di_height
= cpu_to_be16(di
->di_height
);
186 str
->di_depth
= cpu_to_be16(di
->di_depth
);
187 str
->di_entries
= cpu_to_be32(di
->di_entries
);
189 str
->di_eattr
= cpu_to_be64(di
->di_eattr
);
193 void gfs2_dinode_print(const struct gfs2_inode
*ip
)
195 const struct gfs2_dinode_host
*di
= &ip
->i_di
;
197 gfs2_meta_header_print(&di
->di_header
);
198 gfs2_inum_print(&di
->di_num
);
200 pv(di
, di_mode
, "0%o");
201 pv(di
, di_uid
, "%u");
202 pv(di
, di_gid
, "%u");
203 pv(di
, di_nlink
, "%u");
204 printk(KERN_INFO
" di_size = %llu\n", (unsigned long long)di
->di_size
);
205 printk(KERN_INFO
" di_blocks = %llu\n", (unsigned long long)di
->di_blocks
);
206 printk(KERN_INFO
" di_atime = %lld\n", (long long)di
->di_atime
);
207 printk(KERN_INFO
" di_mtime = %lld\n", (long long)di
->di_mtime
);
208 printk(KERN_INFO
" di_ctime = %lld\n", (long long)di
->di_ctime
);
209 pv(di
, di_major
, "%u");
210 pv(di
, di_minor
, "%u");
212 printk(KERN_INFO
" di_goal_meta = %llu\n", (unsigned long long)di
->di_goal_meta
);
213 printk(KERN_INFO
" di_goal_data = %llu\n", (unsigned long long)di
->di_goal_data
);
215 pv(di
, di_flags
, "0x%.8X");
216 pv(di
, di_payload_format
, "%u");
217 pv(di
, di_height
, "%u");
219 pv(di
, di_depth
, "%u");
220 pv(di
, di_entries
, "%u");
222 printk(KERN_INFO
" di_eattr = %llu\n", (unsigned long long)di
->di_eattr
);
225 void gfs2_log_header_in(struct gfs2_log_header_host
*lh
, const void *buf
)
227 const struct gfs2_log_header
*str
= buf
;
229 gfs2_meta_header_in(&lh
->lh_header
, buf
);
230 lh
->lh_sequence
= be64_to_cpu(str
->lh_sequence
);
231 lh
->lh_flags
= be32_to_cpu(str
->lh_flags
);
232 lh
->lh_tail
= be32_to_cpu(str
->lh_tail
);
233 lh
->lh_blkno
= be32_to_cpu(str
->lh_blkno
);
234 lh
->lh_hash
= be32_to_cpu(str
->lh_hash
);
237 void gfs2_inum_range_in(struct gfs2_inum_range_host
*ir
, const void *buf
)
239 const struct gfs2_inum_range
*str
= buf
;
241 ir
->ir_start
= be64_to_cpu(str
->ir_start
);
242 ir
->ir_length
= be64_to_cpu(str
->ir_length
);
245 void gfs2_inum_range_out(const struct gfs2_inum_range_host
*ir
, void *buf
)
247 struct gfs2_inum_range
*str
= buf
;
249 str
->ir_start
= cpu_to_be64(ir
->ir_start
);
250 str
->ir_length
= cpu_to_be64(ir
->ir_length
);
253 void gfs2_statfs_change_in(struct gfs2_statfs_change_host
*sc
, const void *buf
)
255 const struct gfs2_statfs_change
*str
= buf
;
257 sc
->sc_total
= be64_to_cpu(str
->sc_total
);
258 sc
->sc_free
= be64_to_cpu(str
->sc_free
);
259 sc
->sc_dinodes
= be64_to_cpu(str
->sc_dinodes
);
262 void gfs2_statfs_change_out(const struct gfs2_statfs_change_host
*sc
, void *buf
)
264 struct gfs2_statfs_change
*str
= buf
;
266 str
->sc_total
= cpu_to_be64(sc
->sc_total
);
267 str
->sc_free
= cpu_to_be64(sc
->sc_free
);
268 str
->sc_dinodes
= cpu_to_be64(sc
->sc_dinodes
);
271 void gfs2_quota_change_in(struct gfs2_quota_change_host
*qc
, const void *buf
)
273 const struct gfs2_quota_change
*str
= buf
;
275 qc
->qc_change
= be64_to_cpu(str
->qc_change
);
276 qc
->qc_flags
= be32_to_cpu(str
->qc_flags
);
277 qc
->qc_id
= be32_to_cpu(str
->qc_id
);