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:
Zach Brown
2020-03-05 09:02:06 -08:00
committed by Zach Brown
parent ac3466921a
commit 462749cb87
3 changed files with 80 additions and 24 deletions
+4
View File
@@ -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
View File
@@ -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
View File
@@ -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,