btrfs.h 49.2 KB
Newer Older
1
/* SPDX-License-Identifier: GPL-2.0 */
2 3 4 5 6 7 8 9
#undef TRACE_SYSTEM
#define TRACE_SYSTEM btrfs

#if !defined(_TRACE_BTRFS_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_BTRFS_H

#include <linux/writeback.h>
#include <linux/tracepoint.h>
10
#include <trace/events/mmflags.h>
11 12 13 14 15

struct btrfs_root;
struct btrfs_fs_info;
struct btrfs_inode;
struct extent_map;
L
Liu Bo 已提交
16
struct btrfs_file_extent_item;
17 18 19 20 21
struct btrfs_ordered_extent;
struct btrfs_delayed_ref_node;
struct btrfs_delayed_tree_ref;
struct btrfs_delayed_data_ref;
struct btrfs_delayed_ref_head;
J
Josef Bacik 已提交
22 23
struct btrfs_block_group_cache;
struct btrfs_free_cluster;
24 25
struct map_lookup;
struct extent_buffer;
26
struct btrfs_work;
27
struct __btrfs_workqueue;
M
Mark Fasheh 已提交
28
struct btrfs_qgroup_extent_record;
29
struct btrfs_qgroup;
30
struct prelim_ref;
31

32 33 34 35 36 37 38
TRACE_DEFINE_ENUM(FLUSH_DELAYED_ITEMS_NR);
TRACE_DEFINE_ENUM(FLUSH_DELAYED_ITEMS);
TRACE_DEFINE_ENUM(FLUSH_DELALLOC);
TRACE_DEFINE_ENUM(FLUSH_DELALLOC_WAIT);
TRACE_DEFINE_ENUM(ALLOC_CHUNK);
TRACE_DEFINE_ENUM(COMMIT_TRANS);

39 40 41 42 43 44 45 46 47
#define show_ref_type(type)						\
	__print_symbolic(type,						\
		{ BTRFS_TREE_BLOCK_REF_KEY, 	"TREE_BLOCK_REF" },	\
		{ BTRFS_EXTENT_DATA_REF_KEY, 	"EXTENT_DATA_REF" },	\
		{ BTRFS_EXTENT_REF_V0_KEY, 	"EXTENT_REF_V0" },	\
		{ BTRFS_SHARED_BLOCK_REF_KEY, 	"SHARED_BLOCK_REF" },	\
		{ BTRFS_SHARED_DATA_REF_KEY, 	"SHARED_DATA_REF" })

#define __show_root_type(obj)						\
48
	__print_symbolic_u64(obj,					\
49 50 51 52 53 54 55 56
		{ BTRFS_ROOT_TREE_OBJECTID, 	"ROOT_TREE"	},	\
		{ BTRFS_EXTENT_TREE_OBJECTID, 	"EXTENT_TREE"	},	\
		{ BTRFS_CHUNK_TREE_OBJECTID, 	"CHUNK_TREE"	},	\
		{ BTRFS_DEV_TREE_OBJECTID, 	"DEV_TREE"	},	\
		{ BTRFS_FS_TREE_OBJECTID, 	"FS_TREE"	},	\
		{ BTRFS_ROOT_TREE_DIR_OBJECTID, "ROOT_TREE_DIR"	},	\
		{ BTRFS_CSUM_TREE_OBJECTID, 	"CSUM_TREE"	},	\
		{ BTRFS_TREE_LOG_OBJECTID,	"TREE_LOG"	},	\
L
Liu Bo 已提交
57
		{ BTRFS_QUOTA_TREE_OBJECTID,	"QUOTA_TREE"	},	\
58
		{ BTRFS_TREE_RELOC_OBJECTID,	"TREE_RELOC"	},	\
59 60
		{ BTRFS_UUID_TREE_OBJECTID,	"UUID_TREE"	},	\
		{ BTRFS_FREE_SPACE_TREE_OBJECTID, "FREE_SPACE_TREE" },	\
61 62 63 64
		{ BTRFS_DATA_RELOC_TREE_OBJECTID, "DATA_RELOC_TREE" })

#define show_root_type(obj)						\
	obj, ((obj >= BTRFS_DATA_RELOC_TREE_OBJECTID) ||		\
65
	      (obj >= BTRFS_ROOT_TREE_OBJECTID &&			\
L
Liu Bo 已提交
66
	       obj <= BTRFS_QUOTA_TREE_OBJECTID)) ? __show_root_type(obj) : "-"
67

L
Liu Bo 已提交
68 69 70 71 72 73
#define show_fi_type(type)						\
	__print_symbolic(type,						\
		 { BTRFS_FILE_EXTENT_INLINE,	"INLINE" },		\
		 { BTRFS_FILE_EXTENT_REG,	"REG"	 },		\
		 { BTRFS_FILE_EXTENT_PREALLOC,	"PREALLOC"})

74 75
#define show_qgroup_rsv_type(type)					\
	__print_symbolic(type,						\
76 77 78
		{ BTRFS_QGROUP_RSV_DATA,	  "DATA"	},	\
		{ BTRFS_QGROUP_RSV_META_PERTRANS, "META_PERTRANS" },	\
		{ BTRFS_QGROUP_RSV_META_PREALLOC, "META_PREALLOC" })
79

J
Josef Bacik 已提交
80
#define BTRFS_GROUP_FLAGS	\
L
Liu Bo 已提交
81 82 83 84 85 86 87 88 89
	{ BTRFS_BLOCK_GROUP_DATA,	"DATA"},	\
	{ BTRFS_BLOCK_GROUP_SYSTEM,	"SYSTEM"},	\
	{ BTRFS_BLOCK_GROUP_METADATA,	"METADATA"},	\
	{ BTRFS_BLOCK_GROUP_RAID0,	"RAID0"}, 	\
	{ BTRFS_BLOCK_GROUP_RAID1,	"RAID1"}, 	\
	{ BTRFS_BLOCK_GROUP_DUP,	"DUP"}, 	\
	{ BTRFS_BLOCK_GROUP_RAID10,	"RAID10"}, 	\
	{ BTRFS_BLOCK_GROUP_RAID5,	"RAID5"},	\
	{ BTRFS_BLOCK_GROUP_RAID6,	"RAID6"}
J
Josef Bacik 已提交
90

A
Anand Jain 已提交
91 92
#define BTRFS_FSID_SIZE 16
#define TP_STRUCT__entry_fsid __array(u8, fsid, BTRFS_FSID_SIZE)
93 94

#define TP_fast_assign_fsid(fs_info)					\
95
	memcpy(__entry->fsid, fs_info->fs_devices->fsid, BTRFS_FSID_SIZE)
96 97 98 99 100 101 102 103 104 105 106

#define TP_STRUCT__entry_btrfs(args...)					\
	TP_STRUCT__entry(						\
		TP_STRUCT__entry_fsid					\
		args)
#define TP_fast_assign_btrfs(fs_info, args...)				\
	TP_fast_assign(							\
		TP_fast_assign_fsid(fs_info);				\
		args)
#define TP_printk_btrfs(fmt, args...) \
	TP_printk("%pU: " fmt, __entry->fsid, args)
J
Josef Bacik 已提交
107

108 109
TRACE_EVENT(btrfs_transaction_commit,

110
	TP_PROTO(const struct btrfs_root *root),
111 112 113

	TP_ARGS(root),

114
	TP_STRUCT__entry_btrfs(
115 116 117 118
		__field(	u64,  generation		)
		__field(	u64,  root_objectid		)
	),

119
	TP_fast_assign_btrfs(root->fs_info,
120 121 122 123
		__entry->generation	= root->fs_info->generation;
		__entry->root_objectid	= root->root_key.objectid;
	),

124
	TP_printk_btrfs("root=%llu(%s) gen=%llu",
125
		  show_root_type(__entry->root_objectid),
126
		  __entry->generation)
127 128 129 130
);

DECLARE_EVENT_CLASS(btrfs__inode,

131
	TP_PROTO(const struct inode *inode),
132 133 134

	TP_ARGS(inode),

135
	TP_STRUCT__entry_btrfs(
136
		__field(	u64,  ino			)
137 138 139 140 141 142 143 144
		__field(	blkcnt_t,  blocks		)
		__field(	u64,  disk_i_size		)
		__field(	u64,  generation		)
		__field(	u64,  last_trans		)
		__field(	u64,  logged_trans		)
		__field(	u64,  root_objectid		)
	),

145
	TP_fast_assign_btrfs(btrfs_sb(inode->i_sb),
146
		__entry->ino	= btrfs_ino(BTRFS_I(inode));
147 148 149 150 151 152 153 154 155
		__entry->blocks	= inode->i_blocks;
		__entry->disk_i_size  = BTRFS_I(inode)->disk_i_size;
		__entry->generation = BTRFS_I(inode)->generation;
		__entry->last_trans = BTRFS_I(inode)->last_trans;
		__entry->logged_trans = BTRFS_I(inode)->logged_trans;
		__entry->root_objectid =
				BTRFS_I(inode)->root->root_key.objectid;
	),

156
	TP_printk_btrfs("root=%llu(%s) gen=%llu ino=%llu blocks=%llu "
157
		  "disk_i_size=%llu last_trans=%llu logged_trans=%llu",
158
		  show_root_type(__entry->root_objectid),
159 160
		  __entry->generation,
		  __entry->ino,
161
		  (unsigned long long)__entry->blocks,
162 163 164
		  __entry->disk_i_size,
		  __entry->last_trans,
		  __entry->logged_trans)
165 166 167 168
);

DEFINE_EVENT(btrfs__inode, btrfs_inode_new,

169
	TP_PROTO(const struct inode *inode),
170 171 172 173 174 175

	TP_ARGS(inode)
);

DEFINE_EVENT(btrfs__inode, btrfs_inode_request,

176
	TP_PROTO(const struct inode *inode),
177 178 179 180 181 182

	TP_ARGS(inode)
);

DEFINE_EVENT(btrfs__inode, btrfs_inode_evict,

183
	TP_PROTO(const struct inode *inode),
184 185 186 187 188

	TP_ARGS(inode)
);

#define __show_map_type(type)						\
189
	__print_symbolic_u64(type,					\
190 191 192 193 194 195 196 197 198 199
		{ EXTENT_MAP_LAST_BYTE, "LAST_BYTE" 	},		\
		{ EXTENT_MAP_HOLE, 	"HOLE" 		},		\
		{ EXTENT_MAP_INLINE, 	"INLINE" 	},		\
		{ EXTENT_MAP_DELALLOC,	"DELALLOC" 	})

#define show_map_type(type)			\
	type, (type >= EXTENT_MAP_LAST_BYTE) ? "-" :  __show_map_type(type)

#define show_map_flags(flag)						\
	__print_flags(flag, "|",					\
200 201 202 203 204 205
		{ (1 << EXTENT_FLAG_PINNED), 		"PINNED" 	},\
		{ (1 << EXTENT_FLAG_COMPRESSED), 	"COMPRESSED" 	},\
		{ (1 << EXTENT_FLAG_PREALLOC), 		"PREALLOC" 	},\
		{ (1 << EXTENT_FLAG_LOGGING),	 	"LOGGING" 	},\
		{ (1 << EXTENT_FLAG_FILLING),	 	"FILLING" 	},\
		{ (1 << EXTENT_FLAG_FS_MAPPING),	"FS_MAPPING"	})
206

207
TRACE_EVENT_CONDITION(btrfs_get_extent,
208

209 210
	TP_PROTO(const struct btrfs_root *root, const struct btrfs_inode *inode,
		 const struct extent_map *map),
211

212
	TP_ARGS(root, inode, map),
213

214 215
	TP_CONDITION(map),

216
	TP_STRUCT__entry_btrfs(
217
		__field(	u64,  root_objectid	)
218
		__field(	u64,  ino		)
219 220 221 222 223 224 225 226 227 228
		__field(	u64,  start		)
		__field(	u64,  len		)
		__field(	u64,  orig_start	)
		__field(	u64,  block_start	)
		__field(	u64,  block_len		)
		__field(	unsigned long,  flags	)
		__field(	int,  refs		)
		__field(	unsigned int,  compress_type	)
	),

229
	TP_fast_assign_btrfs(root->fs_info,
230
		__entry->root_objectid	= root->root_key.objectid;
231 232
		__entry->ino		= btrfs_ino(inode);
		__entry->start		= map->start;
233 234 235 236 237
		__entry->len		= map->len;
		__entry->orig_start	= map->orig_start;
		__entry->block_start	= map->block_start;
		__entry->block_len	= map->block_len;
		__entry->flags		= map->flags;
238
		__entry->refs		= refcount_read(&map->refs);
239 240 241
		__entry->compress_type	= map->compress_type;
	),

242 243 244 245
	TP_printk_btrfs("root=%llu(%s) ino=%llu start=%llu len=%llu "
		  "orig_start=%llu block_start=%llu(%s) "
		  "block_len=%llu flags=%s refs=%u "
		  "compress_type=%u",
246
		  show_root_type(__entry->root_objectid),
247 248 249 250
		  __entry->ino,
		  __entry->start,
		  __entry->len,
		  __entry->orig_start,
251
		  show_map_type(__entry->block_start),
252
		  __entry->block_len,
253 254 255 256
		  show_map_flags(__entry->flags),
		  __entry->refs, __entry->compress_type)
);

257 258
TRACE_EVENT(btrfs_handle_em_exist,

259 260 261
	TP_PROTO(struct btrfs_fs_info *fs_info,
		const struct extent_map *existing, const struct extent_map *map,
		u64 start, u64 len),
262

263
	TP_ARGS(fs_info, existing, map, start, len),
264

265
	TP_STRUCT__entry_btrfs(
266 267 268 269 270 271 272 273
		__field(	u64,  e_start		)
		__field(	u64,  e_len		)
		__field(	u64,  map_start		)
		__field(	u64,  map_len		)
		__field(	u64,  start		)
		__field(	u64,  len		)
	),

274
	TP_fast_assign_btrfs(fs_info,
275 276 277 278 279 280 281 282
		__entry->e_start	= existing->start;
		__entry->e_len		= existing->len;
		__entry->map_start	= map->start;
		__entry->map_len	= map->len;
		__entry->start		= start;
		__entry->len		= len;
	),

283
	TP_printk_btrfs("start=%llu len=%llu "
284 285
		  "existing(start=%llu len=%llu) "
		  "em(start=%llu len=%llu)",
286 287 288 289 290 291
		  __entry->start,
		  __entry->len,
		  __entry->e_start,
		  __entry->e_len,
		  __entry->map_start,
		  __entry->map_len)
292 293
);

L
Liu Bo 已提交
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318
/* file extent item */
DECLARE_EVENT_CLASS(btrfs__file_extent_item_regular,

	TP_PROTO(struct btrfs_inode *bi, struct extent_buffer *l,
		 struct btrfs_file_extent_item *fi, u64 start),

	TP_ARGS(bi, l, fi, start),

	TP_STRUCT__entry_btrfs(
		__field(	u64,	root_obj	)
		__field(	u64,	ino		)
		__field(	loff_t,	isize		)
		__field(	u64,	disk_isize	)
		__field(	u64,	num_bytes	)
		__field(	u64,	ram_bytes	)
		__field(	u64,	disk_bytenr	)
		__field(	u64,	disk_num_bytes	)
		__field(	u64,	extent_offset	)
		__field(	u8,	extent_type	)
		__field(	u8,	compression	)
		__field(	u64,	extent_start	)
		__field(	u64,	extent_end	)
	),

	TP_fast_assign_btrfs(bi->root->fs_info,
319
		__entry->root_obj	= bi->root->root_key.objectid;
L
Liu Bo 已提交
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369
		__entry->ino		= btrfs_ino(bi);
		__entry->isize		= bi->vfs_inode.i_size;
		__entry->disk_isize	= bi->disk_i_size;
		__entry->num_bytes	= btrfs_file_extent_num_bytes(l, fi);
		__entry->ram_bytes	= btrfs_file_extent_ram_bytes(l, fi);
		__entry->disk_bytenr	= btrfs_file_extent_disk_bytenr(l, fi);
		__entry->disk_num_bytes	= btrfs_file_extent_disk_num_bytes(l, fi);
		__entry->extent_offset	= btrfs_file_extent_offset(l, fi);
		__entry->extent_type	= btrfs_file_extent_type(l, fi);
		__entry->compression	= btrfs_file_extent_compression(l, fi);
		__entry->extent_start	= start;
		__entry->extent_end	= (start + __entry->num_bytes);
	),

	TP_printk_btrfs(
		"root=%llu(%s) inode=%llu size=%llu disk_isize=%llu "
		"file extent range=[%llu %llu] "
		"(num_bytes=%llu ram_bytes=%llu disk_bytenr=%llu "
		"disk_num_bytes=%llu extent_offset=%llu type=%s "
		"compression=%u",
		show_root_type(__entry->root_obj), __entry->ino,
		__entry->isize,
		__entry->disk_isize, __entry->extent_start,
		__entry->extent_end, __entry->num_bytes, __entry->ram_bytes,
		__entry->disk_bytenr, __entry->disk_num_bytes,
		__entry->extent_offset, show_fi_type(__entry->extent_type),
		__entry->compression)
);

DECLARE_EVENT_CLASS(
	btrfs__file_extent_item_inline,

	TP_PROTO(struct btrfs_inode *bi, struct extent_buffer *l,
		 struct btrfs_file_extent_item *fi, int slot, u64 start),

	TP_ARGS(bi, l, fi, slot,  start),

	TP_STRUCT__entry_btrfs(
		__field(	u64,	root_obj	)
		__field(	u64,	ino		)
		__field(	loff_t,	isize		)
		__field(	u64,	disk_isize	)
		__field(	u8,	extent_type	)
		__field(	u8,	compression	)
		__field(	u64,	extent_start	)
		__field(	u64,	extent_end	)
	),

	TP_fast_assign_btrfs(
		bi->root->fs_info,
370
		__entry->root_obj	= bi->root->root_key.objectid;
L
Liu Bo 已提交
371 372 373 374 375 376
		__entry->ino		= btrfs_ino(bi);
		__entry->isize		= bi->vfs_inode.i_size;
		__entry->disk_isize	= bi->disk_i_size;
		__entry->extent_type	= btrfs_file_extent_type(l, fi);
		__entry->compression	= btrfs_file_extent_compression(l, fi);
		__entry->extent_start	= start;
377
		__entry->extent_end	= (start + btrfs_file_extent_ram_bytes(l, fi));
L
Liu Bo 已提交
378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425
	),

	TP_printk_btrfs(
		"root=%llu(%s) inode=%llu size=%llu disk_isize=%llu "
		"file extent range=[%llu %llu] "
		"extent_type=%s compression=%u",
		show_root_type(__entry->root_obj), __entry->ino, __entry->isize,
		__entry->disk_isize, __entry->extent_start,
		__entry->extent_end, show_fi_type(__entry->extent_type),
		__entry->compression)
);

DEFINE_EVENT(
	btrfs__file_extent_item_regular, btrfs_get_extent_show_fi_regular,

	TP_PROTO(struct btrfs_inode *bi, struct extent_buffer *l,
		 struct btrfs_file_extent_item *fi, u64 start),

	TP_ARGS(bi, l, fi, start)
);

DEFINE_EVENT(
	btrfs__file_extent_item_regular, btrfs_truncate_show_fi_regular,

	TP_PROTO(struct btrfs_inode *bi, struct extent_buffer *l,
		 struct btrfs_file_extent_item *fi, u64 start),

	TP_ARGS(bi, l, fi, start)
);

DEFINE_EVENT(
	btrfs__file_extent_item_inline, btrfs_get_extent_show_fi_inline,

	TP_PROTO(struct btrfs_inode *bi, struct extent_buffer *l,
		 struct btrfs_file_extent_item *fi, int slot, u64 start),

	TP_ARGS(bi, l, fi, slot, start)
);

DEFINE_EVENT(
	btrfs__file_extent_item_inline, btrfs_truncate_show_fi_inline,

	TP_PROTO(struct btrfs_inode *bi, struct extent_buffer *l,
		 struct btrfs_file_extent_item *fi, int slot, u64 start),

	TP_ARGS(bi, l, fi, slot, start)
);

426 427 428 429 430 431 432 433 434 435
#define show_ordered_flags(flags)					   \
	__print_flags(flags, "|",					   \
		{ (1 << BTRFS_ORDERED_IO_DONE), 	"IO_DONE" 	}, \
		{ (1 << BTRFS_ORDERED_COMPLETE), 	"COMPLETE" 	}, \
		{ (1 << BTRFS_ORDERED_NOCOW), 		"NOCOW" 	}, \
		{ (1 << BTRFS_ORDERED_COMPRESSED), 	"COMPRESSED" 	}, \
		{ (1 << BTRFS_ORDERED_PREALLOC), 	"PREALLOC" 	}, \
		{ (1 << BTRFS_ORDERED_DIRECT),	 	"DIRECT" 	}, \
		{ (1 << BTRFS_ORDERED_IOERR), 		"IOERR" 	}, \
		{ (1 << BTRFS_ORDERED_UPDATED_ISIZE), 	"UPDATED_ISIZE"	}, \
436
		{ (1 << BTRFS_ORDERED_TRUNCATED), 	"TRUNCATED"	})
L
Liu Bo 已提交
437

438 439 440

DECLARE_EVENT_CLASS(btrfs__ordered_extent,

441 442
	TP_PROTO(const struct inode *inode,
		 const struct btrfs_ordered_extent *ordered),
443 444 445

	TP_ARGS(inode, ordered),

446
	TP_STRUCT__entry_btrfs(
447
		__field(	u64,  ino		)
448 449 450 451 452 453 454 455 456
		__field(	u64,  file_offset	)
		__field(	u64,  start		)
		__field(	u64,  len		)
		__field(	u64,  disk_len		)
		__field(	u64,  bytes_left	)
		__field(	unsigned long,  flags	)
		__field(	int,  compress_type	)
		__field(	int,  refs		)
		__field(	u64,  root_objectid	)
457
		__field(	u64,  truncated_len	)
458 459
	),

460
	TP_fast_assign_btrfs(btrfs_sb(inode->i_sb),
461
		__entry->ino 		= btrfs_ino(BTRFS_I(inode));
462 463 464 465 466 467 468
		__entry->file_offset	= ordered->file_offset;
		__entry->start		= ordered->start;
		__entry->len		= ordered->len;
		__entry->disk_len	= ordered->disk_len;
		__entry->bytes_left	= ordered->bytes_left;
		__entry->flags		= ordered->flags;
		__entry->compress_type	= ordered->compress_type;
469
		__entry->refs		= refcount_read(&ordered->refs);
470 471
		__entry->root_objectid	=
				BTRFS_I(inode)->root->root_key.objectid;
472
		__entry->truncated_len	= ordered->truncated_len;
473 474
	),

475 476 477 478 479
	TP_printk_btrfs("root=%llu(%s) ino=%llu file_offset=%llu "
		  "start=%llu len=%llu disk_len=%llu "
		  "truncated_len=%llu "
		  "bytes_left=%llu flags=%s compress_type=%d "
		  "refs=%d",
480
		  show_root_type(__entry->root_objectid),
481 482 483 484 485 486 487
		  __entry->ino,
		  __entry->file_offset,
		  __entry->start,
		  __entry->len,
		  __entry->disk_len,
		  __entry->truncated_len,
		  __entry->bytes_left,
488 489 490 491 492 493
		  show_ordered_flags(__entry->flags),
		  __entry->compress_type, __entry->refs)
);

DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_add,

494 495
	TP_PROTO(const struct inode *inode,
		 const struct btrfs_ordered_extent *ordered),
496 497 498 499 500 501

	TP_ARGS(inode, ordered)
);

DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_remove,

502 503
	TP_PROTO(const struct inode *inode,
		 const struct btrfs_ordered_extent *ordered),
504 505 506 507 508 509

	TP_ARGS(inode, ordered)
);

DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_start,

510 511
	TP_PROTO(const struct inode *inode,
		 const struct btrfs_ordered_extent *ordered),
512 513 514 515 516 517

	TP_ARGS(inode, ordered)
);

DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_put,

518 519
	TP_PROTO(const struct inode *inode,
		 const struct btrfs_ordered_extent *ordered),
520 521 522 523 524 525

	TP_ARGS(inode, ordered)
);

DECLARE_EVENT_CLASS(btrfs__writepage,

526 527
	TP_PROTO(const struct page *page, const struct inode *inode,
		 const struct writeback_control *wbc),
528 529 530

	TP_ARGS(page, inode, wbc),

531
	TP_STRUCT__entry_btrfs(
532
		__field(	u64,	ino			)
533 534 535 536 537 538 539 540 541 542 543 544
		__field(	pgoff_t,  index			)
		__field(	long,   nr_to_write		)
		__field(	long,   pages_skipped		)
		__field(	loff_t, range_start		)
		__field(	loff_t, range_end		)
		__field(	char,   for_kupdate		)
		__field(	char,   for_reclaim		)
		__field(	char,   range_cyclic		)
		__field(	pgoff_t,  writeback_index	)
		__field(	u64,    root_objectid		)
	),

545
	TP_fast_assign_btrfs(btrfs_sb(inode->i_sb),
546
		__entry->ino		= btrfs_ino(BTRFS_I(inode));
547 548 549 550 551 552 553 554 555 556 557 558 559
		__entry->index		= page->index;
		__entry->nr_to_write	= wbc->nr_to_write;
		__entry->pages_skipped	= wbc->pages_skipped;
		__entry->range_start	= wbc->range_start;
		__entry->range_end	= wbc->range_end;
		__entry->for_kupdate	= wbc->for_kupdate;
		__entry->for_reclaim	= wbc->for_reclaim;
		__entry->range_cyclic	= wbc->range_cyclic;
		__entry->writeback_index = inode->i_mapping->writeback_index;
		__entry->root_objectid	=
				 BTRFS_I(inode)->root->root_key.objectid;
	),

560
	TP_printk_btrfs("root=%llu(%s) ino=%llu page_index=%lu "
561 562 563
		  "nr_to_write=%ld pages_skipped=%ld range_start=%llu "
		  "range_end=%llu for_kupdate=%d "
		  "for_reclaim=%d range_cyclic=%d writeback_index=%lu",
564
		  show_root_type(__entry->root_objectid),
565
		  __entry->ino, __entry->index,
566 567
		  __entry->nr_to_write, __entry->pages_skipped,
		  __entry->range_start, __entry->range_end,
568
		  __entry->for_kupdate,
569 570 571 572 573 574
		  __entry->for_reclaim, __entry->range_cyclic,
		  (unsigned long)__entry->writeback_index)
);

DEFINE_EVENT(btrfs__writepage, __extent_writepage,

575 576
	TP_PROTO(const struct page *page, const struct inode *inode,
		 const struct writeback_control *wbc),
577 578 579 580 581 582

	TP_ARGS(page, inode, wbc)
);

TRACE_EVENT(btrfs_writepage_end_io_hook,

583
	TP_PROTO(const struct page *page, u64 start, u64 end, int uptodate),
584 585 586

	TP_ARGS(page, start, end, uptodate),

587
	TP_STRUCT__entry_btrfs(
588
		__field(	u64,	 ino		)
589 590 591 592 593 594 595
		__field(	pgoff_t, index		)
		__field(	u64,	 start		)
		__field(	u64,	 end		)
		__field(	int,	 uptodate	)
		__field(	u64,    root_objectid	)
	),

596
	TP_fast_assign_btrfs(btrfs_sb(page->mapping->host->i_sb),
597
		__entry->ino	= btrfs_ino(BTRFS_I(page->mapping->host));
598 599 600 601 602 603 604 605
		__entry->index	= page->index;
		__entry->start	= start;
		__entry->end	= end;
		__entry->uptodate = uptodate;
		__entry->root_objectid	=
			 BTRFS_I(page->mapping->host)->root->root_key.objectid;
	),

606
	TP_printk_btrfs("root=%llu(%s) ino=%llu page_index=%lu start=%llu "
607
		  "end=%llu uptodate=%d",
608
		  show_root_type(__entry->root_objectid),
609 610 611
		  __entry->ino, (unsigned long)__entry->index,
		  __entry->start,
		  __entry->end, __entry->uptodate)
612 613 614 615
);

TRACE_EVENT(btrfs_sync_file,

616
	TP_PROTO(const struct file *file, int datasync),
617 618 619

	TP_ARGS(file, datasync),

620
	TP_STRUCT__entry_btrfs(
621 622
		__field(	u64,	ino		)
		__field(	u64,	parent		)
623 624 625 626 627
		__field(	int,    datasync	)
		__field(	u64,    root_objectid	)
	),

	TP_fast_assign(
628 629
		const struct dentry *dentry = file->f_path.dentry;
		const struct inode *inode = d_inode(dentry);
630

631
		TP_fast_assign_fsid(btrfs_sb(file->f_path.dentry->d_sb));
632 633
		__entry->ino		= btrfs_ino(BTRFS_I(inode));
		__entry->parent		= btrfs_ino(BTRFS_I(d_inode(dentry->d_parent)));
634 635 636 637 638
		__entry->datasync	= datasync;
		__entry->root_objectid	=
				 BTRFS_I(inode)->root->root_key.objectid;
	),

639
	TP_printk_btrfs("root=%llu(%s) ino=%llu parent=%llu datasync=%d",
640
		  show_root_type(__entry->root_objectid),
641 642
		  __entry->ino,
		  __entry->parent,
643 644 645 646 647
		  __entry->datasync)
);

TRACE_EVENT(btrfs_sync_fs,

648
	TP_PROTO(const struct btrfs_fs_info *fs_info, int wait),
649

650
	TP_ARGS(fs_info, wait),
651

652
	TP_STRUCT__entry_btrfs(
653 654 655
		__field(	int,  wait		)
	),

656
	TP_fast_assign_btrfs(fs_info,
657 658 659
		__entry->wait	= wait;
	),

660
	TP_printk_btrfs("wait=%d", __entry->wait)
661 662
);

663 664
TRACE_EVENT(btrfs_add_block_group,

665 666
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_block_group_cache *block_group, int create),
667 668 669

	TP_ARGS(fs_info, block_group, create),

670
	TP_STRUCT__entry_btrfs(
671 672 673 674 675 676 677 678
		__field(	u64,	offset			)
		__field(	u64,	size			)
		__field(	u64,	flags			)
		__field(	u64,	bytes_used		)
		__field(	u64,	bytes_super		)
		__field(	int,	create			)
	),

679
	TP_fast_assign_btrfs(fs_info,
680 681 682 683 684 685 686 687 688
		__entry->offset		= block_group->key.objectid;
		__entry->size		= block_group->key.offset;
		__entry->flags		= block_group->flags;
		__entry->bytes_used	=
			btrfs_block_group_used(&block_group->item);
		__entry->bytes_super	= block_group->bytes_super;
		__entry->create		= create;
	),

689
	TP_printk_btrfs("block_group offset=%llu size=%llu "
690
		  "flags=%llu(%s) bytes_used=%llu bytes_super=%llu "
691
		  "create=%d",
692 693 694
		  __entry->offset,
		  __entry->size,
		  __entry->flags,
695 696
		  __print_flags((unsigned long)__entry->flags, "|",
				BTRFS_GROUP_FLAGS),
697 698
		  __entry->bytes_used,
		  __entry->bytes_super, __entry->create)
699 700
);

701 702 703 704 705 706 707 708
#define show_ref_action(action)						\
	__print_symbolic(action,					\
		{ BTRFS_ADD_DELAYED_REF,    "ADD_DELAYED_REF" },	\
		{ BTRFS_DROP_DELAYED_REF,   "DROP_DELAYED_REF" },	\
		{ BTRFS_ADD_DELAYED_EXTENT, "ADD_DELAYED_EXTENT" }, 	\
		{ BTRFS_UPDATE_DELAYED_HEAD, "UPDATE_DELAYED_HEAD" })
			

709
DECLARE_EVENT_CLASS(btrfs_delayed_tree_ref,
710

711 712 713
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_delayed_ref_node *ref,
		 const struct btrfs_delayed_tree_ref *full_ref,
714 715
		 int action),

716
	TP_ARGS(fs_info, ref, full_ref, action),
717

718
	TP_STRUCT__entry_btrfs(
719 720 721 722 723 724 725
		__field(	u64,  bytenr		)
		__field(	u64,  num_bytes		)
		__field(	int,  action		) 
		__field(	u64,  parent		)
		__field(	u64,  ref_root		)
		__field(	int,  level		)
		__field(	int,  type		)
726
		__field(	u64,  seq		)
727 728
	),

729
	TP_fast_assign_btrfs(fs_info,
730 731 732 733 734 735 736
		__entry->bytenr		= ref->bytenr;
		__entry->num_bytes	= ref->num_bytes;
		__entry->action		= action;
		__entry->parent		= full_ref->parent;
		__entry->ref_root	= full_ref->root;
		__entry->level		= full_ref->level;
		__entry->type		= ref->type;
737
		__entry->seq		= ref->seq;
738 739
	),

740 741 742
	TP_printk_btrfs("bytenr=%llu num_bytes=%llu action=%s "
		  "parent=%llu(%s) ref_root=%llu(%s) level=%d "
		  "type=%s seq=%llu",
743 744
		  __entry->bytenr,
		  __entry->num_bytes,
745 746 747
		  show_ref_action(__entry->action),
		  show_root_type(__entry->parent),
		  show_root_type(__entry->ref_root),
748
		  __entry->level, show_ref_type(__entry->type),
749
		  __entry->seq)
750 751
);

752 753
DEFINE_EVENT(btrfs_delayed_tree_ref,  add_delayed_tree_ref,

754 755 756
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_delayed_ref_node *ref,
		 const struct btrfs_delayed_tree_ref *full_ref,
757 758
		 int action),

759
	TP_ARGS(fs_info, ref, full_ref, action)
760 761 762 763
);

DEFINE_EVENT(btrfs_delayed_tree_ref,  run_delayed_tree_ref,

764 765 766
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_delayed_ref_node *ref,
		 const struct btrfs_delayed_tree_ref *full_ref,
767 768
		 int action),

769
	TP_ARGS(fs_info, ref, full_ref, action)
770 771 772
);

DECLARE_EVENT_CLASS(btrfs_delayed_data_ref,
773

774 775 776
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_delayed_ref_node *ref,
		 const struct btrfs_delayed_data_ref *full_ref,
777 778
		 int action),

779
	TP_ARGS(fs_info, ref, full_ref, action),
780

781
	TP_STRUCT__entry_btrfs(
782 783 784 785 786 787 788 789
		__field(	u64,  bytenr		)
		__field(	u64,  num_bytes		)
		__field(	int,  action		) 
		__field(	u64,  parent		)
		__field(	u64,  ref_root		)
		__field(	u64,  owner		)
		__field(	u64,  offset		)
		__field(	int,  type		)
790
		__field(	u64,  seq		)
791 792
	),

793
	TP_fast_assign_btrfs(fs_info,
794 795 796 797 798 799 800 801
		__entry->bytenr		= ref->bytenr;
		__entry->num_bytes	= ref->num_bytes;
		__entry->action		= action;
		__entry->parent		= full_ref->parent;
		__entry->ref_root	= full_ref->root;
		__entry->owner		= full_ref->objectid;
		__entry->offset		= full_ref->offset;
		__entry->type		= ref->type;
802
		__entry->seq		= ref->seq;
803 804
	),

805 806 807
	TP_printk_btrfs("bytenr=%llu num_bytes=%llu action=%s "
		  "parent=%llu(%s) ref_root=%llu(%s) owner=%llu "
		  "offset=%llu type=%s seq=%llu",
808 809
		  __entry->bytenr,
		  __entry->num_bytes,
810 811 812
		  show_ref_action(__entry->action),
		  show_root_type(__entry->parent),
		  show_root_type(__entry->ref_root),
813 814
		  __entry->owner,
		  __entry->offset,
815
		  show_ref_type(__entry->type),
816
		  __entry->seq)
817 818
);

819 820
DEFINE_EVENT(btrfs_delayed_data_ref,  add_delayed_data_ref,

821 822 823
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_delayed_ref_node *ref,
		 const struct btrfs_delayed_data_ref *full_ref,
824 825
		 int action),

826
	TP_ARGS(fs_info, ref, full_ref, action)
827 828 829 830
);

DEFINE_EVENT(btrfs_delayed_data_ref,  run_delayed_data_ref,

831 832 833
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_delayed_ref_node *ref,
		 const struct btrfs_delayed_data_ref *full_ref,
834 835
		 int action),

836
	TP_ARGS(fs_info, ref, full_ref, action)
837 838 839
);

DECLARE_EVENT_CLASS(btrfs_delayed_ref_head,
840

841 842
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_delayed_ref_head *head_ref,
843 844
		 int action),

845
	TP_ARGS(fs_info, head_ref, action),
846

847
	TP_STRUCT__entry_btrfs(
848 849 850 851 852 853
		__field(	u64,  bytenr		)
		__field(	u64,  num_bytes		)
		__field(	int,  action		) 
		__field(	int,  is_data		)
	),

854
	TP_fast_assign_btrfs(fs_info,
855 856
		__entry->bytenr		= head_ref->bytenr;
		__entry->num_bytes	= head_ref->num_bytes;
857 858 859 860
		__entry->action		= action;
		__entry->is_data	= head_ref->is_data;
	),

861
	TP_printk_btrfs("bytenr=%llu num_bytes=%llu action=%s is_data=%d",
862 863
		  __entry->bytenr,
		  __entry->num_bytes,
864 865 866 867
		  show_ref_action(__entry->action),
		  __entry->is_data)
);

868 869
DEFINE_EVENT(btrfs_delayed_ref_head,  add_delayed_ref_head,

870 871
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_delayed_ref_head *head_ref,
872 873
		 int action),

874
	TP_ARGS(fs_info, head_ref, action)
875 876 877 878
);

DEFINE_EVENT(btrfs_delayed_ref_head,  run_delayed_ref_head,

879 880
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_delayed_ref_head *head_ref,
881 882
		 int action),

883
	TP_ARGS(fs_info, head_ref, action)
884 885
);

886 887 888 889 890 891 892 893
#define show_chunk_type(type)					\
	__print_flags(type, "|",				\
		{ BTRFS_BLOCK_GROUP_DATA, 	"DATA"	},	\
		{ BTRFS_BLOCK_GROUP_SYSTEM, 	"SYSTEM"},	\
		{ BTRFS_BLOCK_GROUP_METADATA, 	"METADATA"},	\
		{ BTRFS_BLOCK_GROUP_RAID0, 	"RAID0" },	\
		{ BTRFS_BLOCK_GROUP_RAID1, 	"RAID1" },	\
		{ BTRFS_BLOCK_GROUP_DUP, 	"DUP"	},	\
L
Liu Bo 已提交
894 895 896
		{ BTRFS_BLOCK_GROUP_RAID10, 	"RAID10"},	\
		{ BTRFS_BLOCK_GROUP_RAID5, 	"RAID5"	},	\
		{ BTRFS_BLOCK_GROUP_RAID6, 	"RAID6"	})
897 898 899

DECLARE_EVENT_CLASS(btrfs__chunk,

900 901
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct map_lookup *map, u64 offset, u64 size),
902

903
	TP_ARGS(fs_info, map, offset, size),
904

905
	TP_STRUCT__entry_btrfs(
906 907 908 909 910 911 912 913
		__field(	int,  num_stripes		)
		__field(	u64,  type			)
		__field(	int,  sub_stripes		)
		__field(	u64,  offset			)
		__field(	u64,  size			)
		__field(	u64,  root_objectid		)
	),

914
	TP_fast_assign_btrfs(fs_info,
915 916 917 918 919
		__entry->num_stripes	= map->num_stripes;
		__entry->type		= map->type;
		__entry->sub_stripes	= map->sub_stripes;
		__entry->offset		= offset;
		__entry->size		= size;
920
		__entry->root_objectid	= fs_info->chunk_root->root_key.objectid;
921 922
	),

923 924
	TP_printk_btrfs("root=%llu(%s) offset=%llu size=%llu "
		  "num_stripes=%d sub_stripes=%d type=%s",
925
		  show_root_type(__entry->root_objectid),
926 927
		  __entry->offset,
		  __entry->size,
928 929 930 931 932 933
		  __entry->num_stripes, __entry->sub_stripes,
		  show_chunk_type(__entry->type))
);

DEFINE_EVENT(btrfs__chunk,  btrfs_chunk_alloc,

934 935
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct map_lookup *map, u64 offset, u64 size),
936

937
	TP_ARGS(fs_info, map, offset, size)
938 939 940 941
);

DEFINE_EVENT(btrfs__chunk,  btrfs_chunk_free,

942 943
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct map_lookup *map, u64 offset, u64 size),
944

945
	TP_ARGS(fs_info, map, offset, size)
946 947 948 949
);

TRACE_EVENT(btrfs_cow_block,

950 951
	TP_PROTO(const struct btrfs_root *root, const struct extent_buffer *buf,
		 const struct extent_buffer *cow),
952 953 954

	TP_ARGS(root, buf, cow),

955
	TP_STRUCT__entry_btrfs(
956 957 958 959 960 961 962 963
		__field(	u64,  root_objectid		)
		__field(	u64,  buf_start			)
		__field(	int,  refs			)
		__field(	u64,  cow_start			)
		__field(	int,  buf_level			)
		__field(	int,  cow_level			)
	),

964
	TP_fast_assign_btrfs(root->fs_info,
965 966 967 968 969 970 971 972
		__entry->root_objectid	= root->root_key.objectid;
		__entry->buf_start	= buf->start;
		__entry->refs		= atomic_read(&buf->refs);
		__entry->cow_start	= cow->start;
		__entry->buf_level	= btrfs_header_level(buf);
		__entry->cow_level	= btrfs_header_level(cow);
	),

973 974
	TP_printk_btrfs("root=%llu(%s) refs=%d orig_buf=%llu "
		  "(orig_level=%d) cow_buf=%llu (cow_level=%d)",
975 976
		  show_root_type(__entry->root_objectid),
		  __entry->refs,
977
		  __entry->buf_start,
978
		  __entry->buf_level,
979
		  __entry->cow_start,
980 981 982
		  __entry->cow_level)
);

J
Josef Bacik 已提交
983 984
TRACE_EVENT(btrfs_space_reservation,

985
	TP_PROTO(const struct btrfs_fs_info *fs_info, char *type, u64 val,
J
Josef Bacik 已提交
986 987 988 989
		 u64 bytes, int reserve),

	TP_ARGS(fs_info, type, val, bytes, reserve),

990
	TP_STRUCT__entry_btrfs(
J
Josef Bacik 已提交
991 992 993 994 995 996
		__string(	type,	type			)
		__field(	u64,	val			)
		__field(	u64,	bytes			)
		__field(	int,	reserve			)
	),

997
	TP_fast_assign_btrfs(fs_info,
J
Josef Bacik 已提交
998 999 1000 1001 1002 1003
		__assign_str(type, type);
		__entry->val		= val;
		__entry->bytes		= bytes;
		__entry->reserve	= reserve;
	),

1004
	TP_printk_btrfs("%s: %llu %s %llu", __get_str(type), __entry->val,
1005 1006
			__entry->reserve ? "reserve" : "release",
			__entry->bytes)
J
Josef Bacik 已提交
1007 1008
);

1009 1010 1011 1012 1013 1014 1015 1016
#define show_flush_action(action)						\
	__print_symbolic(action,						\
		{ BTRFS_RESERVE_NO_FLUSH,	"BTRFS_RESERVE_NO_FLUSH"},	\
		{ BTRFS_RESERVE_FLUSH_LIMIT,	"BTRFS_RESERVE_FLUSH_LIMIT"},	\
		{ BTRFS_RESERVE_FLUSH_ALL,	"BTRFS_RESERVE_FLUSH_ALL"})

TRACE_EVENT(btrfs_trigger_flush,

1017
	TP_PROTO(const struct btrfs_fs_info *fs_info, u64 flags, u64 bytes,
1018 1019 1020 1021
		 int flush, char *reason),

	TP_ARGS(fs_info, flags, bytes, flush, reason),

1022
	TP_STRUCT__entry_btrfs(
1023 1024 1025 1026 1027 1028
		__field(	u64,	flags			)
		__field(	u64,	bytes			)
		__field(	int,	flush			)
		__string(	reason,	reason			)
	),

1029
	TP_fast_assign_btrfs(fs_info,
1030 1031 1032 1033 1034 1035
		__entry->flags	= flags;
		__entry->bytes	= bytes;
		__entry->flush	= flush;
		__assign_str(reason, reason)
	),

1036 1037
	TP_printk_btrfs("%s: flush=%d(%s) flags=%llu(%s) bytes=%llu",
		  __get_str(reason), __entry->flush,
1038
		  show_flush_action(__entry->flush),
1039
		  __entry->flags,
1040 1041
		  __print_flags((unsigned long)__entry->flags, "|",
				BTRFS_GROUP_FLAGS),
1042
		  __entry->bytes)
1043 1044 1045 1046 1047 1048 1049 1050
);

#define show_flush_state(state)							\
	__print_symbolic(state,							\
		{ FLUSH_DELAYED_ITEMS_NR,	"FLUSH_DELAYED_ITEMS_NR"},	\
		{ FLUSH_DELAYED_ITEMS,		"FLUSH_DELAYED_ITEMS"},		\
		{ FLUSH_DELALLOC,		"FLUSH_DELALLOC"},		\
		{ FLUSH_DELALLOC_WAIT,		"FLUSH_DELALLOC_WAIT"},		\
1051 1052
		{ FLUSH_DELAYED_REFS_NR,	"FLUSH_DELAYED_REFS_NR"},	\
		{ FLUSH_DELAYED_REFS,		"FLUSH_ELAYED_REFS"},		\
1053
		{ ALLOC_CHUNK,			"ALLOC_CHUNK"},			\
1054
		{ ALLOC_CHUNK_FORCE,		"ALLOC_CHUNK_FORCE"},		\
1055 1056 1057 1058
		{ COMMIT_TRANS,			"COMMIT_TRANS"})

TRACE_EVENT(btrfs_flush_space,

1059
	TP_PROTO(const struct btrfs_fs_info *fs_info, u64 flags, u64 num_bytes,
1060
		 int state, int ret),
1061

1062
	TP_ARGS(fs_info, flags, num_bytes, state, ret),
1063

1064
	TP_STRUCT__entry_btrfs(
1065 1066 1067 1068 1069 1070
		__field(	u64,	flags			)
		__field(	u64,	num_bytes		)
		__field(	int,	state			)
		__field(	int,	ret			)
	),

1071
	TP_fast_assign_btrfs(fs_info,
1072 1073 1074 1075 1076 1077
		__entry->flags		=	flags;
		__entry->num_bytes	=	num_bytes;
		__entry->state		=	state;
		__entry->ret		=	ret;
	),

1078 1079
	TP_printk_btrfs("state=%d(%s) flags=%llu(%s) num_bytes=%llu ret=%d",
		  __entry->state,
1080
		  show_flush_state(__entry->state),
1081
		  __entry->flags,
1082 1083
		  __print_flags((unsigned long)__entry->flags, "|",
				BTRFS_GROUP_FLAGS),
1084
		  __entry->num_bytes, __entry->ret)
1085 1086
);

1087 1088
DECLARE_EVENT_CLASS(btrfs__reserved_extent,

1089
	TP_PROTO(const struct btrfs_fs_info *fs_info, u64 start, u64 len),
1090

1091
	TP_ARGS(fs_info, start, len),
1092

1093 1094 1095
	TP_STRUCT__entry_btrfs(
		__field(	u64,  start			)
		__field(	u64,  len			)
1096 1097
	),

1098
	TP_fast_assign_btrfs(fs_info,
1099 1100 1101 1102
		__entry->start		= start;
		__entry->len		= len;
	),

1103
	TP_printk_btrfs("root=%llu(%s) start=%llu len=%llu",
1104
		  show_root_type(BTRFS_EXTENT_TREE_OBJECTID),
1105 1106
		  __entry->start,
		  __entry->len)
1107 1108 1109 1110
);

DEFINE_EVENT(btrfs__reserved_extent,  btrfs_reserved_extent_alloc,

1111
	TP_PROTO(const struct btrfs_fs_info *fs_info, u64 start, u64 len),
1112

1113
	TP_ARGS(fs_info, start, len)
1114 1115 1116 1117
);

DEFINE_EVENT(btrfs__reserved_extent,  btrfs_reserved_extent_free,

1118
	TP_PROTO(const struct btrfs_fs_info *fs_info, u64 start, u64 len),
1119

1120
	TP_ARGS(fs_info, start, len)
1121 1122
);

J
Josef Bacik 已提交
1123 1124
TRACE_EVENT(find_free_extent,

1125 1126
	TP_PROTO(const struct btrfs_fs_info *fs_info, u64 num_bytes,
		 u64 empty_size, u64 data),
J
Josef Bacik 已提交
1127

1128
	TP_ARGS(fs_info, num_bytes, empty_size, data),
J
Josef Bacik 已提交
1129

1130
	TP_STRUCT__entry_btrfs(
J
Josef Bacik 已提交
1131 1132 1133 1134 1135
		__field(	u64,	num_bytes		)
		__field(	u64,	empty_size		)
		__field(	u64,	data			)
	),

1136
	TP_fast_assign_btrfs(fs_info,
J
Josef Bacik 已提交
1137 1138 1139 1140 1141
		__entry->num_bytes	= num_bytes;
		__entry->empty_size	= empty_size;
		__entry->data		= data;
	),

1142
	TP_printk_btrfs("root=%llu(%s) len=%llu empty_size=%llu flags=%llu(%s)",
1143
		  show_root_type(BTRFS_EXTENT_TREE_OBJECTID),
J
Josef Bacik 已提交
1144 1145 1146 1147 1148 1149 1150
		  __entry->num_bytes, __entry->empty_size, __entry->data,
		  __print_flags((unsigned long)__entry->data, "|",
				 BTRFS_GROUP_FLAGS))
);

DECLARE_EVENT_CLASS(btrfs__reserve_extent,

1151
	TP_PROTO(const struct btrfs_block_group_cache *block_group, u64 start,
J
Josef Bacik 已提交
1152 1153
		 u64 len),

1154
	TP_ARGS(block_group, start, len),
J
Josef Bacik 已提交
1155

1156
	TP_STRUCT__entry_btrfs(
J
Josef Bacik 已提交
1157 1158 1159 1160 1161 1162
		__field(	u64,	bg_objectid		)
		__field(	u64,	flags			)
		__field(	u64,	start			)
		__field(	u64,	len			)
	),

1163
	TP_fast_assign_btrfs(block_group->fs_info,
J
Josef Bacik 已提交
1164 1165 1166 1167 1168 1169
		__entry->bg_objectid	= block_group->key.objectid;
		__entry->flags		= block_group->flags;
		__entry->start		= start;
		__entry->len		= len;
	),

1170 1171
	TP_printk_btrfs("root=%llu(%s) block_group=%llu flags=%llu(%s) "
		  "start=%llu len=%llu",
1172 1173
		  show_root_type(BTRFS_EXTENT_TREE_OBJECTID),
		  __entry->bg_objectid,
J
Josef Bacik 已提交
1174 1175 1176 1177 1178 1179 1180
		  __entry->flags, __print_flags((unsigned long)__entry->flags,
						"|", BTRFS_GROUP_FLAGS),
		  __entry->start, __entry->len)
);

DEFINE_EVENT(btrfs__reserve_extent, btrfs_reserve_extent,

1181
	TP_PROTO(const struct btrfs_block_group_cache *block_group, u64 start,
J
Josef Bacik 已提交
1182 1183
		 u64 len),

1184
	TP_ARGS(block_group, start, len)
J
Josef Bacik 已提交
1185 1186 1187 1188
);

DEFINE_EVENT(btrfs__reserve_extent, btrfs_reserve_extent_cluster,

1189
	TP_PROTO(const struct btrfs_block_group_cache *block_group, u64 start,
J
Josef Bacik 已提交
1190 1191
		 u64 len),

1192
	TP_ARGS(block_group, start, len)
J
Josef Bacik 已提交
1193 1194 1195 1196
);

TRACE_EVENT(btrfs_find_cluster,

1197
	TP_PROTO(const struct btrfs_block_group_cache *block_group, u64 start,
J
Josef Bacik 已提交
1198 1199 1200 1201
		 u64 bytes, u64 empty_size, u64 min_bytes),

	TP_ARGS(block_group, start, bytes, empty_size, min_bytes),

1202
	TP_STRUCT__entry_btrfs(
J
Josef Bacik 已提交
1203 1204 1205 1206 1207 1208 1209 1210
		__field(	u64,	bg_objectid		)
		__field(	u64,	flags			)
		__field(	u64,	start			)
		__field(	u64,	bytes			)
		__field(	u64,	empty_size		)
		__field(	u64,	min_bytes		)
	),

1211
	TP_fast_assign_btrfs(block_group->fs_info,
J
Josef Bacik 已提交
1212 1213 1214 1215 1216 1217 1218 1219
		__entry->bg_objectid	= block_group->key.objectid;
		__entry->flags		= block_group->flags;
		__entry->start		= start;
		__entry->bytes		= bytes;
		__entry->empty_size	= empty_size;
		__entry->min_bytes	= min_bytes;
	),

1220 1221
	TP_printk_btrfs("block_group=%llu flags=%llu(%s) start=%llu len=%llu "
		  "empty_size=%llu min_bytes=%llu", __entry->bg_objectid,
J
Josef Bacik 已提交
1222 1223 1224 1225 1226 1227 1228 1229
		  __entry->flags,
		  __print_flags((unsigned long)__entry->flags, "|",
				BTRFS_GROUP_FLAGS), __entry->start,
		  __entry->bytes, __entry->empty_size,  __entry->min_bytes)
);

TRACE_EVENT(btrfs_failed_cluster_setup,

1230
	TP_PROTO(const struct btrfs_block_group_cache *block_group),
J
Josef Bacik 已提交
1231 1232 1233

	TP_ARGS(block_group),

1234
	TP_STRUCT__entry_btrfs(
J
Josef Bacik 已提交
1235 1236 1237
		__field(	u64,	bg_objectid		)
	),

1238
	TP_fast_assign_btrfs(block_group->fs_info,
J
Josef Bacik 已提交
1239 1240 1241
		__entry->bg_objectid	= block_group->key.objectid;
	),

1242
	TP_printk_btrfs("block_group=%llu", __entry->bg_objectid)
J
Josef Bacik 已提交
1243 1244 1245 1246
);

TRACE_EVENT(btrfs_setup_cluster,

1247 1248 1249
	TP_PROTO(const struct btrfs_block_group_cache *block_group,
		 const struct btrfs_free_cluster *cluster,
		 u64 size, int bitmap),
J
Josef Bacik 已提交
1250 1251 1252

	TP_ARGS(block_group, cluster, size, bitmap),

1253
	TP_STRUCT__entry_btrfs(
J
Josef Bacik 已提交
1254 1255 1256 1257 1258 1259 1260 1261
		__field(	u64,	bg_objectid		)
		__field(	u64,	flags			)
		__field(	u64,	start			)
		__field(	u64,	max_size		)
		__field(	u64,	size			)
		__field(	int,	bitmap			)
	),

1262
	TP_fast_assign_btrfs(block_group->fs_info,
J
Josef Bacik 已提交
1263 1264 1265 1266 1267 1268 1269 1270
		__entry->bg_objectid	= block_group->key.objectid;
		__entry->flags		= block_group->flags;
		__entry->start		= cluster->window_start;
		__entry->max_size	= cluster->max_size;
		__entry->size		= size;
		__entry->bitmap		= bitmap;
	),

1271 1272
	TP_printk_btrfs("block_group=%llu flags=%llu(%s) window_start=%llu "
		  "size=%llu max_size=%llu bitmap=%d",
J
Josef Bacik 已提交
1273 1274 1275 1276 1277 1278 1279
		  __entry->bg_objectid,
		  __entry->flags,
		  __print_flags((unsigned long)__entry->flags, "|",
				BTRFS_GROUP_FLAGS), __entry->start,
		  __entry->size, __entry->max_size, __entry->bitmap)
);

1280 1281 1282
struct extent_state;
TRACE_EVENT(alloc_extent_state,

1283 1284
	TP_PROTO(const struct extent_state *state,
		 gfp_t mask, unsigned long IP),
1285 1286 1287 1288

	TP_ARGS(state, mask, IP),

	TP_STRUCT__entry(
1289
		__field(const struct extent_state *, state)
1290 1291 1292 1293 1294 1295 1296 1297 1298 1299
		__field(gfp_t, mask)
		__field(unsigned long, ip)
	),

	TP_fast_assign(
		__entry->state	= state,
		__entry->mask	= mask,
		__entry->ip	= IP
	),

1300
	TP_printk("state=%p mask=%s caller=%pS", __entry->state,
1301
		  show_gfp_flags(__entry->mask), (const void *)__entry->ip)
1302 1303 1304 1305
);

TRACE_EVENT(free_extent_state,

1306
	TP_PROTO(const struct extent_state *state, unsigned long IP),
1307 1308 1309 1310

	TP_ARGS(state, IP),

	TP_STRUCT__entry(
1311
		__field(const struct extent_state *, state)
1312 1313 1314 1315 1316 1317 1318 1319
		__field(unsigned long, ip)
	),

	TP_fast_assign(
		__entry->state	= state,
		__entry->ip = IP
	),

1320
	TP_printk("state=%p caller=%pS", __entry->state,
1321
		  (const void *)__entry->ip)
1322 1323
);

1324 1325
DECLARE_EVENT_CLASS(btrfs__work,

1326
	TP_PROTO(const struct btrfs_work *work),
1327 1328 1329

	TP_ARGS(work),

1330
	TP_STRUCT__entry_btrfs(
1331 1332 1333 1334 1335 1336
		__field(	const void *,	work			)
		__field(	const void *,	wq			)
		__field(	const void *,	func			)
		__field(	const void *,	ordered_func		)
		__field(	const void *,	ordered_free		)
		__field(	const void *,	normal_work		)
1337 1338
	),

1339
	TP_fast_assign_btrfs(btrfs_work_owner(work),
1340 1341 1342 1343 1344
		__entry->work		= work;
		__entry->wq		= work->wq;
		__entry->func		= work->func;
		__entry->ordered_func	= work->ordered_func;
		__entry->ordered_free	= work->ordered_free;
1345
		__entry->normal_work	= &work->normal_work;
1346 1347
	),

1348 1349
	TP_printk_btrfs("work=%p (normal_work=%p) wq=%p func=%pf ordered_func=%p "
		  "ordered_free=%p",
1350 1351
		  __entry->work, __entry->normal_work, __entry->wq,
		   __entry->func, __entry->ordered_func, __entry->ordered_free)
1352 1353
);

1354 1355 1356 1357 1358
/*
 * For situiations when the work is freed, we pass fs_info and a tag that that
 * matches address of the work structure so it can be paired with the
 * scheduling event.
 */
1359 1360
DECLARE_EVENT_CLASS(btrfs__work__done,

1361
	TP_PROTO(const struct btrfs_fs_info *fs_info, const void *wtag),
1362

1363
	TP_ARGS(fs_info, wtag),
1364

1365
	TP_STRUCT__entry_btrfs(
1366
		__field(	const void *,	wtag			)
1367 1368
	),

1369 1370
	TP_fast_assign_btrfs(fs_info,
		__entry->wtag		= wtag;
1371 1372
	),

1373
	TP_printk_btrfs("work->%p", __entry->wtag)
1374 1375 1376 1377
);

DEFINE_EVENT(btrfs__work, btrfs_work_queued,

1378
	TP_PROTO(const struct btrfs_work *work),
1379 1380 1381 1382 1383 1384

	TP_ARGS(work)
);

DEFINE_EVENT(btrfs__work, btrfs_work_sched,

1385
	TP_PROTO(const struct btrfs_work *work),
1386 1387 1388 1389 1390 1391

	TP_ARGS(work)
);

DEFINE_EVENT(btrfs__work__done, btrfs_all_work_done,

1392
	TP_PROTO(const struct btrfs_fs_info *fs_info, const void *wtag),
1393

1394
	TP_ARGS(fs_info, wtag)
1395 1396 1397 1398
);

DEFINE_EVENT(btrfs__work, btrfs_ordered_sched,

1399
	TP_PROTO(const struct btrfs_work *work),
1400 1401 1402 1403

	TP_ARGS(work)
);

1404 1405
DECLARE_EVENT_CLASS(btrfs__workqueue,

1406 1407
	TP_PROTO(const struct __btrfs_workqueue *wq,
		 const char *name, int high),
1408 1409 1410

	TP_ARGS(wq, name, high),

1411
	TP_STRUCT__entry_btrfs(
1412
		__field(	const void *,	wq			)
1413 1414 1415 1416
		__string(	name,	name			)
		__field(	int ,	high			)
	),

1417
	TP_fast_assign_btrfs(btrfs_workqueue_owner(wq),
1418 1419 1420 1421 1422
		__entry->wq		= wq;
		__assign_str(name, name);
		__entry->high		= high;
	),

1423
	TP_printk_btrfs("name=%s%s wq=%p", __get_str(name),
1424 1425 1426 1427 1428 1429 1430
		  __print_flags(__entry->high, "",
				{(WQ_HIGHPRI),	"-high"}),
		  __entry->wq)
);

DEFINE_EVENT(btrfs__workqueue, btrfs_workqueue_alloc,

1431 1432
	TP_PROTO(const struct __btrfs_workqueue *wq,
		 const char *name, int high),
1433 1434 1435 1436 1437 1438

	TP_ARGS(wq, name, high)
);

DECLARE_EVENT_CLASS(btrfs__workqueue_done,

1439
	TP_PROTO(const struct __btrfs_workqueue *wq),
1440 1441 1442

	TP_ARGS(wq),

1443
	TP_STRUCT__entry_btrfs(
1444
		__field(	const void *,	wq		)
1445 1446
	),

1447
	TP_fast_assign_btrfs(btrfs_workqueue_owner(wq),
1448 1449 1450
		__entry->wq		= wq;
	),

1451
	TP_printk_btrfs("wq=%p", __entry->wq)
1452 1453 1454 1455
);

DEFINE_EVENT(btrfs__workqueue_done, btrfs_workqueue_destroy,

1456
	TP_PROTO(const struct __btrfs_workqueue *wq),
1457 1458 1459

	TP_ARGS(wq)
);
1460

1461 1462 1463 1464 1465 1466 1467
#define BTRFS_QGROUP_OPERATIONS				\
	{ QGROUP_RESERVE,	"reserve"	},	\
	{ QGROUP_RELEASE,	"release"	},	\
	{ QGROUP_FREE,		"free"		}

DECLARE_EVENT_CLASS(btrfs__qgroup_rsv_data,

1468 1469
	TP_PROTO(const struct inode *inode, u64 start, u64 len,
		 u64 reserved, int op),
1470 1471 1472

	TP_ARGS(inode, start, len, reserved, op),

1473
	TP_STRUCT__entry_btrfs(
1474
		__field(	u64,		rootid		)
1475
		__field(	u64,		ino		)
1476 1477 1478 1479 1480 1481
		__field(	u64,		start		)
		__field(	u64,		len		)
		__field(	u64,		reserved	)
		__field(	int,		op		)
	),

1482
	TP_fast_assign_btrfs(btrfs_sb(inode->i_sb),
1483 1484
		__entry->rootid		=
			BTRFS_I(inode)->root->root_key.objectid;
1485
		__entry->ino		= btrfs_ino(BTRFS_I(inode));
1486 1487 1488 1489 1490 1491
		__entry->start		= start;
		__entry->len		= len;
		__entry->reserved	= reserved;
		__entry->op		= op;
	),

1492
	TP_printk_btrfs("root=%llu ino=%llu start=%llu len=%llu reserved=%llu op=%s",
1493 1494 1495 1496 1497 1498 1499 1500 1501
		  __entry->rootid, __entry->ino, __entry->start, __entry->len,
		  __entry->reserved,
		  __print_flags((unsigned long)__entry->op, "",
				BTRFS_QGROUP_OPERATIONS)
	)
);

DEFINE_EVENT(btrfs__qgroup_rsv_data, btrfs_qgroup_reserve_data,

1502 1503
	TP_PROTO(const struct inode *inode, u64 start, u64 len,
		 u64 reserved, int op),
1504 1505 1506 1507 1508 1509

	TP_ARGS(inode, start, len, reserved, op)
);

DEFINE_EVENT(btrfs__qgroup_rsv_data, btrfs_qgroup_release_data,

1510 1511
	TP_PROTO(const struct inode *inode, u64 start, u64 len,
		 u64 reserved, int op),
1512 1513 1514 1515 1516 1517

	TP_ARGS(inode, start, len, reserved, op)
);

DECLARE_EVENT_CLASS(btrfs__qgroup_delayed_ref,

1518 1519
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 u64 ref_root, u64 reserved),
1520

1521
	TP_ARGS(fs_info, ref_root, reserved),
1522

1523
	TP_STRUCT__entry_btrfs(
1524 1525 1526 1527
		__field(	u64,		ref_root	)
		__field(	u64,		reserved	)
	),

1528
	TP_fast_assign_btrfs(fs_info,
1529 1530 1531 1532
		__entry->ref_root	= ref_root;
		__entry->reserved	= reserved;
	),

1533
	TP_printk_btrfs("root=%llu reserved=%llu op=free",
1534 1535 1536 1537 1538
		  __entry->ref_root, __entry->reserved)
);

DEFINE_EVENT(btrfs__qgroup_delayed_ref, btrfs_qgroup_free_delayed_ref,

1539 1540
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 u64 ref_root, u64 reserved),
1541

1542
	TP_ARGS(fs_info, ref_root, reserved)
1543
);
M
Mark Fasheh 已提交
1544 1545

DECLARE_EVENT_CLASS(btrfs_qgroup_extent,
1546 1547
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_qgroup_extent_record *rec),
M
Mark Fasheh 已提交
1548

1549
	TP_ARGS(fs_info, rec),
M
Mark Fasheh 已提交
1550

1551
	TP_STRUCT__entry_btrfs(
M
Mark Fasheh 已提交
1552 1553 1554 1555
		__field(	u64,  bytenr		)
		__field(	u64,  num_bytes		)
	),

1556
	TP_fast_assign_btrfs(fs_info,
M
Mark Fasheh 已提交
1557 1558 1559 1560
		__entry->bytenr		= rec->bytenr,
		__entry->num_bytes	= rec->num_bytes;
	),

1561
	TP_printk_btrfs("bytenr=%llu num_bytes=%llu",
M
Mark Fasheh 已提交
1562 1563 1564 1565 1566 1567
		  (unsigned long long)__entry->bytenr,
		  (unsigned long long)__entry->num_bytes)
);

DEFINE_EVENT(btrfs_qgroup_extent, btrfs_qgroup_account_extents,

1568 1569
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_qgroup_extent_record *rec),
M
Mark Fasheh 已提交
1570

1571
	TP_ARGS(fs_info, rec)
M
Mark Fasheh 已提交
1572 1573
);

1574
DEFINE_EVENT(btrfs_qgroup_extent, btrfs_qgroup_trace_extent,
M
Mark Fasheh 已提交
1575

1576 1577
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct btrfs_qgroup_extent_record *rec),
M
Mark Fasheh 已提交
1578

1579
	TP_ARGS(fs_info, rec)
M
Mark Fasheh 已提交
1580 1581
);

1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602
TRACE_EVENT(qgroup_num_dirty_extents,

	TP_PROTO(const struct btrfs_fs_info *fs_info, u64 transid,
		 u64 num_dirty_extents),

	TP_ARGS(fs_info, transid, num_dirty_extents),

	TP_STRUCT__entry_btrfs(
		__field(	u64, transid			)
		__field(	u64, num_dirty_extents		)
	),

	TP_fast_assign_btrfs(fs_info,
		__entry->transid	   = transid;
		__entry->num_dirty_extents = num_dirty_extents;
	),

	TP_printk_btrfs("transid=%llu num_dirty_extents=%llu",
		__entry->transid, __entry->num_dirty_extents)
);

M
Mark Fasheh 已提交
1603 1604
TRACE_EVENT(btrfs_qgroup_account_extent,

1605
	TP_PROTO(const struct btrfs_fs_info *fs_info, u64 transid, u64 bytenr,
1606
		 u64 num_bytes, u64 nr_old_roots, u64 nr_new_roots),
M
Mark Fasheh 已提交
1607

1608 1609
	TP_ARGS(fs_info, transid, bytenr, num_bytes, nr_old_roots,
		nr_new_roots),
M
Mark Fasheh 已提交
1610

1611
	TP_STRUCT__entry_btrfs(
1612
		__field(	u64,  transid			)
M
Mark Fasheh 已提交
1613 1614 1615 1616 1617 1618
		__field(	u64,  bytenr			)
		__field(	u64,  num_bytes			)
		__field(	u64,  nr_old_roots		)
		__field(	u64,  nr_new_roots		)
	),

1619
	TP_fast_assign_btrfs(fs_info,
1620
		__entry->transid	= transid;
M
Mark Fasheh 已提交
1621 1622 1623 1624 1625 1626
		__entry->bytenr		= bytenr;
		__entry->num_bytes	= num_bytes;
		__entry->nr_old_roots	= nr_old_roots;
		__entry->nr_new_roots	= nr_new_roots;
	),

1627 1628 1629 1630 1631 1632 1633
	TP_printk_btrfs(
"transid=%llu bytenr=%llu num_bytes=%llu nr_old_roots=%llu nr_new_roots=%llu",
		__entry->transid,
		__entry->bytenr,
		__entry->num_bytes,
		__entry->nr_old_roots,
		__entry->nr_new_roots)
M
Mark Fasheh 已提交
1634 1635 1636 1637
);

TRACE_EVENT(qgroup_update_counters,

1638 1639
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 struct btrfs_qgroup *qgroup,
1640
		 u64 cur_old_count, u64 cur_new_count),
M
Mark Fasheh 已提交
1641

1642
	TP_ARGS(fs_info, qgroup, cur_old_count, cur_new_count),
M
Mark Fasheh 已提交
1643

1644
	TP_STRUCT__entry_btrfs(
M
Mark Fasheh 已提交
1645
		__field(	u64,  qgid			)
1646 1647
		__field(	u64,  old_rfer			)
		__field(	u64,  old_excl			)
M
Mark Fasheh 已提交
1648 1649 1650 1651
		__field(	u64,  cur_old_count		)
		__field(	u64,  cur_new_count		)
	),

1652
	TP_fast_assign_btrfs(fs_info,
1653 1654 1655
		__entry->qgid		= qgroup->qgroupid;
		__entry->old_rfer	= qgroup->rfer;
		__entry->old_excl	= qgroup->excl;
M
Mark Fasheh 已提交
1656 1657 1658 1659
		__entry->cur_old_count	= cur_old_count;
		__entry->cur_new_count	= cur_new_count;
	),

1660 1661 1662
	TP_printk_btrfs("qgid=%llu old_rfer=%llu old_excl=%llu cur_old_count=%llu cur_new_count=%llu",
		  __entry->qgid, __entry->old_rfer, __entry->old_excl,
		  __entry->cur_old_count, __entry->cur_new_count)
M
Mark Fasheh 已提交
1663 1664
);

1665 1666 1667
TRACE_EVENT(qgroup_update_reserve,

	TP_PROTO(struct btrfs_fs_info *fs_info, struct btrfs_qgroup *qgroup,
1668
		 s64 diff, int type),
1669

1670
	TP_ARGS(fs_info, qgroup, diff, type),
1671 1672 1673 1674 1675

	TP_STRUCT__entry_btrfs(
		__field(	u64,	qgid			)
		__field(	u64,	cur_reserved		)
		__field(	s64,	diff			)
1676
		__field(	int,	type			)
1677 1678 1679 1680
	),

	TP_fast_assign_btrfs(fs_info,
		__entry->qgid		= qgroup->qgroupid;
1681
		__entry->cur_reserved	= qgroup->rsv.values[type];
1682 1683 1684
		__entry->diff		= diff;
	),

1685 1686 1687
	TP_printk_btrfs("qgid=%llu type=%s cur_reserved=%llu diff=%lld",
		__entry->qgid, show_qgroup_rsv_type(__entry->type),
		__entry->cur_reserved, __entry->diff)
1688 1689 1690 1691
);

TRACE_EVENT(qgroup_meta_reserve,

1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702
	TP_PROTO(struct btrfs_root *root, s64 diff, int type),

	TP_ARGS(root, diff, type),

	TP_STRUCT__entry_btrfs(
		__field(	u64,	refroot			)
		__field(	s64,	diff			)
		__field(	int,	type			)
	),

	TP_fast_assign_btrfs(root->fs_info,
1703
		__entry->refroot	= root->root_key.objectid;
1704 1705 1706 1707 1708 1709 1710 1711 1712 1713
		__entry->diff		= diff;
	),

	TP_printk_btrfs("refroot=%llu(%s) type=%s diff=%lld",
		show_root_type(__entry->refroot),
		show_qgroup_rsv_type(__entry->type), __entry->diff)
);

TRACE_EVENT(qgroup_meta_convert,

1714 1715 1716 1717 1718 1719 1720
	TP_PROTO(struct btrfs_root *root, s64 diff),

	TP_ARGS(root, diff),

	TP_STRUCT__entry_btrfs(
		__field(	u64,	refroot			)
		__field(	s64,	diff			)
1721
		__field(	int,	type			)
1722 1723 1724
	),

	TP_fast_assign_btrfs(root->fs_info,
1725
		__entry->refroot	= root->root_key.objectid;
1726 1727 1728
		__entry->diff		= diff;
	),

1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748
	TP_printk_btrfs("refroot=%llu(%s) type=%s->%s diff=%lld",
		show_root_type(__entry->refroot),
		show_qgroup_rsv_type(BTRFS_QGROUP_RSV_META_PREALLOC),
		show_qgroup_rsv_type(BTRFS_QGROUP_RSV_META_PERTRANS),
		__entry->diff)
);

TRACE_EVENT(qgroup_meta_free_all_pertrans,

	TP_PROTO(struct btrfs_root *root),

	TP_ARGS(root),

	TP_STRUCT__entry_btrfs(
		__field(	u64,	refroot			)
		__field(	s64,	diff			)
		__field(	int,	type			)
	),

	TP_fast_assign_btrfs(root->fs_info,
1749
		__entry->refroot	= root->root_key.objectid;
1750 1751 1752 1753 1754 1755 1756 1757 1758
		spin_lock(&root->qgroup_meta_rsv_lock);
		__entry->diff		= -(s64)root->qgroup_meta_rsv_pertrans;
		spin_unlock(&root->qgroup_meta_rsv_lock);
		__entry->type		= BTRFS_QGROUP_RSV_META_PERTRANS;
	),

	TP_printk_btrfs("refroot=%llu(%s) type=%s diff=%lld",
		show_root_type(__entry->refroot),
		show_qgroup_rsv_type(__entry->type), __entry->diff)
1759 1760
);

1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793
DECLARE_EVENT_CLASS(btrfs__prelim_ref,
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct prelim_ref *oldref,
		 const struct prelim_ref *newref, u64 tree_size),
	TP_ARGS(fs_info, newref, oldref, tree_size),

	TP_STRUCT__entry_btrfs(
		__field(	u64,  root_id		)
		__field(	u64,  objectid		)
		__field(	 u8,  type		)
		__field(	u64,  offset		)
		__field(	int,  level		)
		__field(	int,  old_count		)
		__field(	u64,  parent		)
		__field(	u64,  bytenr		)
		__field(	int,  mod_count		)
		__field(	u64,  tree_size		)
	),

	TP_fast_assign_btrfs(fs_info,
		__entry->root_id	= oldref->root_id;
		__entry->objectid	= oldref->key_for_search.objectid;
		__entry->type		= oldref->key_for_search.type;
		__entry->offset		= oldref->key_for_search.offset;
		__entry->level		= oldref->level;
		__entry->old_count	= oldref->count;
		__entry->parent		= oldref->parent;
		__entry->bytenr		= oldref->wanted_disk_byte;
		__entry->mod_count	= newref ? newref->count : 0;
		__entry->tree_size	= tree_size;
	),

	TP_printk_btrfs("root_id=%llu key=[%llu,%u,%llu] level=%d count=[%d+%d=%d] parent=%llu wanted_disk_byte=%llu nodes=%llu",
1794 1795 1796
			__entry->root_id,
			__entry->objectid, __entry->type,
			__entry->offset, __entry->level,
1797 1798
			__entry->old_count, __entry->mod_count,
			__entry->old_count + __entry->mod_count,
1799 1800 1801
			__entry->parent,
			__entry->bytenr,
			__entry->tree_size)
1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817
);

DEFINE_EVENT(btrfs__prelim_ref, btrfs_prelim_ref_merge,
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct prelim_ref *oldref,
		 const struct prelim_ref *newref, u64 tree_size),
	TP_ARGS(fs_info, oldref, newref, tree_size)
);

DEFINE_EVENT(btrfs__prelim_ref, btrfs_prelim_ref_insert,
	TP_PROTO(const struct btrfs_fs_info *fs_info,
		 const struct prelim_ref *oldref,
		 const struct prelim_ref *newref, u64 tree_size),
	TP_ARGS(fs_info, oldref, newref, tree_size)
);

1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829
TRACE_EVENT(btrfs_inode_mod_outstanding_extents,
	TP_PROTO(struct btrfs_root *root, u64 ino, int mod),

	TP_ARGS(root, ino, mod),

	TP_STRUCT__entry_btrfs(
		__field(	u64, root_objectid	)
		__field(	u64, ino		)
		__field(	int, mod		)
	),

	TP_fast_assign_btrfs(root->fs_info,
1830
		__entry->root_objectid	= root->root_key.objectid;
1831 1832 1833 1834 1835 1836
		__entry->ino		= ino;
		__entry->mod		= mod;
	),

	TP_printk_btrfs("root=%llu(%s) ino=%llu mod=%d",
			show_root_type(__entry->root_objectid),
1837
			__entry->ino, __entry->mod)
1838
);
1839

1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881
DECLARE_EVENT_CLASS(btrfs__block_group,
	TP_PROTO(const struct btrfs_block_group_cache *bg_cache),

	TP_ARGS(bg_cache),

	TP_STRUCT__entry_btrfs(
		__field(	u64,	bytenr		)
		__field(	u64,	len		)
		__field(	u64,	used		)
		__field(	u64,	flags		)
	),

	TP_fast_assign_btrfs(bg_cache->fs_info,
		__entry->bytenr = bg_cache->key.objectid,
		__entry->len	= bg_cache->key.offset,
		__entry->used	= btrfs_block_group_used(&bg_cache->item);
		__entry->flags	= bg_cache->flags;
	),

	TP_printk_btrfs("bg bytenr=%llu len=%llu used=%llu flags=%llu(%s)",
		__entry->bytenr, __entry->len, __entry->used, __entry->flags,
		__print_flags(__entry->flags, "|", BTRFS_GROUP_FLAGS))
);

DEFINE_EVENT(btrfs__block_group, btrfs_remove_block_group,
	TP_PROTO(const struct btrfs_block_group_cache *bg_cache),

	TP_ARGS(bg_cache)
);

DEFINE_EVENT(btrfs__block_group, btrfs_add_unused_block_group,
	TP_PROTO(const struct btrfs_block_group_cache *bg_cache),

	TP_ARGS(bg_cache)
);

DEFINE_EVENT(btrfs__block_group, btrfs_skip_unused_block_group,
	TP_PROTO(const struct btrfs_block_group_cache *bg_cache),

	TP_ARGS(bg_cache)
);

1882 1883 1884 1885
#endif /* _TRACE_BTRFS_H */

/* This part must be outside protection */
#include <trace/define_trace.h>