Files
scoutfs/kmod/src/scoutfs_trace.h
T
2025-10-06 12:27:25 -05:00

3072 lines
86 KiB
C

/*
* Copyright (C) 2016 Versity Software, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License v2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/
/*
* This has a crazy name because it's in an external module build at
* the moment. When it's merged upstream it'll move to
* include/trace/events/scoutfs.h
*/
#undef TRACE_SYSTEM
#define TRACE_SYSTEM scoutfs
#if !defined(_TRACE_SCOUTFS_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_SCOUTFS_H
#include <linux/tracepoint.h>
#include <linux/in.h>
#include "key.h"
#include "format.h"
#include "lock.h"
#include "super.h"
#include "ioctl.h"
#include "export.h"
#include "dir.h"
#include "server.h"
#include "net.h"
#include "data.h"
#include "ext.h"
#include "quota.h"
#include "trace/quota.h"
#include "trace/wkic.h"
struct lock_info;
#define STE_FMT "[%llu %llu %llu 0x%x]"
#define STE_ARGS(te) (te)->start, (te)->len, (te)->map, (te)->flags
#define STE_FIELDS(pref) \
__field(__u64, pref##_start) \
__field(__u64, pref##_len) \
__field(__u64, pref##_map) \
__field(__u8, pref##_flags)
#define STE_ASSIGN(pref, te) \
__entry->pref##_start = (te)->start; \
__entry->pref##_len = (te)->len; \
__entry->pref##_map = (te)->map; \
__entry->pref##_flags = (te)->flags;
#define STE_ENTRY_ARGS(pref) \
__entry->pref##_start, \
__entry->pref##_len, \
__entry->pref##_map, \
__entry->pref##_flags
DECLARE_EVENT_CLASS(scoutfs_ino_ret_class,
TP_PROTO(struct super_block *sb, u64 ino, int ret),
TP_ARGS(sb, ino, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->ret = ret;
),
TP_printk(SCSBF" ino %llu ret %d",
SCSB_TRACE_ARGS, __entry->ino, __entry->ret)
);
TRACE_EVENT(scoutfs_setattr,
TP_PROTO(struct dentry *dentry, struct iattr *attr),
TP_ARGS(dentry, attr),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(unsigned int, d_len)
__string(d_name, dentry->d_name.name)
__field(__u64, i_size)
__field(__u64, ia_size)
__field(unsigned int, ia_valid)
__field(int, size_change)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(dentry->d_inode->i_sb);
__entry->ino = scoutfs_ino(dentry->d_inode);
__entry->d_len = dentry->d_name.len;
__assign_str(d_name, dentry->d_name.name);
__entry->ia_valid = attr->ia_valid;
__entry->size_change = !!(attr->ia_valid & ATTR_SIZE);
__entry->ia_size = attr->ia_size;
__entry->i_size = i_size_read(dentry->d_inode);
),
TP_printk(SCSBF" %s ino %llu ia_valid 0x%x size change %d ia_size "
"%llu i_size %llu", SCSB_TRACE_ARGS, __get_str(d_name),
__entry->ino, __entry->ia_valid, __entry->size_change,
__entry->ia_size, __entry->i_size)
);
TRACE_EVENT(scoutfs_complete_truncate,
TP_PROTO(struct inode *inode, __u32 flags),
TP_ARGS(inode, flags),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(__u64, i_size)
__field(__u32, flags)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(inode->i_sb);
__entry->ino = scoutfs_ino(inode);
__entry->i_size = i_size_read(inode);
__entry->flags = flags;
),
TP_printk(SCSBF" ino %llu i_size %llu flags 0x%x",
SCSB_TRACE_ARGS, __entry->ino, __entry->i_size,
__entry->flags)
);
TRACE_EVENT(scoutfs_data_fallocate,
TP_PROTO(struct super_block *sb, u64 ino, int mode, loff_t offset,
loff_t len, int ret),
TP_ARGS(sb, ino, mode, offset, len, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(int, mode)
__field(__u64, offset)
__field(__u64, len)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->mode = mode;
__entry->offset = offset;
__entry->len = len;
__entry->ret = ret;
),
TP_printk(SCSBF" ino %llu mode 0x%x offset %llu len %llu ret %d",
SCSB_TRACE_ARGS, __entry->ino, __entry->mode, __entry->offset,
__entry->len, __entry->ret)
);
TRACE_EVENT(scoutfs_data_move_blocks,
TP_PROTO(struct super_block *sb, u64 from_ino, u64 from_start, u64 len,
u64 map, u8 flags, u64 to_ino, u64 to_start),
TP_ARGS(sb, from_ino, from_start, len, map, flags, to_ino, to_start),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, from_ino)
__field(__u64, from_start)
__field(__u64, len)
__field(__u64, map)
__field(__u8, flags)
__field(__u64, to_ino)
__field(__u64, to_start)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->from_ino = from_ino;
__entry->from_start = from_start;
__entry->len = len;
__entry->map = map;
__entry->flags = flags;
__entry->to_ino = to_ino;
__entry->to_start = to_start;
),
TP_printk(SCSBF" from_ino %llu from_start %llu len %llu map %llu flags 0x%x to_ino %llu to_start %llu\n",
SCSB_TRACE_ARGS, __entry->from_ino, __entry->from_start,
__entry->len, __entry->map, __entry->flags, __entry->to_ino,
__entry->to_start)
);
TRACE_EVENT(scoutfs_data_fiemap,
TP_PROTO(struct super_block *sb, __u64 start, __u64 len, int ret),
TP_ARGS(sb, start, len, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, start)
__field(__u64, len)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->start = start;
__entry->len = len;
__entry->ret = ret;
),
TP_printk(SCSBF" start %llu len %llu ret %d", SCSB_TRACE_ARGS,
__entry->start, __entry->len, __entry->ret)
);
TRACE_EVENT(scoutfs_get_block,
TP_PROTO(struct super_block *sb, __u64 ino, __u64 iblock,
int create, struct scoutfs_extent *ext,
int ret, __u64 blkno, size_t size),
TP_ARGS(sb, ino, iblock, create, ext, ret, blkno, size),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(__u64, iblock)
__field(int, create)
STE_FIELDS(ext)
__field(int, ret)
__field(__u64, blkno)
__field(size_t, size)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->iblock = iblock;
__entry->create = create;
STE_ASSIGN(ext, ext)
__entry->ret = ret;
__entry->blkno = blkno;
__entry->size = size;
),
TP_printk(SCSBF" ino %llu iblock %llu create %d ext "STE_FMT" ret %d bnr %llu size %zu",
SCSB_TRACE_ARGS, __entry->ino, __entry->iblock,
__entry->create, STE_ENTRY_ARGS(ext), __entry->ret,
__entry->blkno, __entry->size)
);
TRACE_EVENT(scoutfs_data_alloc_block_enter,
TP_PROTO(struct super_block *sb, __u64 ino, __u64 iblock,
struct scoutfs_extent *ext),
TP_ARGS(sb, ino, iblock, ext),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(__u64, iblock)
STE_FIELDS(ext)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->iblock = iblock;
STE_ASSIGN(ext, ext)
),
TP_printk(SCSBF" ino %llu iblock %llu ext "STE_FMT,
SCSB_TRACE_ARGS, __entry->ino, __entry->iblock,
STE_ENTRY_ARGS(ext))
);
TRACE_EVENT(scoutfs_data_page_mkwrite,
TP_PROTO(struct super_block *sb, __u64 ino, __u64 pos, __u32 ret),
TP_ARGS(sb, ino, pos, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(__u64, pos)
__field(__u32, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->pos = pos;
__entry->ret = ret;
),
TP_printk(SCSBF" ino %llu pos %llu ret %u ",
SCSB_TRACE_ARGS, __entry->ino, __entry->pos, __entry->ret)
);
TRACE_EVENT(scoutfs_data_filemap_fault,
TP_PROTO(struct super_block *sb, __u64 ino, __u64 pos, __u32 ret),
TP_ARGS(sb, ino, pos, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(__u64, pos)
__field(__u32, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->pos = pos;
__entry->ret = ret;
),
TP_printk(SCSBF" ino %llu pos %llu ret %u ",
SCSB_TRACE_ARGS, __entry->ino, __entry->pos, __entry->ret)
);
DECLARE_EVENT_CLASS(scoutfs_data_file_extent_class,
TP_PROTO(struct super_block *sb, __u64 ino, struct scoutfs_extent *ext),
TP_ARGS(sb, ino, ext),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
STE_FIELDS(ext)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
STE_ASSIGN(ext, ext)
),
TP_printk(SCSBF" ino %llu ext "STE_FMT,
SCSB_TRACE_ARGS, __entry->ino, STE_ENTRY_ARGS(ext))
);
DEFINE_EVENT(scoutfs_data_file_extent_class, scoutfs_data_alloc,
TP_PROTO(struct super_block *sb, __u64 ino, struct scoutfs_extent *ext),
TP_ARGS(sb, ino, ext)
);
DEFINE_EVENT(scoutfs_data_file_extent_class, scoutfs_data_prealloc,
TP_PROTO(struct super_block *sb, __u64 ino, struct scoutfs_extent *ext),
TP_ARGS(sb, ino, ext)
);
DEFINE_EVENT(scoutfs_data_file_extent_class, scoutfs_data_get_block_found,
TP_PROTO(struct super_block *sb, __u64 ino, struct scoutfs_extent *ext),
TP_ARGS(sb, ino, ext)
);
DEFINE_EVENT(scoutfs_data_file_extent_class, scoutfs_data_get_block_mapped,
TP_PROTO(struct super_block *sb, __u64 ino, struct scoutfs_extent *ext),
TP_ARGS(sb, ino, ext)
);
DEFINE_EVENT(scoutfs_data_file_extent_class, scoutfs_data_extent_truncated,
TP_PROTO(struct super_block *sb, __u64 ino, struct scoutfs_extent *ext),
TP_ARGS(sb, ino, ext)
);
DEFINE_EVENT(scoutfs_data_file_extent_class, scoutfs_data_fiemap_extent,
TP_PROTO(struct super_block *sb, __u64 ino, struct scoutfs_extent *ext),
TP_ARGS(sb, ino, ext)
);
TRACE_EVENT(scoutfs_data_truncate_items,
TP_PROTO(struct super_block *sb, __u64 iblock, __u64 last, int offline),
TP_ARGS(sb, iblock, last, offline),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, iblock)
__field(__u64, last)
__field(int, offline)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->iblock = iblock;
__entry->last = last;
__entry->offline = offline;
),
TP_printk(SCSBF" iblock %llu last %llu offline %u", SCSB_TRACE_ARGS,
__entry->iblock, __entry->last, __entry->offline)
);
TRACE_EVENT(scoutfs_data_wait_check,
TP_PROTO(struct super_block *sb, __u64 ino, __u64 pos, __u64 len,
__u8 sef, __u8 op, struct scoutfs_extent *ext, int ret),
TP_ARGS(sb, ino, pos, len, sef, op, ext, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(__u64, pos)
__field(__u64, len)
__field(__u8, sef)
__field(__u8, op)
STE_FIELDS(ext)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->pos = pos;
__entry->len = len;
__entry->sef = sef;
__entry->op = op;
STE_ASSIGN(ext, ext)
__entry->ret = ret;
),
TP_printk(SCSBF" ino %llu pos %llu len %llu sef 0x%x op 0x%x ext "STE_FMT" ret %d",
SCSB_TRACE_ARGS, __entry->ino, __entry->pos, __entry->len,
__entry->sef, __entry->op, STE_ENTRY_ARGS(ext), __entry->ret)
);
TRACE_EVENT(scoutfs_sync_fs,
TP_PROTO(struct super_block *sb, int wait),
TP_ARGS(sb, wait),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(int, wait)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->wait = wait;
),
TP_printk(SCSBF" wait %d", SCSB_TRACE_ARGS, __entry->wait)
);
TRACE_EVENT(scoutfs_trans_write_func,
TP_PROTO(struct super_block *sb, u64 dirty_block_bytes, u64 dirty_item_pages),
TP_ARGS(sb, dirty_block_bytes, dirty_item_pages),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, dirty_block_bytes)
__field(__u64, dirty_item_pages)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->dirty_block_bytes = dirty_block_bytes;
__entry->dirty_item_pages = dirty_item_pages;
),
TP_printk(SCSBF" dirty_block_bytes %llu dirty_item_pages %llu",
SCSB_TRACE_ARGS, __entry->dirty_block_bytes, __entry->dirty_item_pages)
);
DECLARE_EVENT_CLASS(scoutfs_trans_hold_release_class,
TP_PROTO(struct super_block *sb, void *journal_info, int holders, int ret),
TP_ARGS(sb, journal_info, holders, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(unsigned long, journal_info)
__field(int, holders)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->journal_info = (unsigned long)journal_info;
__entry->holders = holders;
__entry->ret = ret;
),
TP_printk(SCSBF" journal_info 0x%0lx holders %d ret %d",
SCSB_TRACE_ARGS, __entry->journal_info, __entry->holders, __entry->ret)
);
DEFINE_EVENT(scoutfs_trans_hold_release_class, scoutfs_hold_trans,
TP_PROTO(struct super_block *sb, void *journal_info, int holders, int ret),
TP_ARGS(sb, journal_info, holders, ret)
);
DEFINE_EVENT(scoutfs_trans_hold_release_class, scoutfs_release_trans,
TP_PROTO(struct super_block *sb, void *journal_info, int holders, int ret),
TP_ARGS(sb, journal_info, holders, ret)
);
TRACE_EVENT(scoutfs_ioc_release,
TP_PROTO(struct super_block *sb, u64 ino,
struct scoutfs_ioctl_release *args),
TP_ARGS(sb, ino, args),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(__u64, offset)
__field(__u64, length)
__field(__u64, vers)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->offset = args->offset;
__entry->length = args->length;
__entry->vers = args->data_version;
),
TP_printk(SCSBF" ino %llu offset %llu length %llu vers %llu",
SCSB_TRACE_ARGS, __entry->ino, __entry->offset,
__entry->length, __entry->vers)
);
DEFINE_EVENT(scoutfs_ino_ret_class, scoutfs_ioc_release_ret,
TP_PROTO(struct super_block *sb, u64 ino, int ret),
TP_ARGS(sb, ino, ret)
);
TRACE_EVENT(scoutfs_ioc_stage,
TP_PROTO(struct super_block *sb, u64 ino,
struct scoutfs_ioctl_stage *args),
TP_ARGS(sb, ino, args),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(__u64, vers)
__field(__u64, offset)
__field(__s32, length)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->vers = args->data_version;
__entry->offset = args->offset;
__entry->length = args->length;
),
TP_printk(SCSBF" ino %llu vers %llu offset %llu length %d",
SCSB_TRACE_ARGS, __entry->ino, __entry->vers,
__entry->offset, __entry->length)
);
TRACE_EVENT(scoutfs_ioc_data_wait_err,
TP_PROTO(struct super_block *sb,
struct scoutfs_ioctl_data_wait_err *args),
TP_ARGS(sb, args),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(__u64, vers)
__field(__u64, offset)
__field(__u64, count)
__field(__u64, op)
__field(__s64, err)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = args->ino;
__entry->vers = args->data_version;
__entry->offset = args->offset;
__entry->count = args->count;
__entry->op = args->op;
__entry->err = args->err;
),
TP_printk(SCSBF" ino %llu vers %llu offset %llu count %llu op %llx err %lld",
SCSB_TRACE_ARGS, __entry->ino, __entry->vers,
__entry->offset, __entry->count, __entry->op, __entry->err)
);
DEFINE_EVENT(scoutfs_ino_ret_class, scoutfs_ioc_stage_ret,
TP_PROTO(struct super_block *sb, u64 ino, int ret),
TP_ARGS(sb, ino, ret)
);
TRACE_EVENT(scoutfs_ioc_walk_inodes,
TP_PROTO(struct super_block *sb, struct scoutfs_ioctl_walk_inodes *walk),
TP_ARGS(sb, walk),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(int, index)
__field(__u64, first_major)
__field(__u32, first_minor)
__field(__u64, first_ino)
__field(__u64, last_major)
__field(__u32, last_minor)
__field(__u64, last_ino)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->index = walk->index;
__entry->first_major = walk->first.major;
__entry->first_minor = walk->first.minor;
__entry->first_ino = walk->first.ino;
__entry->last_major = walk->last.major;
__entry->last_minor = walk->last.minor;
__entry->last_ino = walk->last.ino;
),
TP_printk(SCSBF" index %u first %llu.%u.%llu last %llu.%u.%llu",
SCSB_TRACE_ARGS, __entry->index, __entry->first_major,
__entry->first_minor, __entry->first_ino, __entry->last_major,
__entry->last_minor, __entry->last_ino)
);
TRACE_EVENT(scoutfs_i_callback,
TP_PROTO(struct inode *inode),
TP_ARGS(inode),
TP_STRUCT__entry(
__field(struct inode *, inode)
),
TP_fast_assign(
__entry->inode = inode;
),
/* don't print fsid as we may not have our sb private available */
TP_printk("freeing inode %p", __entry->inode)
);
DECLARE_EVENT_CLASS(scoutfs_index_item_class,
TP_PROTO(struct super_block *sb, __u8 type, __u64 major, __u32 minor,
__u64 ino),
TP_ARGS(sb, type, major, minor, ino),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u8, type)
__field(__u64, major)
__field(__u32, minor)
__field(__u64, ino)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->type = type;
__entry->major = major;
__entry->minor = minor;
__entry->ino = ino;
),
TP_printk(SCSBF" type %u major %llu minor %u ino %llu",
SCSB_TRACE_ARGS, __entry->type, __entry->major,
__entry->minor, __entry->ino)
);
DEFINE_EVENT(scoutfs_index_item_class, scoutfs_create_index_item,
TP_PROTO(struct super_block *sb, __u8 type, __u64 major, __u32 minor,
__u64 ino),
TP_ARGS(sb, type, major, minor, ino)
);
DEFINE_EVENT(scoutfs_index_item_class, scoutfs_delete_index_item,
TP_PROTO(struct super_block *sb, __u8 type, __u64 major, __u32 minor,
__u64 ino),
TP_ARGS(sb, type, major, minor, ino)
);
TRACE_EVENT(scoutfs_alloc_ino,
TP_PROTO(struct super_block *sb, int ret, __u64 ino, __u64 next_ino,
__u64 next_nr),
TP_ARGS(sb, ret, ino, next_ino, next_nr),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(int, ret)
__field(__u64, ino)
__field(__u64, next_ino)
__field(__u64, next_nr)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ret = ret;
__entry->ino = ino;
__entry->next_ino = next_ino;
__entry->next_nr = next_nr;
),
TP_printk(SCSBF" ret %d ino %llu next_ino %llu next_nr %llu",
SCSB_TRACE_ARGS, __entry->ret, __entry->ino,
__entry->next_ino, __entry->next_nr)
);
TRACE_EVENT(scoutfs_evict_inode,
TP_PROTO(struct super_block *sb, __u64 ino, unsigned int nlink,
unsigned int is_bad_ino),
TP_ARGS(sb, ino, nlink, is_bad_ino),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(unsigned int, nlink)
__field(unsigned int, is_bad_ino)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->nlink = nlink;
__entry->is_bad_ino = is_bad_ino;
),
TP_printk(SCSBF" ino %llu nlink %u bad %d", SCSB_TRACE_ARGS,
__entry->ino, __entry->nlink, __entry->is_bad_ino)
);
TRACE_EVENT(scoutfs_drop_inode,
TP_PROTO(struct super_block *sb, __u64 ino, unsigned int nlink,
unsigned int unhashed, bool lock_covered),
TP_ARGS(sb, ino, nlink, unhashed, lock_covered),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(unsigned int, nlink)
__field(unsigned int, unhashed)
__field(unsigned int, lock_covered)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->nlink = nlink;
__entry->unhashed = unhashed;
__entry->lock_covered = !!lock_covered;
),
TP_printk(SCSBF" ino %llu nlink %u unhashed %d lock_covered %u", SCSB_TRACE_ARGS,
__entry->ino, __entry->nlink, __entry->unhashed,
__entry->lock_covered)
);
TRACE_EVENT(scoutfs_inode_walk_writeback,
TP_PROTO(struct super_block *sb, __u64 ino, int write, int ret),
TP_ARGS(sb, ino, write, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(int, write)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->write = write;
__entry->ret = ret;
),
TP_printk(SCSBF" ino %llu write %d ret %d", SCSB_TRACE_ARGS,
__entry->ino, __entry->write, __entry->ret)
);
DECLARE_EVENT_CLASS(scoutfs_lock_info_class,
TP_PROTO(struct super_block *sb, struct lock_info *linfo),
TP_ARGS(sb, linfo),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(struct lock_info *, linfo)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->linfo = linfo;
),
TP_printk(SCSBF" linfo %p", SCSB_TRACE_ARGS, __entry->linfo)
);
DEFINE_EVENT(scoutfs_lock_info_class, scoutfs_lock_setup,
TP_PROTO(struct super_block *sb, struct lock_info *linfo),
TP_ARGS(sb, linfo)
);
DEFINE_EVENT(scoutfs_lock_info_class, scoutfs_lock_shutdown,
TP_PROTO(struct super_block *sb, struct lock_info *linfo),
TP_ARGS(sb, linfo)
);
DEFINE_EVENT(scoutfs_lock_info_class, scoutfs_lock_destroy,
TP_PROTO(struct super_block *sb, struct lock_info *linfo),
TP_ARGS(sb, linfo)
);
TRACE_EVENT(scoutfs_xattr_set,
TP_PROTO(struct super_block *sb, __u64 ino, size_t name_len,
const void *value, size_t size, int flags),
TP_ARGS(sb, ino, name_len, value, size, flags),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(size_t, name_len)
__field(const void *, value)
__field(size_t, size)
__field(int, flags)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->name_len = name_len;
__entry->value = value;
__entry->size = size;
__entry->flags = flags;
),
TP_printk(SCSBF" ino %llu name_len %zu value %p size %zu flags 0x%x",
SCSB_TRACE_ARGS, __entry->ino, __entry->name_len,
__entry->value, __entry->size, __entry->flags)
);
TRACE_EVENT(scoutfs_advance_dirty_super,
TP_PROTO(struct super_block *sb, __u64 seq),
TP_ARGS(sb, seq),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->seq = seq;
),
TP_printk(SCSBF" super seq now %llu", SCSB_TRACE_ARGS, __entry->seq)
);
TRACE_EVENT(scoutfs_dir_add_next_linkref_found,
TP_PROTO(struct super_block *sb, __u64 ino, __u64 dir_ino,
__u64 dir_pos, unsigned int name_len),
TP_ARGS(sb, ino, dir_ino, dir_pos, name_len),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(__u64, dir_ino)
__field(__u64, dir_pos)
__field(unsigned int, name_len)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->dir_ino = dir_ino;
__entry->dir_pos = dir_pos;
__entry->name_len = name_len;
),
TP_printk(SCSBF" ino %llu dir_ino %llu dir_pos %llu name_len %u",
SCSB_TRACE_ARGS, __entry->ino, __entry->dir_ino,
__entry->dir_pos, __entry->name_len)
);
TRACE_EVENT(scoutfs_dir_add_next_linkrefs,
TP_PROTO(struct super_block *sb, __u64 ino, __u64 dir_ino,
__u64 dir_pos, int count, int nr, int ret),
TP_ARGS(sb, ino, dir_ino, dir_pos, count, nr, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(__u64, dir_ino)
__field(__u64, dir_pos)
__field(int, count)
__field(int, nr)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->dir_ino = dir_ino;
__entry->dir_pos = dir_pos;
__entry->count = count;
__entry->nr = nr;
__entry->ret = ret;
),
TP_printk(SCSBF" ino %llu dir_ino %llu dir_pos %llu count %d nr %d ret %d",
SCSB_TRACE_ARGS, __entry->ino, __entry->dir_ino,
__entry->dir_pos, __entry->count, __entry->nr, __entry->ret)
);
TRACE_EVENT(scoutfs_write_begin,
TP_PROTO(struct super_block *sb, u64 ino, loff_t pos, unsigned len),
TP_ARGS(sb, ino, pos, len),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, inode)
__field(__u64, pos)
__field(__u32, len)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->inode = ino;
__entry->pos = pos;
__entry->len = len;
),
TP_printk(SCSBF" ino %llu pos %llu len %u", SCSB_TRACE_ARGS,
__entry->inode, __entry->pos, __entry->len)
);
TRACE_EVENT(scoutfs_write_end,
TP_PROTO(struct super_block *sb, u64 ino, unsigned long idx, u64 pos,
unsigned len, unsigned copied),
TP_ARGS(sb, ino, idx, pos, len, copied),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(unsigned long, idx)
__field(__u64, pos)
__field(__u32, len)
__field(__u32, copied)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->idx = idx;
__entry->pos = pos;
__entry->len = len;
__entry->copied = copied;
),
TP_printk(SCSBF" ino %llu pgind %lu pos %llu len %u copied %d",
SCSB_TRACE_ARGS, __entry->ino, __entry->idx, __entry->pos,
__entry->len, __entry->copied)
);
TRACE_EVENT(scoutfs_dirty_inode,
TP_PROTO(struct inode *inode),
TP_ARGS(inode),
TP_STRUCT__entry(
__field(__u64, ino)
__field(__u64, size)
),
TP_fast_assign(
__entry->ino = scoutfs_ino(inode);
__entry->size = inode->i_size;
),
TP_printk("ino %llu size %llu",
__entry->ino, __entry->size)
);
TRACE_EVENT(scoutfs_update_inode,
TP_PROTO(struct inode *inode),
TP_ARGS(inode),
TP_STRUCT__entry(
__field(__u64, ino)
__field(__u64, size)
),
TP_fast_assign(
__entry->ino = scoutfs_ino(inode);
__entry->size = inode->i_size;
),
TP_printk("ino %llu size %llu",
__entry->ino, __entry->size)
);
TRACE_EVENT(scoutfs_orphan_inode,
TP_PROTO(struct super_block *sb, struct inode *inode),
TP_ARGS(sb, inode),
TP_STRUCT__entry(
__field(dev_t, dev)
__field(__u64, ino)
),
TP_fast_assign(
__entry->dev = sb->s_dev;
__entry->ino = scoutfs_ino(inode);
),
TP_printk("dev %d,%d ino %llu", MAJOR(__entry->dev),
MINOR(__entry->dev), __entry->ino)
);
TRACE_EVENT(scoutfs_delete_inode,
TP_PROTO(struct super_block *sb, u64 ino, umode_t mode, u64 size),
TP_ARGS(sb, ino, mode, size),
TP_STRUCT__entry(
__field(dev_t, dev)
__field(__u64, ino)
__field(umode_t, mode)
__field(__u64, size)
),
TP_fast_assign(
__entry->dev = sb->s_dev;
__entry->ino = ino;
__entry->mode = mode;
__entry->size = size;
),
TP_printk("dev %d,%d ino %llu, mode 0x%x size %llu",
MAJOR(__entry->dev), MINOR(__entry->dev), __entry->ino,
__entry->mode, __entry->size)
);
DECLARE_EVENT_CLASS(scoutfs_key_class,
TP_PROTO(struct super_block *sb, struct scoutfs_key *key),
TP_ARGS(sb, key),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
sk_trace_define(key)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
sk_trace_assign(key, key);
),
TP_printk(SCSBF" key "SK_FMT, SCSB_TRACE_ARGS, sk_trace_args(key))
);
DEFINE_EVENT(scoutfs_key_class, scoutfs_xattr_get_next_key,
TP_PROTO(struct super_block *sb, struct scoutfs_key *key),
TP_ARGS(sb, key)
);
#define lock_mode(mode) \
__print_symbolic(mode, \
{ SCOUTFS_LOCK_NULL, "NULL" }, \
{ SCOUTFS_LOCK_READ, "READ" }, \
{ SCOUTFS_LOCK_WRITE, "WRITE" }, \
{ SCOUTFS_LOCK_WRITE_ONLY, "WRITE_ONLY" })
DECLARE_EVENT_CLASS(scoutfs_lock_class,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
sk_trace_define(start)
sk_trace_define(end)
__field(u64, refresh_gen)
__field(u64, write_seq)
__field(u64, dirty_trans_seq)
__field(unsigned char, request_pending)
__field(unsigned char, invalidate_pending)
__field(int, mode)
__field(int, invalidating_mode)
__field(unsigned int, waiters_cw)
__field(unsigned int, waiters_pr)
__field(unsigned int, waiters_ex)
__field(unsigned int, users_cw)
__field(unsigned int, users_pr)
__field(unsigned int, users_ex)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
sk_trace_assign(start, &lck->start);
sk_trace_assign(end, &lck->end);
__entry->refresh_gen = lck->refresh_gen;
__entry->write_seq = lck->write_seq;
__entry->dirty_trans_seq = lck->dirty_trans_seq;
__entry->request_pending = lck->request_pending;
__entry->invalidate_pending = lck->invalidate_pending;
__entry->mode = lck->mode;
__entry->invalidating_mode = lck->invalidating_mode;
__entry->waiters_pr = lck->waiters[SCOUTFS_LOCK_READ];
__entry->waiters_ex = lck->waiters[SCOUTFS_LOCK_WRITE];
__entry->waiters_cw = lck->waiters[SCOUTFS_LOCK_WRITE_ONLY];
__entry->users_pr = lck->users[SCOUTFS_LOCK_READ];
__entry->users_ex = lck->users[SCOUTFS_LOCK_WRITE];
__entry->users_cw = lck->users[SCOUTFS_LOCK_WRITE_ONLY];
),
TP_printk(SCSBF" start "SK_FMT" end "SK_FMT" mode %u invmd %u reqp %u invp %u refg %llu wris %llu dts %llu waiters: pr %u ex %u cw %u users: pr %u ex %u cw %u",
SCSB_TRACE_ARGS, sk_trace_args(start), sk_trace_args(end),
__entry->mode, __entry->invalidating_mode, __entry->request_pending,
__entry->invalidate_pending, __entry->refresh_gen, __entry->write_seq,
__entry->dirty_trans_seq,
__entry->waiters_pr, __entry->waiters_ex, __entry->waiters_cw,
__entry->users_pr, __entry->users_ex, __entry->users_cw)
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_invalidate,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_free,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_alloc,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_grant_response,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_granted,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_invalidate_request,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_invalidated,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_locked,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_wait,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_unlock,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_shrink,
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
TP_ARGS(sb, lck)
);
DECLARE_EVENT_CLASS(scoutfs_net_class,
TP_PROTO(struct super_block *sb, struct sockaddr_in *name,
struct sockaddr_in *peer, struct scoutfs_net_header *nh),
TP_ARGS(sb, name, peer, nh),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
si4_trace_define(name)
si4_trace_define(peer)
snh_trace_define(nh)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
si4_trace_assign(name, name);
si4_trace_assign(peer, peer);
snh_trace_assign(nh, nh);
),
TP_printk(SCSBF" name "SI4_FMT" peer "SI4_FMT" nh "SNH_FMT,
SCSB_TRACE_ARGS, si4_trace_args(name), si4_trace_args(peer),
snh_trace_args(nh))
);
DEFINE_EVENT(scoutfs_net_class, scoutfs_net_send_message,
TP_PROTO(struct super_block *sb, struct sockaddr_in *name,
struct sockaddr_in *peer, struct scoutfs_net_header *nh),
TP_ARGS(sb, name, peer, nh)
);
DEFINE_EVENT(scoutfs_net_class, scoutfs_net_recv_message,
TP_PROTO(struct super_block *sb, struct sockaddr_in *name,
struct sockaddr_in *peer, struct scoutfs_net_header *nh),
TP_ARGS(sb, name, peer, nh)
);
#define conn_flag_entry(which) \
CONN_FL_##which, __stringify(which)
#define print_conn_flags(flags) __print_flags(flags, "|", \
{ conn_flag_entry(valid_greeting) }, \
{ conn_flag_entry(established) }, \
{ conn_flag_entry(shutting_down) }, \
{ conn_flag_entry(saw_greeting) }, \
{ conn_flag_entry(saw_farewell) }, \
{ conn_flag_entry(reconn_wait) }, \
{ conn_flag_entry(reconn_freeing) })
/*
* This is called from alloc and free when the caller only has safe
* access to the struct itself, be very careful not to follow any
* indirection out of the storage for the conn struct.
*/
DECLARE_EVENT_CLASS(scoutfs_net_conn_class,
TP_PROTO(struct scoutfs_net_connection *conn),
TP_ARGS(conn),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(unsigned long, flags)
__field(unsigned long, reconn_deadline)
__field(unsigned long, connect_timeout_ms)
__field(void *, sock)
__field(__u64, c_rid)
__field(__u64, greeting_id)
si4_trace_define(sockname)
si4_trace_define(peername)
__field(unsigned char, e_accepted_head)
__field(void *, listening_conn)
__field(unsigned char, e_accepted_list)
__field(__u64, next_send_seq)
__field(__u64, next_send_id)
__field(unsigned char, e_send_queue)
__field(unsigned char, e_resend_queue)
__field(__u64, recv_seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(conn->sb);
__entry->flags = conn->flags;
__entry->reconn_deadline = conn->reconn_deadline;
__entry->connect_timeout_ms = conn->connect_timeout_ms;
__entry->sock = conn->sock;
__entry->c_rid = conn->rid;
__entry->greeting_id = conn->greeting_id;
si4_trace_assign(sockname, &conn->sockname);
si4_trace_assign(peername, &conn->peername);
__entry->e_accepted_head = !!list_empty(&conn->accepted_head);
__entry->listening_conn = conn->listening_conn;
__entry->e_accepted_list = !!list_empty(&conn->accepted_list);
__entry->next_send_seq = conn->next_send_seq;
__entry->next_send_id = conn->next_send_id;
__entry->e_send_queue = !!list_empty(&conn->send_queue);
__entry->e_resend_queue = !!list_empty(&conn->resend_queue);
__entry->recv_seq = atomic64_read(&conn->recv_seq);
),
TP_printk(SCSBF" flags %s rc_dl %lu cto %lu sk %p rid %llu grid %llu sn "SI4_FMT" pn "SI4_FMT" eah %u lc %p eal %u nss %llu nsi %llu esq %u erq %u rs %llu",
SCSB_TRACE_ARGS,
print_conn_flags(__entry->flags),
__entry->reconn_deadline,
__entry->connect_timeout_ms,
__entry->sock,
__entry->c_rid,
__entry->greeting_id,
si4_trace_args(sockname),
si4_trace_args(peername),
__entry->e_accepted_head,
__entry->listening_conn,
__entry->e_accepted_list,
__entry->next_send_seq,
__entry->next_send_id,
__entry->e_send_queue,
__entry->e_resend_queue,
__entry->recv_seq)
);
DEFINE_EVENT(scoutfs_net_conn_class, scoutfs_conn_alloc,
TP_PROTO(struct scoutfs_net_connection *conn),
TP_ARGS(conn)
);
DEFINE_EVENT(scoutfs_net_conn_class, scoutfs_conn_connect_start,
TP_PROTO(struct scoutfs_net_connection *conn),
TP_ARGS(conn)
);
DEFINE_EVENT(scoutfs_net_conn_class, scoutfs_conn_connect_result,
TP_PROTO(struct scoutfs_net_connection *conn),
TP_ARGS(conn)
);
DEFINE_EVENT(scoutfs_net_conn_class, scoutfs_conn_connect_complete,
TP_PROTO(struct scoutfs_net_connection *conn),
TP_ARGS(conn)
);
DEFINE_EVENT(scoutfs_net_conn_class, scoutfs_conn_accept,
TP_PROTO(struct scoutfs_net_connection *conn),
TP_ARGS(conn)
);
DEFINE_EVENT(scoutfs_net_conn_class, scoutfs_conn_reconn_migrate,
TP_PROTO(struct scoutfs_net_connection *conn),
TP_ARGS(conn)
);
DEFINE_EVENT(scoutfs_net_conn_class, scoutfs_conn_shutdown_queued,
TP_PROTO(struct scoutfs_net_connection *conn),
TP_ARGS(conn)
);
DEFINE_EVENT(scoutfs_net_conn_class, scoutfs_conn_shutdown_start,
TP_PROTO(struct scoutfs_net_connection *conn),
TP_ARGS(conn)
);
DEFINE_EVENT(scoutfs_net_conn_class, scoutfs_conn_shutdown_complete,
TP_PROTO(struct scoutfs_net_connection *conn),
TP_ARGS(conn)
);
DEFINE_EVENT(scoutfs_net_conn_class, scoutfs_conn_destroy_start,
TP_PROTO(struct scoutfs_net_connection *conn),
TP_ARGS(conn)
);
DEFINE_EVENT(scoutfs_net_conn_class, scoutfs_conn_destroy_free,
TP_PROTO(struct scoutfs_net_connection *conn),
TP_ARGS(conn)
);
DECLARE_EVENT_CLASS(scoutfs_work_class,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, data)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->data = data;
__entry->ret = ret;
),
TP_printk(SCSBF" data %llu ret %d",
SCSB_TRACE_ARGS, __entry->data, __entry->ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_server_commit_work_enter,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_server_commit_work_exit,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_proc_work_enter,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_proc_work_exit,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_listen_work_enter,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_listen_work_exit,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_connect_work_enter,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_connect_work_exit,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_shutdown_work_enter,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_shutdown_work_exit,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_destroy_work_enter,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_destroy_work_exit,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_reconn_free_work_enter,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_reconn_free_work_exit,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_send_work_enter,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_send_work_exit,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_recv_work_enter,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_net_recv_work_exit,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_server_work_enter,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_server_work_exit,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_server_workqueue_destroy,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_data_return_server_extents_enter,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DEFINE_EVENT(scoutfs_work_class, scoutfs_data_return_server_extents_exit,
TP_PROTO(struct super_block *sb, u64 data, int ret),
TP_ARGS(sb, data, ret)
);
DECLARE_EVENT_CLASS(scoutfs_shrink_exit_class,
TP_PROTO(struct super_block *sb, unsigned long nr_to_scan, int ret),
TP_ARGS(sb, nr_to_scan, ret),
TP_STRUCT__entry(
__field(void *, sb)
__field(unsigned long, nr_to_scan)
__field(int, ret)
),
TP_fast_assign(
__entry->sb = sb;
__entry->nr_to_scan = nr_to_scan;
__entry->ret = ret;
),
TP_printk("sb %p nr_to_scan %lu ret %d",
__entry->sb, __entry->nr_to_scan, __entry->ret)
);
DEFINE_EVENT(scoutfs_shrink_exit_class, scoutfs_lock_shrink_exit,
TP_PROTO(struct super_block *sb, unsigned long nr_to_scan, int ret),
TP_ARGS(sb, nr_to_scan, ret)
);
TRACE_EVENT(scoutfs_rename,
TP_PROTO(struct super_block *sb, struct inode *old_dir,
struct dentry *old_dentry, struct inode *new_dir,
struct dentry *new_dentry),
TP_ARGS(sb, old_dir, old_dentry, new_dir, new_dentry),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, old_dir_ino)
__string(old_name, old_dentry->d_name.name)
__field(__u64, new_dir_ino)
__string(new_name, new_dentry->d_name.name)
__field(__u64, new_inode_ino)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->old_dir_ino = scoutfs_ino(old_dir);
__assign_str(old_name, old_dentry->d_name.name)
__entry->new_dir_ino = scoutfs_ino(new_dir);
__assign_str(new_name, new_dentry->d_name.name)
__entry->new_inode_ino = new_dentry->d_inode ?
scoutfs_ino(new_dentry->d_inode) : 0;
),
TP_printk(SCSBF" old_dir_ino %llu old_name %s new_dir_ino %llu new_name %s new_inode_ino %llu",
SCSB_TRACE_ARGS, __entry->old_dir_ino, __get_str(old_name),
__entry->new_dir_ino, __get_str(new_name),
__entry->new_inode_ino)
);
TRACE_EVENT(scoutfs_d_revalidate,
TP_PROTO(struct super_block *sb, struct dentry *dentry, int flags, u64 dir_ino, int ret),
TP_ARGS(sb, dentry, flags, dir_ino, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(void *, dentry)
__string(name, dentry->d_name.name)
__field(__u64, ino)
__field(__u64, dir_ino)
__field(int, flags)
__field(int, is_root)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->dentry = dentry;
__assign_str(name, dentry->d_name.name)
__entry->ino = dentry->d_inode ? scoutfs_ino(dentry->d_inode) : 0;
__entry->dir_ino = dir_ino;
__entry->flags = flags;
__entry->is_root = IS_ROOT(dentry);
__entry->ret = ret;
),
TP_printk(SCSBF" dentry %p name %s ino %llu dir_ino %llu flags 0x%x s_root %u ret %d",
SCSB_TRACE_ARGS, __entry->dentry, __get_str(name), __entry->ino, __entry->dir_ino,
__entry->flags, __entry->is_root, __entry->ret)
);
TRACE_EVENT(scoutfs_validate_dentry,
TP_PROTO(struct super_block *sb, struct dentry *dentry, u64 dir_ino, u64 dentry_ino,
u64 dent_ino, u64 refresh_gen, int ret),
TP_ARGS(sb, dentry, dir_ino, dentry_ino, dent_ino, refresh_gen, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(void *, dentry)
__field(__u64, dir_ino)
__string(name, dentry->d_name.name)
__field(__u64, dentry_ino)
__field(__u64, dent_ino)
__field(__u64, fsdata_gen)
__field(__u64, refresh_gen)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->dentry = dentry;
__entry->dir_ino = dir_ino;
__assign_str(name, dentry->d_name.name)
__entry->dentry_ino = dentry_ino;
__entry->dent_ino = dent_ino;
__entry->fsdata_gen = (unsigned long long)dentry->d_fsdata;
__entry->refresh_gen = refresh_gen;
__entry->ret = ret;
),
TP_printk(SCSBF" dentry %p dir %llu name %s dentry_ino %llu dent_ino %llu fsdata_gen %llu refresh_gen %llu ret %d",
SCSB_TRACE_ARGS, __entry->dentry, __entry->dir_ino, __get_str(name),
__entry->dentry_ino, __entry->dent_ino, __entry->fsdata_gen,
__entry->refresh_gen, __entry->ret)
);
DECLARE_EVENT_CLASS(scoutfs_super_lifecycle_class,
TP_PROTO(struct super_block *sb),
TP_ARGS(sb),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(void *, sb)
__field(void *, sbi)
__field(void *, s_root)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->sb = sb;
__entry->sbi = SCOUTFS_SB(sb);
__entry->s_root = sb->s_root;
),
TP_printk(SCSBF" sb %p sbi %p s_root %p",
SCSB_TRACE_ARGS, __entry->sb, __entry->sbi, __entry->s_root)
);
DEFINE_EVENT(scoutfs_super_lifecycle_class, scoutfs_fill_super,
TP_PROTO(struct super_block *sb),
TP_ARGS(sb)
);
DEFINE_EVENT(scoutfs_super_lifecycle_class, scoutfs_put_super,
TP_PROTO(struct super_block *sb),
TP_ARGS(sb)
);
DEFINE_EVENT(scoutfs_super_lifecycle_class, scoutfs_kill_sb,
TP_PROTO(struct super_block *sb),
TP_ARGS(sb)
);
DECLARE_EVENT_CLASS(scoutfs_fileid_class,
TP_PROTO(struct super_block *sb, int fh_type, struct scoutfs_fid *fid),
TP_ARGS(sb, fh_type, fid),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(int, fh_type)
__field(u64, ino)
__field(u64, parent_ino)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->fh_type = fh_type;
__entry->ino = le64_to_cpu(fid->ino);
__entry->parent_ino = fh_type == FILEID_SCOUTFS_WITH_PARENT ?
le64_to_cpu(fid->parent_ino) : 0ULL;
),
TP_printk(SCSBF" type %d ino %llu parent %llu",
SCSB_TRACE_ARGS, __entry->fh_type, __entry->ino,
__entry->parent_ino)
);
DEFINE_EVENT(scoutfs_fileid_class, scoutfs_encode_fh,
TP_PROTO(struct super_block *sb, int fh_type, struct scoutfs_fid *fid),
TP_ARGS(sb, fh_type, fid)
);
DEFINE_EVENT(scoutfs_fileid_class, scoutfs_fh_to_dentry,
TP_PROTO(struct super_block *sb, int fh_type, struct scoutfs_fid *fid),
TP_ARGS(sb, fh_type, fid)
);
DEFINE_EVENT(scoutfs_fileid_class, scoutfs_fh_to_parent,
TP_PROTO(struct super_block *sb, int fh_type, struct scoutfs_fid *fid),
TP_ARGS(sb, fh_type, fid)
);
TRACE_EVENT(scoutfs_get_parent,
TP_PROTO(struct super_block *sb, struct inode *inode, u64 parent),
TP_ARGS(sb, inode, parent),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(__u64, parent)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = scoutfs_ino(inode);
__entry->parent = parent;
),
TP_printk(SCSBF" child %llu parent %llu",
SCSB_TRACE_ARGS, __entry->ino, __entry->parent)
);
TRACE_EVENT(scoutfs_get_name,
TP_PROTO(struct super_block *sb, struct inode *parent,
struct inode *child, char *name),
TP_ARGS(sb, parent, child, name),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, parent_ino)
__field(__u64, child_ino)
__string(name, name)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->parent_ino = scoutfs_ino(parent);
__entry->child_ino = scoutfs_ino(child);
__assign_str(name, name);
),
TP_printk(SCSBF" parent %llu child %llu name: %s",
SCSB_TRACE_ARGS, __entry->parent_ino, __entry->child_ino,
__get_str(name))
);
TRACE_EVENT(scoutfs_btree_read_error,
TP_PROTO(struct super_block *sb, struct scoutfs_block_ref *ref),
TP_ARGS(sb, ref),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, blkno)
__field(__u64, seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->blkno = le64_to_cpu(ref->blkno);
__entry->seq = le64_to_cpu(ref->seq);
),
TP_printk(SCSBF" blkno %llu seq %llu",
SCSB_TRACE_ARGS, __entry->blkno, __entry->seq)
);
TRACE_EVENT(scoutfs_btree_walk,
TP_PROTO(struct super_block *sb, struct scoutfs_btree_root *root,
struct scoutfs_key *key, int flags, int level,
struct scoutfs_block_ref *ref),
TP_ARGS(sb, root, key, flags, level, ref),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, root_blkno)
__field(__u64, root_seq)
__field(__u8, root_height)
sk_trace_define(key)
__field(int, flags)
__field(int, level)
__field(__u64, ref_blkno)
__field(__u64, ref_seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->root_blkno = le64_to_cpu(root->ref.blkno);
__entry->root_seq = le64_to_cpu(root->ref.seq);
__entry->root_height = root->height;
sk_trace_assign(key, key);
__entry->flags = flags;
__entry->level = level;
__entry->ref_blkno = le64_to_cpu(ref->blkno);
__entry->ref_seq = le64_to_cpu(ref->seq);
),
TP_printk(SCSBF" root blkno %llu seq %llu height %u key "SK_FMT" flags 0x%x level %d ref blkno %llu seq %llu",
SCSB_TRACE_ARGS, __entry->root_blkno, __entry->root_seq,
__entry->root_height, sk_trace_args(key), __entry->flags,
__entry->level, __entry->ref_blkno, __entry->ref_seq)
);
TRACE_EVENT(scoutfs_btree_set_parent,
TP_PROTO(struct super_block *sb,
struct scoutfs_btree_root *root, struct scoutfs_key *key,
struct scoutfs_btree_root *par_root),
TP_ARGS(sb, root, key, par_root),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, root_blkno)
__field(__u64, root_seq)
__field(__u8, root_height)
sk_trace_define(key)
__field(__u64, par_root_blkno)
__field(__u64, par_root_seq)
__field(__u8, par_root_height)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->root_blkno = le64_to_cpu(root->ref.blkno);
__entry->root_seq = le64_to_cpu(root->ref.seq);
__entry->root_height = root->height;
sk_trace_assign(key, key);
__entry->par_root_blkno = le64_to_cpu(par_root->ref.blkno);
__entry->par_root_seq = le64_to_cpu(par_root->ref.seq);
__entry->par_root_height = par_root->height;
),
TP_printk(SCSBF" root blkno %llu seq %llu height %u, key "SK_FMT", par_root blkno %llu seq %llu height %u",
SCSB_TRACE_ARGS, __entry->root_blkno, __entry->root_seq,
__entry->root_height, sk_trace_args(key),
__entry->par_root_blkno, __entry->par_root_seq,
__entry->par_root_height)
);
TRACE_EVENT(scoutfs_btree_merge,
TP_PROTO(struct super_block *sb, struct scoutfs_btree_root *root,
struct scoutfs_key *start, struct scoutfs_key *end),
TP_ARGS(sb, root, start, end),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, root_blkno)
__field(__u64, root_seq)
__field(__u8, root_height)
sk_trace_define(start)
sk_trace_define(end)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->root_blkno = le64_to_cpu(root->ref.blkno);
__entry->root_seq = le64_to_cpu(root->ref.seq);
__entry->root_height = root->height;
sk_trace_assign(start, start);
sk_trace_assign(end, end);
),
TP_printk(SCSBF" root blkno %llu seq %llu height %u start "SK_FMT" end "SK_FMT,
SCSB_TRACE_ARGS, __entry->root_blkno, __entry->root_seq,
__entry->root_height, sk_trace_args(start),
sk_trace_args(end))
);
TRACE_EVENT(scoutfs_btree_merge_read_range,
TP_PROTO(struct super_block *sb, struct scoutfs_key *start, struct scoutfs_key *end,
int size),
TP_ARGS(sb, start, end, size),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
sk_trace_define(start)
sk_trace_define(end)
__field(int, size)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
sk_trace_assign(start, start);
sk_trace_assign(end, end);
__entry->size = size;
),
TP_printk(SCSBF" start "SK_FMT" end "SK_FMT" size %d",
SCSB_TRACE_ARGS, sk_trace_args(start), sk_trace_args(end), __entry->size)
);
TRACE_EVENT(scoutfs_btree_merge_items,
TP_PROTO(struct super_block *sb,
struct scoutfs_key *m_key, int m_val_len,
struct scoutfs_btree_root *f_root,
struct scoutfs_key *f_key, int f_val_len,
int is_del),
TP_ARGS(sb, m_key, m_val_len, f_root, f_key, f_val_len, is_del),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
sk_trace_define(m_key)
__field(int, m_val_len)
__field(__u64, f_root_blkno)
__field(__u64, f_root_seq)
__field(__u8, f_root_height)
sk_trace_define(f_key)
__field(int, f_val_len)
__field(int, is_del)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
sk_trace_assign(m_key, m_key);
__entry->m_val_len = m_val_len;
__entry->f_root_blkno = f_root ?
le64_to_cpu(f_root->ref.blkno) : 0;
__entry->f_root_seq = f_root ? le64_to_cpu(f_root->ref.seq) : 0;
__entry->f_root_height = f_root ? f_root->height : 0;
sk_trace_assign(f_key, f_key);
__entry->f_val_len = f_val_len;
__entry->is_del = !!is_del;
),
TP_printk(SCSBF" merge item key "SK_FMT" val_len %d, fs item root blkno %llu seq %llu height %u key "SK_FMT" val_len %d, is_del %d",
SCSB_TRACE_ARGS, sk_trace_args(m_key), __entry->m_val_len,
__entry->f_root_blkno, __entry->f_root_seq, __entry->f_root_height,
sk_trace_args(f_key), __entry->f_val_len, __entry->is_del)
);
DECLARE_EVENT_CLASS(scoutfs_btree_free_blocks,
TP_PROTO(struct super_block *sb, struct scoutfs_btree_root *root,
u64 blkno),
TP_ARGS(sb, root, blkno),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, root_blkno)
__field(__u64, root_seq)
__field(__u8, root_height)
__field(__u64, blkno)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->root_blkno = le64_to_cpu(root->ref.blkno);
__entry->root_seq = le64_to_cpu(root->ref.seq);
__entry->root_height = root->height;
__entry->blkno = blkno;
),
TP_printk(SCSBF" root blkno %llu seq %llu height %u, free blkno %llu",
SCSB_TRACE_ARGS, __entry->root_blkno, __entry->root_seq,
__entry->root_height, __entry->blkno)
);
DEFINE_EVENT(scoutfs_btree_free_blocks, scoutfs_btree_free_blocks_single,
TP_PROTO(struct super_block *sb, struct scoutfs_btree_root *root,
u64 blkno),
TP_ARGS(sb, root, blkno)
);
DEFINE_EVENT(scoutfs_btree_free_blocks, scoutfs_btree_free_blocks_leaf,
TP_PROTO(struct super_block *sb, struct scoutfs_btree_root *root,
u64 blkno),
TP_ARGS(sb, root, blkno)
);
DEFINE_EVENT(scoutfs_btree_free_blocks, scoutfs_btree_free_blocks_parent,
TP_PROTO(struct super_block *sb, struct scoutfs_btree_root *root,
u64 blkno),
TP_ARGS(sb, root, blkno)
);
TRACE_EVENT(scoutfs_online_offline_blocks,
TP_PROTO(struct inode *inode, s64 on_delta, s64 off_delta,
u64 on_now, u64 off_now),
TP_ARGS(inode, on_delta, off_delta, on_now, off_now),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__s64, on_delta)
__field(__s64, off_delta)
__field(__u64, on_now)
__field(__u64, off_now)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(inode->i_sb);
__entry->on_delta = on_delta;
__entry->off_delta = off_delta;
__entry->on_now = on_now;
__entry->off_now = off_now;
),
TP_printk(SCSBF" on_delta %lld off_delta %lld on_now %llu off_now %llu ",
SCSB_TRACE_ARGS, __entry->on_delta, __entry->off_delta,
__entry->on_now, __entry->off_now)
);
DECLARE_EVENT_CLASS(scoutfs_server_client_count_class,
TP_PROTO(struct super_block *sb, u64 rid, unsigned long nr_clients),
TP_ARGS(sb, rid, nr_clients),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__s64, c_rid)
__field(unsigned long, nr_clients)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->c_rid = rid;
__entry->nr_clients = nr_clients;
),
TP_printk(SCSBF" rid %016llx nr_clients %lu",
SCSB_TRACE_ARGS, __entry->c_rid, __entry->nr_clients)
);
DEFINE_EVENT(scoutfs_server_client_count_class, scoutfs_server_client_up,
TP_PROTO(struct super_block *sb, u64 rid, unsigned long nr_clients),
TP_ARGS(sb, rid, nr_clients)
);
DEFINE_EVENT(scoutfs_server_client_count_class, scoutfs_server_client_down,
TP_PROTO(struct super_block *sb, u64 rid, unsigned long nr_clients),
TP_ARGS(sb, rid, nr_clients)
);
DECLARE_EVENT_CLASS(scoutfs_server_commit_users_class,
TP_PROTO(struct super_block *sb, int holding, int applying,
int nr_holders, u32 budget,
u32 avail_before, u32 freed_before,
int committing, int exceeded),
TP_ARGS(sb, holding, applying, nr_holders, budget, avail_before, freed_before, committing, exceeded),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(int, holding)
__field(int, applying)
__field(int, nr_holders)
__field(u32, budget)
__field(__u32, avail_before)
__field(__u32, freed_before)
__field(int, committing)
__field(int, exceeded)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->holding = !!holding;
__entry->applying = !!applying;
__entry->nr_holders = nr_holders;
__entry->budget = budget;
__entry->avail_before = avail_before;
__entry->freed_before = freed_before;
__entry->committing = !!committing;
__entry->exceeded = !!exceeded;
),
TP_printk(SCSBF" holding %u applying %u nr %u budget %u avail_before %u freed_before %u committing %u exceeded %u",
SCSB_TRACE_ARGS, __entry->holding, __entry->applying,
__entry->nr_holders, __entry->budget,
__entry->avail_before, __entry->freed_before,
__entry->committing, __entry->exceeded)
);
DEFINE_EVENT(scoutfs_server_commit_users_class, scoutfs_server_commit_hold,
TP_PROTO(struct super_block *sb, int holding, int applying,
int nr_holders, u32 budget,
u32 avail_before, u32 freed_before,
int committing, int exceeded),
TP_ARGS(sb, holding, applying, nr_holders, budget, avail_before, freed_before, committing, exceeded)
);
DEFINE_EVENT(scoutfs_server_commit_users_class, scoutfs_server_commit_apply,
TP_PROTO(struct super_block *sb, int holding, int applying,
int nr_holders, u32 budget,
u32 avail_before, u32 freed_before,
int committing, int exceeded),
TP_ARGS(sb, holding, applying, nr_holders, budget, avail_before, freed_before, committing, exceeded)
);
DEFINE_EVENT(scoutfs_server_commit_users_class, scoutfs_server_commit_start,
TP_PROTO(struct super_block *sb, int holding, int applying,
int nr_holders, u32 budget,
u32 avail_before, u32 freed_before,
int committing, int exceeded),
TP_ARGS(sb, holding, applying, nr_holders, budget, avail_before, freed_before, committing, exceeded)
);
DEFINE_EVENT(scoutfs_server_commit_users_class, scoutfs_server_commit_end,
TP_PROTO(struct super_block *sb, int holding, int applying,
int nr_holders, u32 budget,
u32 avail_before, u32 freed_before,
int committing, int exceeded),
TP_ARGS(sb, holding, applying, nr_holders, budget, avail_before, freed_before, committing, exceeded)
);
#define slt_symbolic(mode) \
__print_symbolic(mode, \
{ SLT_CLIENT, "client" }, \
{ SLT_SERVER, "server" }, \
{ SLT_GRANT, "grant" }, \
{ SLT_INVALIDATE, "invalidate" }, \
{ SLT_REQUEST, "request" }, \
{ SLT_RESPONSE, "response" })
TRACE_EVENT(scoutfs_lock_message,
TP_PROTO(struct super_block *sb, int who, int what, int dir,
u64 rid, u64 net_id, struct scoutfs_net_lock *nl),
TP_ARGS(sb, who, what, dir, rid, net_id, nl),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(int, who)
__field(int, what)
__field(int, dir)
__field(__u64, m_rid)
__field(__u64, net_id)
sk_trace_define(key)
__field(__u8, old_mode)
__field(__u8, new_mode)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->who = who;
__entry->what = what;
__entry->dir = dir;
__entry->m_rid = rid;
__entry->net_id = net_id;
sk_trace_assign(key, &nl->key);
__entry->old_mode = nl->old_mode;
__entry->new_mode = nl->new_mode;
),
TP_printk(SCSBF" %s %s %s rid %016llx net_id %llu key "SK_FMT" old_mode %u new_mode %u",
SCSB_TRACE_ARGS, slt_symbolic(__entry->who),
slt_symbolic(__entry->what), slt_symbolic(__entry->dir),
__entry->m_rid, __entry->net_id, sk_trace_args(key),
__entry->old_mode, __entry->new_mode)
);
DECLARE_EVENT_CLASS(scoutfs_quorum_message_class,
TP_PROTO(struct super_block *sb, u64 term, u8 type, int nr),
TP_ARGS(sb, term, type, nr),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, term)
__field(__u8, type)
__field(int, nr)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->term = term;
__entry->type = type;
__entry->nr = nr;
),
TP_printk(SCSBF" term %llu type %u nr %d",
SCSB_TRACE_ARGS, __entry->term, __entry->type, __entry->nr)
);
DEFINE_EVENT(scoutfs_quorum_message_class, scoutfs_quorum_send_message,
TP_PROTO(struct super_block *sb, u64 term, u8 type, int nr),
TP_ARGS(sb, term, type, nr)
);
DEFINE_EVENT(scoutfs_quorum_message_class, scoutfs_quorum_recv_message,
TP_PROTO(struct super_block *sb, u64 term, u8 type, int nr),
TP_ARGS(sb, term, type, nr)
);
TRACE_EVENT(scoutfs_quorum_loop,
TP_PROTO(struct super_block *sb, int role, u64 term, int vote_for,
unsigned long vote_bits, unsigned long long nsecs),
TP_ARGS(sb, role, term, vote_for, vote_bits, nsecs),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, term)
__field(int, role)
__field(int, vote_for)
__field(unsigned long, vote_bits)
__field(unsigned long, vote_count)
__field(unsigned long long, nsecs)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->term = term;
__entry->role = role;
__entry->vote_for = vote_for;
__entry->vote_bits = vote_bits;
__entry->vote_count = hweight_long(vote_bits);
__entry->nsecs = nsecs;
),
TP_printk(SCSBF" term %llu role %d vote_for %d vote_bits 0x%lx vote_count %lu timeout %llu",
SCSB_TRACE_ARGS, __entry->term, __entry->role,
__entry->vote_for, __entry->vote_bits, __entry->vote_count,
__entry->nsecs)
);
TRACE_EVENT(scoutfs_trans_seq_last,
TP_PROTO(struct super_block *sb, u64 rid, u64 trans_seq),
TP_ARGS(sb, rid, trans_seq),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, s_rid)
__field(__u64, trans_seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->s_rid = rid;
__entry->trans_seq = trans_seq;
),
TP_printk(SCSBF" rid %016llx trans_seq %llu",
SCSB_TRACE_ARGS, __entry->s_rid, __entry->trans_seq)
);
TRACE_EVENT(scoutfs_server_finalize_items,
TP_PROTO(struct super_block *sb, u64 rid, u64 item_rid, u64 item_nr, u64 item_flags,
u64 item_get_trans_seq),
TP_ARGS(sb, rid, item_rid, item_nr, item_flags, item_get_trans_seq),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, c_rid)
__field(__u64, item_rid)
__field(__u64, item_nr)
__field(__u64, item_flags)
__field(__u64, item_get_trans_seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->c_rid = rid;
__entry->item_rid = item_rid;
__entry->item_nr = item_nr;
__entry->item_flags = item_flags;
__entry->item_get_trans_seq = item_get_trans_seq;
),
TP_printk(SCSBF" rid %016llx item_rid %016llx item_nr %llu item_flags 0x%llx item_get_trans_seq %llu",
SCSB_TRACE_ARGS, __entry->c_rid, __entry->item_rid, __entry->item_nr,
__entry->item_flags, __entry->item_get_trans_seq)
);
TRACE_EVENT(scoutfs_server_finalize_decision,
TP_PROTO(struct super_block *sb, u64 rid, bool saw_finalized, bool others_active,
bool ours_visible, bool finalize_ours, unsigned int delay_ms,
u64 finalize_sent_seq),
TP_ARGS(sb, rid, saw_finalized, others_active, ours_visible, finalize_ours, delay_ms,
finalize_sent_seq),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, c_rid)
__field(bool, saw_finalized)
__field(bool, others_active)
__field(bool, ours_visible)
__field(bool, finalize_ours)
__field(unsigned int, delay_ms)
__field(__u64, finalize_sent_seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->c_rid = rid;
__entry->saw_finalized = saw_finalized;
__entry->others_active = others_active;
__entry->ours_visible = ours_visible;
__entry->finalize_ours = finalize_ours;
__entry->delay_ms = delay_ms;
__entry->finalize_sent_seq = finalize_sent_seq;
),
TP_printk(SCSBF" rid %016llx saw_finalized %u others_active %u ours_visible %u finalize_ours %u delay_ms %u finalize_sent_seq %llu",
SCSB_TRACE_ARGS, __entry->c_rid, __entry->saw_finalized, __entry->others_active,
__entry->ours_visible, __entry->finalize_ours, __entry->delay_ms,
__entry->finalize_sent_seq)
);
TRACE_EVENT(scoutfs_get_log_merge_status,
TP_PROTO(struct super_block *sb, u64 rid, struct scoutfs_key *next_range_key,
u64 nr_requests, u64 nr_complete, u64 seq),
TP_ARGS(sb, rid, next_range_key, nr_requests, nr_complete, seq),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, s_rid)
sk_trace_define(next_range_key)
__field(__u64, nr_requests)
__field(__u64, nr_complete)
__field(__u64, seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->s_rid = rid;
sk_trace_assign(next_range_key, next_range_key);
__entry->nr_requests = nr_requests;
__entry->nr_complete = nr_complete;
__entry->seq = seq;
),
TP_printk(SCSBF" rid %016llx next_range_key "SK_FMT" nr_requests %llu nr_complete %llu seq %llu",
SCSB_TRACE_ARGS, __entry->s_rid, sk_trace_args(next_range_key),
__entry->nr_requests, __entry->nr_complete, __entry->seq)
);
TRACE_EVENT(scoutfs_get_log_merge_request,
TP_PROTO(struct super_block *sb, u64 rid,
struct scoutfs_btree_root *root, struct scoutfs_key *start,
struct scoutfs_key *end, u64 input_seq, u64 seq),
TP_ARGS(sb, rid, root, start, end, input_seq, seq),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, s_rid)
__field(__u64, root_blkno)
__field(__u64, root_seq)
__field(__u8, root_height)
sk_trace_define(start)
sk_trace_define(end)
__field(__u64, input_seq)
__field(__u64, seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->s_rid = rid;
__entry->root_blkno = le64_to_cpu(root->ref.blkno);
__entry->root_seq = le64_to_cpu(root->ref.seq);
__entry->root_height = root->height;
sk_trace_assign(start, start);
sk_trace_assign(end, end);
__entry->input_seq = input_seq;
__entry->seq = seq;
),
TP_printk(SCSBF" rid %016llx root blkno %llu seq %llu height %u start "SK_FMT" end "SK_FMT" input_seq %llu seq %llu",
SCSB_TRACE_ARGS, __entry->s_rid, __entry->root_blkno,
__entry->root_seq, __entry->root_height,
sk_trace_args(start), sk_trace_args(end), __entry->input_seq,
__entry->seq)
);
TRACE_EVENT(scoutfs_get_log_merge_complete,
TP_PROTO(struct super_block *sb, u64 rid,
struct scoutfs_btree_root *root, struct scoutfs_key *start,
struct scoutfs_key *end, struct scoutfs_key *remain,
u64 seq, u64 flags),
TP_ARGS(sb, rid, root, start, end, remain, seq, flags),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, s_rid)
__field(__u64, root_blkno)
__field(__u64, root_seq)
__field(__u8, root_height)
sk_trace_define(start)
sk_trace_define(end)
sk_trace_define(remain)
__field(__u64, seq)
__field(__u64, flags)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->s_rid = rid;
__entry->root_blkno = le64_to_cpu(root->ref.blkno);
__entry->root_seq = le64_to_cpu(root->ref.seq);
__entry->root_height = root->height;
sk_trace_assign(start, start);
sk_trace_assign(end, end);
sk_trace_assign(remain, remain);
__entry->seq = seq;
__entry->flags = flags;
),
TP_printk(SCSBF" rid %016llx root blkno %llu seq %llu height %u start "SK_FMT" end "SK_FMT" remain "SK_FMT" seq %llu flags 0x%llx",
SCSB_TRACE_ARGS, __entry->s_rid, __entry->root_blkno,
__entry->root_seq, __entry->root_height,
sk_trace_args(start), sk_trace_args(end),
sk_trace_args(remain), __entry->seq, __entry->flags)
);
DECLARE_EVENT_CLASS(scoutfs_forest_bloom_class,
TP_PROTO(struct super_block *sb, struct scoutfs_key *key,
u64 rid, u64 nr, u64 blkno, u64 seq, unsigned int count),
TP_ARGS(sb, key, rid, nr, blkno, seq, count),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
sk_trace_define(key)
__field(__u64, b_rid)
__field(__u64, nr)
__field(__u64, blkno)
__field(__u64, seq)
__field(unsigned int, count)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
sk_trace_assign(key, key);
__entry->b_rid = rid;
__entry->nr = nr;
__entry->blkno = blkno;
__entry->seq = seq;
__entry->count = count;
),
TP_printk(SCSBF" key "SK_FMT" rid %016llx nr %llu blkno %llu seq %llx count %u",
SCSB_TRACE_ARGS, sk_trace_args(key), __entry->b_rid,
__entry->nr, __entry->blkno, __entry->seq, __entry->count)
);
DEFINE_EVENT(scoutfs_forest_bloom_class, scoutfs_forest_bloom_set,
TP_PROTO(struct super_block *sb, struct scoutfs_key *key,
u64 rid, u64 nr, u64 blkno, u64 seq, unsigned int count),
TP_ARGS(sb, key, rid, nr, blkno, seq, count)
);
DEFINE_EVENT(scoutfs_forest_bloom_class, scoutfs_forest_bloom_search,
TP_PROTO(struct super_block *sb, struct scoutfs_key *key,
u64 rid, u64 nr, u64 blkno, u64 seq, unsigned int count),
TP_ARGS(sb, key, rid, nr, blkno, seq, count)
);
TRACE_EVENT(scoutfs_forest_prepare_commit,
TP_PROTO(struct super_block *sb, struct scoutfs_block_ref *item_ref,
struct scoutfs_block_ref *bloom_ref),
TP_ARGS(sb, item_ref, bloom_ref),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, item_blkno)
__field(__u64, item_seq)
__field(__u64, bloom_blkno)
__field(__u64, bloom_seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->item_blkno = le64_to_cpu(item_ref->blkno);
__entry->item_seq = le64_to_cpu(item_ref->seq);
__entry->bloom_blkno = le64_to_cpu(bloom_ref->blkno);
__entry->bloom_seq = le64_to_cpu(bloom_ref->seq);
),
TP_printk(SCSBF" item blkno %llu seq %llu bloom blkno %llu seq %llu",
SCSB_TRACE_ARGS, __entry->item_blkno, __entry->item_seq,
__entry->bloom_blkno, __entry->bloom_seq)
);
TRACE_EVENT(scoutfs_forest_using_roots,
TP_PROTO(struct super_block *sb, struct scoutfs_btree_root *fs_root,
struct scoutfs_btree_root *logs_root),
TP_ARGS(sb, fs_root, logs_root),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, fs_blkno)
__field(__u64, fs_seq)
__field(__u64, logs_blkno)
__field(__u64, logs_seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->fs_blkno = le64_to_cpu(fs_root->ref.blkno);
__entry->fs_seq = le64_to_cpu(fs_root->ref.seq);
__entry->logs_blkno = le64_to_cpu(logs_root->ref.blkno);
__entry->logs_seq = le64_to_cpu(logs_root->ref.seq);
),
TP_printk(SCSBF" fs blkno %llu seq %llu logs blkno %llu seq %llu",
SCSB_TRACE_ARGS, __entry->fs_blkno, __entry->fs_seq,
__entry->logs_blkno, __entry->logs_seq)
);
TRACE_EVENT(scoutfs_forest_init_our_log,
TP_PROTO(struct super_block *sb, u64 rid, u64 nr, u64 blkno, u64 seq),
TP_ARGS(sb, rid, nr, blkno, seq),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, b_rid)
__field(__u64, nr)
__field(__u64, blkno)
__field(__u64, seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->b_rid = rid;
__entry->nr = nr;
__entry->blkno = blkno;
__entry->seq = seq;
),
TP_printk(SCSBF" rid %016llx nr %llu blkno %llu seq %llx",
SCSB_TRACE_ARGS, __entry->b_rid, __entry->nr,
__entry->blkno, __entry->seq)
);
TRACE_EVENT(scoutfs_block_dirty_ref,
TP_PROTO(struct super_block *sb, u64 ref_blkno, u64 ref_seq,
u64 block_blkno, u64 block_seq),
TP_ARGS(sb, ref_blkno, ref_seq, block_blkno, block_seq),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ref_blkno)
__field(__u64, ref_seq)
__field(__u64, block_blkno)
__field(__u64, block_seq)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ref_blkno = ref_blkno;
__entry->ref_seq = ref_seq;
__entry->block_blkno = block_blkno;
__entry->block_seq = block_seq;
),
TP_printk(SCSBF" ref_blkno %llu ref_seq %llu block_blkno %llu block_seq %llu",
SCSB_TRACE_ARGS, __entry->ref_blkno, __entry->ref_seq,
__entry->block_blkno, __entry->block_seq)
);
TRACE_EVENT(scoutfs_block_stale,
TP_PROTO(struct super_block *sb, struct scoutfs_block_ref *ref,
struct scoutfs_block_header *hdr, u32 magic, u32 crc),
TP_ARGS(sb, ref, hdr, magic, crc),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ref_blkno)
__field(__u64, ref_seq)
__field(__u32, hdr_crc)
__field(__u32, hdr_magic)
__field(__u64, hdr_fsid)
__field(__u64, hdr_seq)
__field(__u64, hdr_blkno)
__field(__u32, magic)
__field(__u32, crc)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ref_blkno = le64_to_cpu(ref->blkno);
__entry->ref_seq = le64_to_cpu(ref->seq);
__entry->hdr_crc = le32_to_cpu(hdr->crc);
__entry->hdr_magic = le32_to_cpu(hdr->magic);
__entry->hdr_fsid = le64_to_cpu(hdr->fsid);
__entry->hdr_seq = le64_to_cpu(hdr->seq);
__entry->hdr_blkno = le64_to_cpu(hdr->blkno);
__entry->magic = magic;
__entry->crc = crc;
),
TP_printk(SCSBF" ref_blkno %llu ref_seq %016llx hdr_crc %08x hdr_magic %08x hdr_fsid %016llx hdr_seq %016llx hdr_blkno %llu magic %08x crc %08x",
SCSB_TRACE_ARGS, __entry->ref_blkno, __entry->ref_seq, __entry->hdr_crc,
__entry->hdr_magic, __entry->hdr_fsid, __entry->hdr_seq, __entry->hdr_blkno,
__entry->magic, __entry->crc)
);
DECLARE_EVENT_CLASS(scoutfs_block_class,
TP_PROTO(struct super_block *sb, void *bp, u64 blkno, int refcount, int io_count,
unsigned long bits, __u64 accessed),
TP_ARGS(sb, bp, blkno, refcount, io_count, bits, accessed),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(void *, bp)
__field(__u64, blkno)
__field(int, refcount)
__field(int, io_count)
__field(long, bits)
__field(__u64, accessed)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->bp = bp;
__entry->blkno = blkno;
__entry->refcount = refcount;
__entry->io_count = io_count;
__entry->bits = bits;
__entry->accessed = accessed;
),
TP_printk(SCSBF" bp %p blkno %llu refcount %d io_count %d bits 0x%lx accessed %llu",
SCSB_TRACE_ARGS, __entry->bp, __entry->blkno, __entry->refcount,
__entry->io_count, __entry->bits, __entry->accessed)
);
DEFINE_EVENT(scoutfs_block_class, scoutfs_block_allocate,
TP_PROTO(struct super_block *sb, void *bp, u64 blkno,
int refcount, int io_count, unsigned long bits,
__u64 accessed),
TP_ARGS(sb, bp, blkno, refcount, io_count, bits, accessed)
);
DEFINE_EVENT(scoutfs_block_class, scoutfs_block_free,
TP_PROTO(struct super_block *sb, void *bp, u64 blkno,
int refcount, int io_count, unsigned long bits,
__u64 accessed),
TP_ARGS(sb, bp, blkno, refcount, io_count, bits, accessed)
);
DEFINE_EVENT(scoutfs_block_class, scoutfs_block_insert,
TP_PROTO(struct super_block *sb, void *bp, u64 blkno,
int refcount, int io_count, unsigned long bits,
__u64 accessed),
TP_ARGS(sb, bp, blkno, refcount, io_count, bits, accessed)
);
DEFINE_EVENT(scoutfs_block_class, scoutfs_block_remove,
TP_PROTO(struct super_block *sb, void *bp, u64 blkno,
int refcount, int io_count, unsigned long bits,
__u64 accessed),
TP_ARGS(sb, bp, blkno, refcount, io_count, bits, accessed)
);
DEFINE_EVENT(scoutfs_block_class, scoutfs_block_end_io,
TP_PROTO(struct super_block *sb, void *bp, u64 blkno,
int refcount, int io_count, unsigned long bits,
__u64 accessed),
TP_ARGS(sb, bp, blkno, refcount, io_count, bits, accessed)
);
DEFINE_EVENT(scoutfs_block_class, scoutfs_block_submit,
TP_PROTO(struct super_block *sb, void *bp, u64 blkno,
int refcount, int io_count, unsigned long bits,
__u64 accessed),
TP_ARGS(sb, bp, blkno, refcount, io_count, bits, accessed)
);
DEFINE_EVENT(scoutfs_block_class, scoutfs_block_invalidate,
TP_PROTO(struct super_block *sb, void *bp, u64 blkno,
int refcount, int io_count, unsigned long bits,
__u64 accessed),
TP_ARGS(sb, bp, blkno, refcount, io_count, bits, accessed)
);
DEFINE_EVENT(scoutfs_block_class, scoutfs_block_mark_dirty,
TP_PROTO(struct super_block *sb, void *bp, u64 blkno,
int refcount, int io_count, unsigned long bits,
__u64 accessed),
TP_ARGS(sb, bp, blkno, refcount, io_count, bits, accessed)
);
DEFINE_EVENT(scoutfs_block_class, scoutfs_block_forget,
TP_PROTO(struct super_block *sb, void *bp, u64 blkno,
int refcount, int io_count, unsigned long bits,
__u64 accessed),
TP_ARGS(sb, bp, blkno, refcount, io_count, bits, accessed)
);
DEFINE_EVENT(scoutfs_block_class, scoutfs_block_shrink,
TP_PROTO(struct super_block *sb, void *bp, u64 blkno,
int refcount, int io_count, unsigned long bits,
__u64 accessed),
TP_ARGS(sb, bp, blkno, refcount, io_count, bits, accessed)
);
DECLARE_EVENT_CLASS(scoutfs_ext_next_class,
TP_PROTO(struct super_block *sb, u64 start, u64 len,
struct scoutfs_extent *ext, int ret),
TP_ARGS(sb, start, len, ext, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, start)
__field(__u64, len)
STE_FIELDS(ext)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->start = start;
__entry->len = len;
STE_ASSIGN(ext, ext)
__entry->ret = ret;
),
TP_printk(SCSBF" start %llu len %llu ext "STE_FMT" ret %d",
SCSB_TRACE_ARGS, __entry->start, __entry->len,
STE_ENTRY_ARGS(ext), __entry->ret)
);
DEFINE_EVENT(scoutfs_ext_next_class, scoutfs_ext_op_next,
TP_PROTO(struct super_block *sb, u64 start, u64 len,
struct scoutfs_extent *ext, int ret),
TP_ARGS(sb, start, len, ext, ret)
);
DEFINE_EVENT(scoutfs_ext_next_class, scoutfs_ext_next,
TP_PROTO(struct super_block *sb, u64 start, u64 len,
struct scoutfs_extent *ext, int ret),
TP_ARGS(sb, start, len, ext, ret)
);
DECLARE_EVENT_CLASS(scoutfs_ext_typical_class,
TP_PROTO(struct super_block *sb, u64 start, u64 len, u64 map, u8 flags,
int ret),
TP_ARGS(sb, start, len, map, flags, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, start)
__field(__u64, len)
__field(__u64, map)
__field(__u8, flags)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->start = start;
__entry->len = len;
__entry->map = map;
__entry->flags = flags;
__entry->ret = ret;
),
TP_printk(SCSBF" start %llu len %llu map %llu flags %u ret %d",
SCSB_TRACE_ARGS, __entry->start, __entry->len, __entry->map,
__entry->flags, __entry->ret)
);
DEFINE_EVENT(scoutfs_ext_typical_class, scoutfs_ext_op_insert,
TP_PROTO(struct super_block *sb, u64 start, u64 len, u64 map, u8 flags,
int ret),
TP_ARGS(sb, start, len, map, flags, ret)
);
DEFINE_EVENT(scoutfs_ext_typical_class, scoutfs_ext_insert,
TP_PROTO(struct super_block *sb, u64 start, u64 len, u64 map, u8 flags,
int ret),
TP_ARGS(sb, start, len, map, flags, ret)
);
DEFINE_EVENT(scoutfs_ext_typical_class, scoutfs_ext_op_remove,
TP_PROTO(struct super_block *sb, u64 start, u64 len, u64 map, u8 flags,
int ret),
TP_ARGS(sb, start, len, map, flags, ret)
);
DEFINE_EVENT(scoutfs_ext_typical_class, scoutfs_ext_remove,
TP_PROTO(struct super_block *sb, u64 start, u64 len, u64 map, u8 flags,
int ret),
TP_ARGS(sb, start, len, map, flags, ret)
);
DEFINE_EVENT(scoutfs_ext_typical_class, scoutfs_ext_set,
TP_PROTO(struct super_block *sb, u64 start, u64 len, u64 map, u8 flags,
int ret),
TP_ARGS(sb, start, len, map, flags, ret)
);
TRACE_EVENT(scoutfs_ext_alloc,
TP_PROTO(struct super_block *sb, u64 start, u64 len, u64 count,
struct scoutfs_extent *ext, int ret),
TP_ARGS(sb, start, len, count, ext, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, start)
__field(__u64, len)
__field(__u64, count)
STE_FIELDS(ext)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->start = start;
__entry->len = len;
__entry->count = count;
STE_ASSIGN(ext, ext)
__entry->ret = ret;
),
TP_printk(SCSBF" start %llu len %llu count %llu ext "STE_FMT" ret %d",
SCSB_TRACE_ARGS, __entry->start, __entry->len, __entry->count,
STE_ENTRY_ARGS(ext), __entry->ret)
);
TRACE_EVENT(scoutfs_alloc_alloc_meta,
TP_PROTO(struct super_block *sb, u64 blkno, int ret),
TP_ARGS(sb, blkno, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, blkno)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->blkno = blkno;
__entry->ret = ret;
),
TP_printk(SCSBF" blkno %llu ret %d",
SCSB_TRACE_ARGS, __entry->blkno, __entry->ret)
);
TRACE_EVENT(scoutfs_alloc_free_meta,
TP_PROTO(struct super_block *sb, u64 blkno, int ret),
TP_ARGS(sb, blkno, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, blkno)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->blkno = blkno;
__entry->ret = ret;
),
TP_printk(SCSBF" blkno %llu ret %d",
SCSB_TRACE_ARGS, __entry->blkno, __entry->ret)
);
TRACE_EVENT(scoutfs_alloc_alloc_data,
TP_PROTO(struct super_block *sb, u64 req, u64 blkno, u64 count,
int ret),
TP_ARGS(sb, req, blkno, count, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, req)
__field(__u64, blkno)
__field(__u64, count)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->req = req;
__entry->blkno = blkno;
__entry->count = count;
__entry->ret = ret;
),
TP_printk(SCSBF" req %llu blkno %llu count %llu ret %d",
SCSB_TRACE_ARGS, __entry->req, __entry->blkno,
__entry->count, __entry->ret)
);
TRACE_EVENT(scoutfs_alloc_free_data,
TP_PROTO(struct super_block *sb, u64 blkno, u64 count, int ret),
TP_ARGS(sb, blkno, count, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, blkno)
__field(__u64, count)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->blkno = blkno;
__entry->count = count;
__entry->ret = ret;
),
TP_printk(SCSBF" blkno %llu count %llu ret %d",
SCSB_TRACE_ARGS, __entry->blkno, __entry->count,
__entry->ret)
);
TRACE_EVENT(scoutfs_alloc_move,
TP_PROTO(struct super_block *sb, u64 total, u64 moved, int ret),
TP_ARGS(sb, total, moved, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, total)
__field(__u64, moved)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->total = total;
__entry->moved = moved;
__entry->ret = ret;
),
TP_printk(SCSBF" total %llu moved %llu ret %d",
SCSB_TRACE_ARGS, __entry->total, __entry->moved,
__entry->ret)
);
DECLARE_EVENT_CLASS(scoutfs_alloc_extent_class,
TP_PROTO(struct super_block *sb, struct scoutfs_extent *ext),
TP_ARGS(sb, ext),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
STE_FIELDS(ext)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
STE_ASSIGN(ext, ext);
),
TP_printk(SCSBF" ext "STE_FMT, SCSB_TRACE_ARGS, STE_ENTRY_ARGS(ext))
);
DEFINE_EVENT(scoutfs_alloc_extent_class, scoutfs_alloc_move_extent,
TP_PROTO(struct super_block *sb, struct scoutfs_extent *ext),
TP_ARGS(sb, ext)
);
DEFINE_EVENT(scoutfs_alloc_extent_class, scoutfs_alloc_fill_extent,
TP_PROTO(struct super_block *sb, struct scoutfs_extent *ext),
TP_ARGS(sb, ext)
);
DEFINE_EVENT(scoutfs_alloc_extent_class, scoutfs_alloc_empty_extent,
TP_PROTO(struct super_block *sb, struct scoutfs_extent *ext),
TP_ARGS(sb, ext)
);
TRACE_EVENT(scoutfs_item_read_page,
TP_PROTO(struct super_block *sb, struct scoutfs_key *key,
struct scoutfs_key *pg_start, struct scoutfs_key *pg_end),
TP_ARGS(sb, key, pg_start, pg_end),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
sk_trace_define(key)
sk_trace_define(pg_start)
sk_trace_define(pg_end)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
sk_trace_assign(key, key);
sk_trace_assign(pg_start, pg_start);
sk_trace_assign(pg_end, pg_end);
),
TP_printk(SCSBF" key "SK_FMT" pg_start "SK_FMT" pg_end "SK_FMT,
SCSB_TRACE_ARGS, sk_trace_args(key), sk_trace_args(pg_start),
sk_trace_args(pg_end))
);
TRACE_EVENT(scoutfs_item_invalidate_page,
TP_PROTO(struct super_block *sb, struct scoutfs_key *start,
struct scoutfs_key *end, struct scoutfs_key *pg_start,
struct scoutfs_key *pg_end, int pgi),
TP_ARGS(sb, start, end, pg_start, pg_end, pgi),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
sk_trace_define(start)
sk_trace_define(end)
sk_trace_define(pg_start)
sk_trace_define(pg_end)
__field(int, pgi)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
sk_trace_assign(start, start);
sk_trace_assign(end, end);
sk_trace_assign(pg_start, pg_start);
sk_trace_assign(pg_end, pg_end);
__entry->pgi = pgi;
),
TP_printk(SCSBF" start "SK_FMT" end "SK_FMT" pg_start "SK_FMT" pg_end "SK_FMT" pgi %d",
SCSB_TRACE_ARGS, sk_trace_args(start), sk_trace_args(end),
sk_trace_args(pg_start), sk_trace_args(pg_end), __entry->pgi)
);
DECLARE_EVENT_CLASS(scoutfs_omap_group_class,
TP_PROTO(struct super_block *sb, void *grp, u64 group_nr, unsigned int group_total,
int bit_nr),
TP_ARGS(sb, grp, group_nr, group_total, bit_nr),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(void *, grp)
__field(__u64, group_nr)
__field(unsigned int, group_total)
__field(int, bit_nr)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->grp = grp;
__entry->group_nr = group_nr;
__entry->group_total = group_total;
__entry->bit_nr = bit_nr;
),
TP_printk(SCSBF" grp %p group_nr %llu group_total %u bit_nr %d",
SCSB_TRACE_ARGS, __entry->grp, __entry->group_nr, __entry->group_total,
__entry->bit_nr)
);
DEFINE_EVENT(scoutfs_omap_group_class, scoutfs_omap_group_alloc,
TP_PROTO(struct super_block *sb, void *grp, u64 group_nr, unsigned int group_total,
int bit_nr),
TP_ARGS(sb, grp, group_nr, group_total, bit_nr)
);
DEFINE_EVENT(scoutfs_omap_group_class, scoutfs_omap_group_free,
TP_PROTO(struct super_block *sb, void *grp, u64 group_nr, unsigned int group_total,
int bit_nr),
TP_ARGS(sb, grp, group_nr, group_total, bit_nr)
);
DEFINE_EVENT(scoutfs_omap_group_class, scoutfs_omap_group_inc,
TP_PROTO(struct super_block *sb, void *grp, u64 group_nr, unsigned int group_total,
int bit_nr),
TP_ARGS(sb, grp, group_nr, group_total, bit_nr)
);
DEFINE_EVENT(scoutfs_omap_group_class, scoutfs_omap_group_dec,
TP_PROTO(struct super_block *sb, void *grp, u64 group_nr, unsigned int group_total,
int bit_nr),
TP_ARGS(sb, grp, group_nr, group_total, bit_nr)
);
DEFINE_EVENT(scoutfs_omap_group_class, scoutfs_omap_group_request,
TP_PROTO(struct super_block *sb, void *grp, u64 group_nr, unsigned int group_total,
int bit_nr),
TP_ARGS(sb, grp, group_nr, group_total, bit_nr)
);
DEFINE_EVENT(scoutfs_omap_group_class, scoutfs_omap_group_destroy,
TP_PROTO(struct super_block *sb, void *grp, u64 group_nr, unsigned int group_total,
int bit_nr),
TP_ARGS(sb, grp, group_nr, group_total, bit_nr)
);
TRACE_EVENT(scoutfs_omap_should_delete,
TP_PROTO(struct super_block *sb, u64 ino, unsigned int nlink, int ret),
TP_ARGS(sb, ino, nlink, ret),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, ino)
__field(unsigned int, nlink)
__field(int, ret)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->ino = ino;
__entry->nlink = nlink;
__entry->ret = ret;
),
TP_printk(SCSBF" ino %llu nlink %u ret %d",
SCSB_TRACE_ARGS, __entry->ino, __entry->nlink, __entry->ret)
);
#define SSCF_FMT "[bo %llu bs %llu es %llu]"
#define SSCF_FIELDS(pref) \
__field(__u64, pref##_blkno) \
__field(__u64, pref##_blocks) \
__field(__u64, pref##_entries)
#define SSCF_ASSIGN(pref, sfl) \
__entry->pref##_blkno = le64_to_cpu((sfl)->ref.blkno); \
__entry->pref##_blocks = le64_to_cpu((sfl)->blocks); \
__entry->pref##_entries = le64_to_cpu((sfl)->entries);
#define SSCF_ENTRY_ARGS(pref) \
__entry->pref##_blkno, \
__entry->pref##_blocks, \
__entry->pref##_entries
DECLARE_EVENT_CLASS(scoutfs_srch_compact_class,
TP_PROTO(struct super_block *sb, struct scoutfs_srch_compact *sc),
TP_ARGS(sb, sc),
TP_STRUCT__entry(
SCSB_TRACE_FIELDS
__field(__u64, id)
__field(__u8, nr)
__field(__u8, flags)
SSCF_FIELDS(out)
__field(__u64, in0_blk)
__field(__u64, in0_pos)
SSCF_FIELDS(in0)
__field(__u64, in1_blk)
__field(__u64, in1_pos)
SSCF_FIELDS(in1)
__field(__u64, in2_blk)
__field(__u64, in2_pos)
SSCF_FIELDS(in2)
__field(__u64, in3_blk)
__field(__u64, in3_pos)
SSCF_FIELDS(in3)
),
TP_fast_assign(
SCSB_TRACE_ASSIGN(sb);
__entry->id = le64_to_cpu(sc->id);
__entry->nr = sc->nr;
__entry->flags = sc->flags;
SSCF_ASSIGN(out, &sc->out)
__entry->in0_blk = le64_to_cpu(sc->in[0].blk);
__entry->in0_pos = le64_to_cpu(sc->in[0].pos);
SSCF_ASSIGN(in0, &sc->in[0].sfl)
__entry->in1_blk = le64_to_cpu(sc->in[0].blk);
__entry->in1_pos = le64_to_cpu(sc->in[0].pos);
SSCF_ASSIGN(in1, &sc->in[1].sfl)
__entry->in2_blk = le64_to_cpu(sc->in[0].blk);
__entry->in2_pos = le64_to_cpu(sc->in[0].pos);
SSCF_ASSIGN(in2, &sc->in[2].sfl)
__entry->in3_blk = le64_to_cpu(sc->in[0].blk);
__entry->in3_pos = le64_to_cpu(sc->in[0].pos);
SSCF_ASSIGN(in3, &sc->in[3].sfl)
),
TP_printk(SCSBF" id %llu nr %u flags 0x%x out "SSCF_FMT" in0 b %llu p %llu "SSCF_FMT" in1 b %llu p %llu "SSCF_FMT" in2 b %llu p %llu "SSCF_FMT" in3 b %llu p %llu "SSCF_FMT,
SCSB_TRACE_ARGS, __entry->id, __entry->nr, __entry->flags, SSCF_ENTRY_ARGS(out),
__entry->in0_blk, __entry->in0_pos, SSCF_ENTRY_ARGS(in0),
__entry->in1_blk, __entry->in1_pos, SSCF_ENTRY_ARGS(in1),
__entry->in2_blk, __entry->in2_pos, SSCF_ENTRY_ARGS(in2),
__entry->in3_blk, __entry->in3_pos, SSCF_ENTRY_ARGS(in3))
);
DEFINE_EVENT(scoutfs_srch_compact_class, scoutfs_srch_compact_client_send,
TP_PROTO(struct super_block *sb, struct scoutfs_srch_compact *sc),
TP_ARGS(sb, sc)
);
DEFINE_EVENT(scoutfs_srch_compact_class, scoutfs_srch_compact_client_recv,
TP_PROTO(struct super_block *sb, struct scoutfs_srch_compact *sc),
TP_ARGS(sb, sc)
);
#endif /* _TRACE_SCOUTFS_H */
/* This part must be outside protection */
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH .
#define TRACE_INCLUDE_FILE scoutfs_trace
#include <trace/define_trace.h>