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_spin); 159b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland x = *p; 160b3b94faa5fe5968827ba0640ee9fba4b3e7f736eDavid Teigland spin_unlock(>->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