1b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland/*
2b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
33a8a9a1034813aa99f5ae3150f652d490c5ff10dSteven Whitehouse * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
4b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland *
5b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * This copyrighted material is made available to anyone wishing to use,
6b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland * modify, copy, or redistribute it subject to the terms and conditions
7e9fc2aa091ab8fa46e60d4c9d06a89305c441652Steven Whitehouse * of the GNU General Public License version 2.
8b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland */
9b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
10b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#ifndef __UTIL_DOT_H__
11b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define __UTIL_DOT_H__
12b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
13f2f7ba5237e2fe10ba3e328a4f728b9e1ff141daSteven Whitehouse#include "incore.h"
14b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
15b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define fs_printk(level, fs, fmt, arg...) \
16b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	printk(level "GFS2: fsid=%s: " fmt , (fs)->sd_fsname , ## arg)
17b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
18b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define fs_info(fs, fmt, arg...) \
19b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	fs_printk(KERN_INFO , fs , fmt , ## arg)
20b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
21b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define fs_warn(fs, fmt, arg...) \
22b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	fs_printk(KERN_WARNING , fs , fmt , ## arg)
23b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
24b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define fs_err(fs, fmt, arg...) \
25b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	fs_printk(KERN_ERR, fs , fmt , ## arg)
26b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
27b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
28b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandvoid gfs2_assert_i(struct gfs2_sbd *sdp);
29b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
30b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define gfs2_assert(sdp, assertion) \
31b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglanddo { \
32b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	if (unlikely(!(assertion))) { \
33b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland		gfs2_assert_i(sdp); \
341e09ae544eb1a2d11b04c6924f738a310c7a7a2bSteven Whitehouse		BUG(); \
35b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland        } \
36b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland} while (0)
37b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
38b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
39b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandint gfs2_assert_withdraw_i(struct gfs2_sbd *sdp, char *assertion,
40b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland			   const char *function, char *file, unsigned int line);
41b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
42b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define gfs2_assert_withdraw(sdp, assertion) \
43b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland((likely(assertion)) ? 0 : gfs2_assert_withdraw_i((sdp), #assertion, \
448e24eea728068bbeb6a3c500b848f883a20bf225Harvey Harrison					__func__, __FILE__, __LINE__))
45b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
46b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
47b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandint gfs2_assert_warn_i(struct gfs2_sbd *sdp, char *assertion,
48b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland		       const char *function, char *file, unsigned int line);
49b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
50b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define gfs2_assert_warn(sdp, assertion) \
51b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland((likely(assertion)) ? 0 : gfs2_assert_warn_i((sdp), #assertion, \
528e24eea728068bbeb6a3c500b848f883a20bf225Harvey Harrison					__func__, __FILE__, __LINE__))
53b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
54b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
55b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandint gfs2_consist_i(struct gfs2_sbd *sdp, int cluster_wide,
56b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland		   const char *function, char *file, unsigned int line);
57b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
58b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define gfs2_consist(sdp) \
598e24eea728068bbeb6a3c500b848f883a20bf225Harvey Harrisongfs2_consist_i((sdp), 0, __func__, __FILE__, __LINE__)
60b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
61b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
62b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandint gfs2_consist_inode_i(struct gfs2_inode *ip, int cluster_wide,
63b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland			 const char *function, char *file, unsigned int line);
64b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
65b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define gfs2_consist_inode(ip) \
668e24eea728068bbeb6a3c500b848f883a20bf225Harvey Harrisongfs2_consist_inode_i((ip), 0, __func__, __FILE__, __LINE__)
67b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
68b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
69b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandint gfs2_consist_rgrpd_i(struct gfs2_rgrpd *rgd, int cluster_wide,
70b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland			 const char *function, char *file, unsigned int line);
71b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
72b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define gfs2_consist_rgrpd(rgd) \
738e24eea728068bbeb6a3c500b848f883a20bf225Harvey Harrisongfs2_consist_rgrpd_i((rgd), 0, __func__, __FILE__, __LINE__)
74b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
75b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
76b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandint gfs2_meta_check_ii(struct gfs2_sbd *sdp, struct buffer_head *bh,
77b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland		       const char *type, const char *function,
78b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland		       char *file, unsigned int line);
79b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
80b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandstatic inline int gfs2_meta_check_i(struct gfs2_sbd *sdp,
81b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland				    struct buffer_head *bh,
82b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland				    const char *function,
83b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland				    char *file, unsigned int line)
84b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland{
85b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	struct gfs2_meta_header *mh = (struct gfs2_meta_header *)bh->b_data;
86b44b84d765b02f813a67b96bf79e3b5d4d621631Al Viro	u32 magic = be32_to_cpu(mh->mh_magic);
87b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	if (unlikely(magic != GFS2_MAGIC))
88b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland		return gfs2_meta_check_ii(sdp, bh, "magic number", function,
89b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland					  file, line);
90b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	return 0;
91b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland}
92b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
93b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define gfs2_meta_check(sdp, bh) \
948e24eea728068bbeb6a3c500b848f883a20bf225Harvey Harrisongfs2_meta_check_i((sdp), (bh), __func__, __FILE__, __LINE__)
95b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
96b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
97b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandint gfs2_metatype_check_ii(struct gfs2_sbd *sdp, struct buffer_head *bh,
98cd915493fce912f1bd838ee1250737ecf33b8faeSteven Whitehouse			   u16 type, u16 t,
99b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland			   const char *function,
100b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland			   char *file, unsigned int line);
101b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
102b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandstatic inline int gfs2_metatype_check_i(struct gfs2_sbd *sdp,
103b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland					struct buffer_head *bh,
104cd915493fce912f1bd838ee1250737ecf33b8faeSteven Whitehouse					u16 type,
105b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland					const char *function,
106b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland					char *file, unsigned int line)
107b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland{
108b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	struct gfs2_meta_header *mh = (struct gfs2_meta_header *)bh->b_data;
109b44b84d765b02f813a67b96bf79e3b5d4d621631Al Viro	u32 magic = be32_to_cpu(mh->mh_magic);
110cd915493fce912f1bd838ee1250737ecf33b8faeSteven Whitehouse	u16 t = be32_to_cpu(mh->mh_type);
111b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	if (unlikely(magic != GFS2_MAGIC))
112b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland		return gfs2_meta_check_ii(sdp, bh, "magic number", function,
113b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland					  file, line);
114b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland        if (unlikely(t != type))
115b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland		return gfs2_metatype_check_ii(sdp, bh, type, t, function,
116b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland					      file, line);
117b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	return 0;
118b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland}
119b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
120b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define gfs2_metatype_check(sdp, bh, type) \
1218e24eea728068bbeb6a3c500b848f883a20bf225Harvey Harrisongfs2_metatype_check_i((sdp), (bh), (type), __func__, __FILE__, __LINE__)
122b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
123cd915493fce912f1bd838ee1250737ecf33b8faeSteven Whitehousestatic inline void gfs2_metatype_set(struct buffer_head *bh, u16 type,
124cd915493fce912f1bd838ee1250737ecf33b8faeSteven Whitehouse				     u16 format)
125b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland{
126b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	struct gfs2_meta_header *mh;
127b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	mh = (struct gfs2_meta_header *)bh->b_data;
128e3167ded1f1b16424bc14d5673cdc5414f179970Steven Whitehouse	mh->mh_type = cpu_to_be32(type);
129e3167ded1f1b16424bc14d5673cdc5414f179970Steven Whitehouse	mh->mh_format = cpu_to_be32(format);
130b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland}
131b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
132b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
133b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandint gfs2_io_error_i(struct gfs2_sbd *sdp, const char *function,
134b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland		    char *file, unsigned int line);
135b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
136b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define gfs2_io_error(sdp) \
1378e24eea728068bbeb6a3c500b848f883a20bf225Harvey Harrisongfs2_io_error_i((sdp), __func__, __FILE__, __LINE__);
138b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
139b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
140b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandint gfs2_io_error_bh_i(struct gfs2_sbd *sdp, struct buffer_head *bh,
141b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland		       const char *function, char *file, unsigned int line);
142b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
143b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define gfs2_io_error_bh(sdp, bh) \
1448e24eea728068bbeb6a3c500b848f883a20bf225Harvey Harrisongfs2_io_error_bh_i((sdp), (bh), __func__, __FILE__, __LINE__);
145b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
146b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
147e18b890bb0881bbab6f4f1a6cd20d9c60d66b003Christoph Lameterextern struct kmem_cache *gfs2_glock_cachep;
148009d851837ab26cab18adda6169a813f70b0b21bSteven Whitehouseextern struct kmem_cache *gfs2_glock_aspace_cachep;
149e18b890bb0881bbab6f4f1a6cd20d9c60d66b003Christoph Lameterextern struct kmem_cache *gfs2_inode_cachep;
150e18b890bb0881bbab6f4f1a6cd20d9c60d66b003Christoph Lameterextern struct kmem_cache *gfs2_bufdata_cachep;
1516bdd9be628fa5f4dd14eb89ebddc12840d684277Bob Petersonextern struct kmem_cache *gfs2_rgrpd_cachep;
15237b2c8377c98acb60cf4d0126e385ef2153bded9Steven Whitehouseextern struct kmem_cache *gfs2_quotad_cachep;
153b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
154b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandstatic inline unsigned int gfs2_tune_get_i(struct gfs2_tune *gt,
155b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland					   unsigned int *p)
156b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland{
157b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	unsigned int x;
158b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	spin_lock(&gt->gt_spin);
159b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	x = *p;
160b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	spin_unlock(&gt->gt_spin);
161b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland	return x;
162b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland}
163b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
164b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#define gfs2_tune_get(sdp, field) \
165b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandgfs2_tune_get_i(&(sdp)->sd_tune, &(sdp)->sd_tune.field)
166b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
167b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teiglandvoid gfs2_icbit_munge(struct gfs2_sbd *sdp, unsigned char **bitmap,
168b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland		      unsigned int bit, int new_value);
169da755fdb414470d6dce3df12ad188de9131cf96cSteven Whitehouseint gfs2_lm_withdraw(struct gfs2_sbd *sdp, char *fmt, ...);
170b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
171b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland#endif /* __UTIL_DOT_H__ */
172b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland
173