mirror of
https://github.com/versity/scoutfs.git
synced 2026-09-08 17:17:13 +00:00
scoutfs: add stage and release tracing
Add a bit more tracing to stage, release, and unwritten extent conversion so we can get a bit more visibility into the threads staging and releasing. Signed-off-by: Zach Brown <zab@versity.com>
This commit is contained in:
@@ -972,6 +972,7 @@ static int convert_unwritten(struct super_block *sb, struct inode *inode,
|
||||
struct unpacked_extent *ext, u64 iblock,
|
||||
struct scoutfs_lock *lock)
|
||||
{
|
||||
struct scoutfs_traced_extent te;
|
||||
u64 blkno;
|
||||
u8 ext_fl;
|
||||
int err;
|
||||
@@ -980,6 +981,9 @@ static int convert_unwritten(struct super_block *sb, struct inode *inode,
|
||||
blkno = ext->blkno + (iblock - ext->iblock);
|
||||
ext_fl = ext->flags;
|
||||
|
||||
init_traced_extent(&te, iblock, 1, blkno, ext_fl);
|
||||
trace_scoutfs_data_convert_unwritten(sb, scoutfs_ino(inode), &te);
|
||||
|
||||
ret = set_extent(sb, inode, scoutfs_ino(inode), unpe, iblock,
|
||||
blkno, 1, ext_fl & ~(SEF_OFFLINE|SEF_UNWRITTEN));
|
||||
if (ret < 0)
|
||||
|
||||
+5
-2
@@ -281,7 +281,7 @@ static long scoutfs_ioc_release(struct file *file, unsigned long arg)
|
||||
if (copy_from_user(&args, (void __user *)arg, sizeof(args)))
|
||||
return -EFAULT;
|
||||
|
||||
trace_scoutfs_ioc_release(sb, &args);
|
||||
trace_scoutfs_ioc_release(sb, scoutfs_ino(inode), &args);
|
||||
|
||||
if (args.count == 0)
|
||||
return 0;
|
||||
@@ -344,7 +344,7 @@ out:
|
||||
mutex_unlock(&inode->i_mutex);
|
||||
mnt_drop_write_file(file);
|
||||
|
||||
trace_scoutfs_ioc_release_ret(sb, ret);
|
||||
trace_scoutfs_ioc_release_ret(sb, scoutfs_ino(inode), ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -395,6 +395,8 @@ static long scoutfs_ioc_stage(struct file *file, unsigned long arg)
|
||||
if (copy_from_user(&args, (void __user *)arg, sizeof(args)))
|
||||
return -EFAULT;
|
||||
|
||||
trace_scoutfs_ioc_stage(sb, scoutfs_ino(inode), &args);
|
||||
|
||||
end_size = args.offset + args.count;
|
||||
|
||||
/* verify arg constraints that aren't dependent on file */
|
||||
@@ -464,6 +466,7 @@ out:
|
||||
mutex_unlock(&inode->i_mutex);
|
||||
mnt_drop_write_file(file);
|
||||
|
||||
trace_scoutfs_ioc_stage_ret(sb, scoutfs_ino(inode), ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
+71
-22
@@ -61,6 +61,27 @@ struct lock_info;
|
||||
#define DECLARE_TRACED_EXTENT(name) \
|
||||
struct scoutfs_traced_extent name = {0}
|
||||
|
||||
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),
|
||||
|
||||
@@ -232,6 +253,11 @@ DEFINE_EVENT(scoutfs_data_file_extent_class, scoutfs_data_alloc_block,
|
||||
struct scoutfs_traced_extent *te),
|
||||
TP_ARGS(sb, ino, te)
|
||||
);
|
||||
DEFINE_EVENT(scoutfs_data_file_extent_class, scoutfs_data_convert_unwritten,
|
||||
TP_PROTO(struct super_block *sb, __u64 ino,
|
||||
struct scoutfs_traced_extent *te),
|
||||
TP_ARGS(sb, ino, te)
|
||||
);
|
||||
DEFINE_EVENT(scoutfs_data_file_extent_class, scoutfs_data_prealloc_unwritten,
|
||||
TP_PROTO(struct super_block *sb, __u64 ino,
|
||||
struct scoutfs_traced_extent *te),
|
||||
@@ -471,31 +497,15 @@ TRACE_EVENT(scoutfs_trans_track_item,
|
||||
__entry->res_vals)
|
||||
);
|
||||
|
||||
TRACE_EVENT(scoutfs_ioc_release_ret,
|
||||
TP_PROTO(struct super_block *sb, int ret),
|
||||
|
||||
TP_ARGS(sb, ret),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
SCSB_TRACE_FIELDS
|
||||
__field(int, ret)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
SCSB_TRACE_ASSIGN(sb);
|
||||
__entry->ret = ret;
|
||||
),
|
||||
|
||||
TP_printk(SCSBF" ret %d", SCSB_TRACE_ARGS, __entry->ret)
|
||||
);
|
||||
|
||||
TRACE_EVENT(scoutfs_ioc_release,
|
||||
TP_PROTO(struct super_block *sb, struct scoutfs_ioctl_release *args),
|
||||
TP_PROTO(struct super_block *sb, u64 ino,
|
||||
struct scoutfs_ioctl_release *args),
|
||||
|
||||
TP_ARGS(sb, args),
|
||||
TP_ARGS(sb, ino, args),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
SCSB_TRACE_FIELDS
|
||||
__field(__u64, ino)
|
||||
__field(__u64, block)
|
||||
__field(__u64, count)
|
||||
__field(__u64, vers)
|
||||
@@ -503,13 +513,52 @@ TRACE_EVENT(scoutfs_ioc_release,
|
||||
|
||||
TP_fast_assign(
|
||||
SCSB_TRACE_ASSIGN(sb);
|
||||
__entry->ino = ino;
|
||||
__entry->block = args->block;
|
||||
__entry->count = args->count;
|
||||
__entry->vers = args->data_version;
|
||||
),
|
||||
|
||||
TP_printk(SCSBF" block %llu count %llu vers %llu", SCSB_TRACE_ARGS,
|
||||
__entry->block, __entry->count, __entry->vers)
|
||||
TP_printk(SCSBF" ino %llu block %llu count %llu vers %llu",
|
||||
SCSB_TRACE_ARGS, __entry->ino, __entry->block,
|
||||
__entry->count, __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, count)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
SCSB_TRACE_ASSIGN(sb);
|
||||
__entry->ino = ino;
|
||||
__entry->vers = args->data_version;
|
||||
__entry->offset = args->offset;
|
||||
__entry->count = args->count;
|
||||
),
|
||||
|
||||
TP_printk(SCSBF" ino %llu vers %llu offset %llu count %d",
|
||||
SCSB_TRACE_ARGS, __entry->ino, __entry->vers,
|
||||
__entry->offset, __entry->count)
|
||||
);
|
||||
|
||||
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,
|
||||
|
||||
Reference in New Issue
Block a user