• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_dir2.h"
23 #include "xfs_da_btree.h"
24 #include "xfs_bmap_btree.h"
25 #include "xfs_dir2_sf.h"
26 #include "xfs_attr_sf.h"
27 #include "xfs_dinode.h"
28 #include "xfs_inode.h"
29 #include "xfs_dir2_trace.h"
30 
31 #ifdef XFS_DIR2_TRACE
32 ktrace_t	*xfs_dir2_trace_buf;
33 
34 /*
35  * Enter something in the trace buffers.
36  */
37 static void
xfs_dir2_trace_enter(xfs_inode_t * dp,int type,char * where,char * name,int namelen,void * a0,void * a1,void * a2,void * a3,void * a4,void * a5,void * a6,void * a7)38 xfs_dir2_trace_enter(
39 	xfs_inode_t	*dp,
40 	int		type,
41 	char		*where,
42 	char		*name,
43 	int		namelen,
44 	void		*a0,
45 	void		*a1,
46 	void		*a2,
47 	void		*a3,
48 	void		*a4,
49 	void		*a5,
50 	void		*a6,
51 	void		*a7)
52 {
53 	void		*n[5];
54 
55 	ASSERT(xfs_dir2_trace_buf);
56 	ASSERT(dp->i_dir_trace);
57 	if (name)
58 		memcpy(n, name, min((int)sizeof(n), namelen));
59 	else
60 		memset((char *)n, 0, sizeof(n));
61 	ktrace_enter(xfs_dir2_trace_buf,
62 		(void *)(long)type, (void *)where,
63 		(void *)a0, (void *)a1, (void *)a2, (void *)a3,
64 		(void *)a4, (void *)a5, (void *)a6, (void *)a7,
65 		(void *)(long)namelen,
66 		(void *)n[0], (void *)n[1], (void *)n[2],
67 		(void *)n[3], (void *)n[4]);
68 	ktrace_enter(dp->i_dir_trace,
69 		(void *)(long)type, (void *)where,
70 		(void *)a0, (void *)a1, (void *)a2, (void *)a3,
71 		(void *)a4, (void *)a5, (void *)a6, (void *)a7,
72 		(void *)(long)namelen,
73 		(void *)n[0], (void *)n[1], (void *)n[2],
74 		(void *)n[3], (void *)n[4]);
75 }
76 
77 void
xfs_dir2_trace_args(char * where,xfs_da_args_t * args)78 xfs_dir2_trace_args(
79 	char		*where,
80 	xfs_da_args_t	*args)
81 {
82 	xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS, where,
83 		(char *)args->name, (int)args->namelen,
84 		(void *)(unsigned long)args->hashval,
85 		(void *)((unsigned long)(args->inumber >> 32)),
86 		(void *)((unsigned long)(args->inumber & 0xFFFFFFFF)),
87 		(void *)args->dp, (void *)args->trans,
88 		(void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK),
89 		NULL, NULL);
90 }
91 
92 void
xfs_dir2_trace_args_b(char * where,xfs_da_args_t * args,xfs_dabuf_t * bp)93 xfs_dir2_trace_args_b(
94 	char		*where,
95 	xfs_da_args_t	*args,
96 	xfs_dabuf_t	*bp)
97 {
98 	xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_B, where,
99 		(char *)args->name, (int)args->namelen,
100 		(void *)(unsigned long)args->hashval,
101 		(void *)((unsigned long)(args->inumber >> 32)),
102 		(void *)((unsigned long)(args->inumber & 0xFFFFFFFF)),
103 		(void *)args->dp, (void *)args->trans,
104 		(void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK),
105 		(void *)(bp ? bp->bps[0] : NULL), NULL);
106 }
107 
108 void
xfs_dir2_trace_args_bb(char * where,xfs_da_args_t * args,xfs_dabuf_t * lbp,xfs_dabuf_t * dbp)109 xfs_dir2_trace_args_bb(
110 	char		*where,
111 	xfs_da_args_t	*args,
112 	xfs_dabuf_t	*lbp,
113 	xfs_dabuf_t	*dbp)
114 {
115 	xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_BB, where,
116 		(char *)args->name, (int)args->namelen,
117 		(void *)(unsigned long)args->hashval,
118 		(void *)((unsigned long)(args->inumber >> 32)),
119 		(void *)((unsigned long)(args->inumber & 0xFFFFFFFF)),
120 		(void *)args->dp, (void *)args->trans,
121 		(void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK),
122 		(void *)(lbp ? lbp->bps[0] : NULL),
123 		(void *)(dbp ? dbp->bps[0] : NULL));
124 }
125 
126 void
xfs_dir2_trace_args_bibii(char * where,xfs_da_args_t * args,xfs_dabuf_t * bs,int ss,xfs_dabuf_t * bd,int sd,int c)127 xfs_dir2_trace_args_bibii(
128 	char		*where,
129 	xfs_da_args_t	*args,
130 	xfs_dabuf_t	*bs,
131 	int		ss,
132 	xfs_dabuf_t	*bd,
133 	int		sd,
134 	int		c)
135 {
136 	xfs_buf_t	*bpbs = bs ? bs->bps[0] : NULL;
137 	xfs_buf_t	*bpbd = bd ? bd->bps[0] : NULL;
138 
139 	xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_BIBII, where,
140 		(char *)args->name, (int)args->namelen,
141 		(void *)args->dp, (void *)args->trans,
142 		(void *)bpbs, (void *)(long)ss, (void *)bpbd, (void *)(long)sd,
143 		(void *)(long)c, NULL);
144 }
145 
146 void
xfs_dir2_trace_args_db(char * where,xfs_da_args_t * args,xfs_dir2_db_t db,xfs_dabuf_t * bp)147 xfs_dir2_trace_args_db(
148 	char		*where,
149 	xfs_da_args_t	*args,
150 	xfs_dir2_db_t	db,
151 	xfs_dabuf_t	*bp)
152 {
153 	xfs_buf_t	*dbp = bp ? bp->bps[0] : NULL;
154 
155 	xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_DB, where,
156 		(char *)args->name, (int)args->namelen,
157 		(void *)(unsigned long)args->hashval,
158 		(void *)((unsigned long)(args->inumber >> 32)),
159 		(void *)((unsigned long)(args->inumber & 0xFFFFFFFF)),
160 		(void *)args->dp, (void *)args->trans,
161 		(void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK),
162 		(void *)(long)db, (void *)dbp);
163 }
164 
165 void
xfs_dir2_trace_args_i(char * where,xfs_da_args_t * args,xfs_ino_t i)166 xfs_dir2_trace_args_i(
167 	char		*where,
168 	xfs_da_args_t	*args,
169 	xfs_ino_t	i)
170 {
171 	xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_I, where,
172 		(char *)args->name, (int)args->namelen,
173 		(void *)(unsigned long)args->hashval,
174 		(void *)((unsigned long)(args->inumber >> 32)),
175 		(void *)((unsigned long)(args->inumber & 0xFFFFFFFF)),
176 		(void *)args->dp, (void *)args->trans,
177 		(void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK),
178 		(void *)((unsigned long)(i >> 32)),
179 		(void *)((unsigned long)(i & 0xFFFFFFFF)));
180 }
181 
182 void
xfs_dir2_trace_args_s(char * where,xfs_da_args_t * args,int s)183 xfs_dir2_trace_args_s(
184 	char		*where,
185 	xfs_da_args_t	*args,
186 	int		s)
187 {
188 	xfs_dir2_trace_enter(args->dp, XFS_DIR2_KTRACE_ARGS_S, where,
189 		(char *)args->name, (int)args->namelen,
190 		(void *)(unsigned long)args->hashval,
191 		(void *)((unsigned long)(args->inumber >> 32)),
192 		(void *)((unsigned long)(args->inumber & 0xFFFFFFFF)),
193 		(void *)args->dp, (void *)args->trans,
194 		(void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK),
195 		(void *)(long)s, NULL);
196 }
197 
198 void
xfs_dir2_trace_args_sb(char * where,xfs_da_args_t * args,int s,xfs_dabuf_t * bp)199 xfs_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->op_flags & XFS_DA_OP_JUSTCHECK),
214 		(void *)(long)s, (void *)dbp);
215 }
216 #endif	/* XFS_DIR2_TRACE */
217