1/* 2 * Copyright (c) 2000-2003,2005 Silicon Graphics, Inc. 3 * All Rights Reserved. 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it would be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write the Free Software Foundation, 16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18#include "xfs.h" 19#include "xfs_fs.h" 20#include "xfs_types.h" 21#include "xfs_inum.h" 22#include "xfs_dir.h" 23#include "xfs_dir2.h" 24#include "xfs_da_btree.h" 25#include "xfs_bmap_btree.h" 26#include "xfs_dir_sf.h" 27#include "xfs_dir2_sf.h" 28#include "xfs_attr_sf.h" 29#include "xfs_dinode.h" 30#include "xfs_inode.h" 31#include "xfs_dir2_trace.h" 32 33#ifdef XFS_DIR2_TRACE 34ktrace_t *xfs_dir2_trace_buf; 35 36/* 37 * Enter something in the trace buffers. 38 */ 39static void 40xfs_dir2_trace_enter( 41 xfs_inode_t *dp, 42 int type, 43 char *where, 44 char *name, 45 int namelen, 46 void *a0, 47 void *a1, 48 void *a2, 49 void *a3, 50 void *a4, 51 void *a5, 52 void *a6, 53 void *a7) 54{ 55 void *n[5]; 56 57 ASSERT(xfs_dir2_trace_buf); 58 ASSERT(dp->i_dir_trace); 59 if (name) 60 memcpy(n, name, min((int)sizeof(n), namelen)); 61 else 62 memset((char *)n, 0, sizeof(n)); 63 ktrace_enter(xfs_dir2_trace_buf, 64 (void *)(long)type, (void *)where, 65 (void *)a0, (void *)a1, (void *)a2, (void *)a3, 66 (void *)a4, (void *)a5, (void *)a6, (void *)a7, 67 (void *)(long)namelen, 68 (void *)n[0], (void *)n[1], (void *)n[2], 69 (void *)n[3], (void *)n[4]); 70 ktrace_enter(dp->i_dir_trace, 71 (void *)(long)type, (void *)where, 72 (void *)a0, (void *)a1, (void *)a2, (void *)a3, 73 (void *)a4, (void *)a5, (void *)a6, (void *)a7, 74 (void *)(long)namelen, 75 (void *)n[0], (void *)n[1], (void *)n[2], 76 (void *)n[3], (void *)n[4]); 77} 78 79void 80xfs_dir2_trace_args( 81 char *where, 82 xfs_da_args_t *args) 83{ 84 xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS, where, 85 (char *)args->name, (int)args->namelen, 86 (void *)(unsigned long)args->hashval, 87 (void *)((unsigned long)(args->inumber >> 32)), 88 (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), 89 (void *)args->dp, (void *)args->trans, 90 (void *)(unsigned long)args->justcheck, NULL, NULL); 91} 92 93void 94xfs_dir2_trace_args_b( 95 char *where, 96 xfs_da_args_t *args, 97 xfs_dabuf_t *bp) 98{ 99 xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_B, where, 100 (char *)args->name, (int)args->namelen, 101 (void *)(unsigned long)args->hashval, 102 (void *)((unsigned long)(args->inumber >> 32)), 103 (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), 104 (void *)args->dp, (void *)args->trans, 105 (void *)(unsigned long)args->justcheck, 106 (void *)(bp ? bp->bps[0] : NULL), NULL); 107} 108 109void 110xfs_dir2_trace_args_bb( 111 char *where, 112 xfs_da_args_t *args, 113 xfs_dabuf_t *lbp, 114 xfs_dabuf_t *dbp) 115{ 116 xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_BB, where, 117 (char *)args->name, (int)args->namelen, 118 (void *)(unsigned long)args->hashval, 119 (void *)((unsigned long)(args->inumber >> 32)), 120 (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), 121 (void *)args->dp, (void *)args->trans, 122 (void *)(unsigned long)args->justcheck, 123 (void *)(lbp ? lbp->bps[0] : NULL), 124 (void *)(dbp ? dbp->bps[0] : NULL)); 125} 126 127void 128xfs_dir2_trace_args_bibii( 129 char *where, 130 xfs_da_args_t *args, 131 xfs_dabuf_t *bs, 132 int ss, 133 xfs_dabuf_t *bd, 134 int sd, 135 int c) 136{ 137 xfs_buf_t *bpbs = bs ? bs->bps[0] : NULL; 138 xfs_buf_t *bpbd = bd ? bd->bps[0] : NULL; 139 140 xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_BIBII, where, 141 (char *)args->name, (int)args->namelen, 142 (void *)args->dp, (void *)args->trans, 143 (void *)bpbs, (void *)(long)ss, (void *)bpbd, (void *)(long)sd, 144 (void *)(long)c, NULL); 145} 146 147void 148xfs_dir2_trace_args_db( 149 char *where, 150 xfs_da_args_t *args, 151 xfs_dir2_db_t db, 152 xfs_dabuf_t *bp) 153{ 154 xfs_buf_t *dbp = bp ? bp->bps[0] : NULL; 155 156 xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_DB, where, 157 (char *)args->name, (int)args->namelen, 158 (void *)(unsigned long)args->hashval, 159 (void *)((unsigned long)(args->inumber >> 32)), 160 (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), 161 (void *)args->dp, (void *)args->trans, 162 (void *)(unsigned long)args->justcheck, (void *)(long)db, 163 (void *)dbp); 164} 165 166void 167xfs_dir2_trace_args_i( 168 char *where, 169 xfs_da_args_t *args, 170 xfs_ino_t i) 171{ 172 xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_I, where, 173 (char *)args->name, (int)args->namelen, 174 (void *)(unsigned long)args->hashval, 175 (void *)((unsigned long)(args->inumber >> 32)), 176 (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), 177 (void *)args->dp, (void *)args->trans, 178 (void *)(unsigned long)args->justcheck, 179 (void *)((unsigned long)(i >> 32)), 180 (void *)((unsigned long)(i & 0xFFFFFFFF))); 181} 182 183void 184xfs_dir2_trace_args_s( 185 char *where, 186 xfs_da_args_t *args, 187 int s) 188{ 189 xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_S, where, 190 (char *)args->name, (int)args->namelen, 191 (void *)(unsigned long)args->hashval, 192 (void *)((unsigned long)(args->inumber >> 32)), 193 (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), 194 (void *)args->dp, (void *)args->trans, 195 (void *)(unsigned long)args->justcheck, (void *)(long)s, NULL); 196} 197 198void 199xfs_dir2_trace_args_sb( 200 char *where, 201 xfs_da_args_t *args, 202 int s, 203 xfs_dabuf_t *bp) 204{ 205 xfs_buf_t *dbp = bp ? bp->bps[0] : NULL; 206 207 xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_SB, where, 208 (char *)args->name, (int)args->namelen, 209 (void *)(unsigned long)args->hashval, 210 (void *)((unsigned long)(args->inumber >> 32)), 211 (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), 212 (void *)args->dp, (void *)args->trans, 213 (void *)(unsigned long)args->justcheck, (void *)(long)s, 214 (void *)dbp); 215} 216#endif /* XFS_DIR2_TRACE */ 217