mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
hugetlbfs: use tracepoints in hugetlbfs functions.
Here we use the hugetlbfs tracepoint to track the call stack. And the output in trace is as follows: ``` touch-5265 [005] ..... 43.246550: hugetlbfs_alloc_inode: dev 0,51 ino 24621 dir 21959 mode 0100644 touch-5265 [005] ..... 43.246638: hugetlbfs_setattr: dev 0,51 ino 24621 name testfile valid 0x20070 mode 0177777 old_size 0 size -51622648042749952 truncate-5266 [005] ..... 45.590890: hugetlbfs_setattr: dev 0,51 ino 24621 name testfile valid 0x2068 mode 00 old_size 0 size 2097152 rm-5273 [007] ..... 110.052783: hugetlbfs_evict_inode: dev 0,51 ino 24621 mode 0100644 size 2097152 nlink 0 seals 1 blocks 0 <idle>-0 [007] ..s1. 110.059441: hugetlbfs_free_inode: dev 0,51 ino 24621 mode 0100644 size 2097152 nlink 0 seals 1 blocks 0 ``` Signed-off-by: Hongbo Li <lihongbo22@huawei.com> Link: https://lore.kernel.org/r/20240829064110.67884-3-lihongbo22@huawei.com Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
318580ad7f
commit
014ad7c42a
|
|
@ -39,6 +39,9 @@
|
|||
#include <linux/uaccess.h>
|
||||
#include <linux/sched/mm.h>
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/hugetlbfs.h>
|
||||
|
||||
static const struct address_space_operations hugetlbfs_aops;
|
||||
static const struct file_operations hugetlbfs_file_operations;
|
||||
static const struct inode_operations hugetlbfs_dir_inode_operations;
|
||||
|
|
@ -687,6 +690,7 @@ static void hugetlbfs_evict_inode(struct inode *inode)
|
|||
{
|
||||
struct resv_map *resv_map;
|
||||
|
||||
trace_hugetlbfs_evict_inode(inode);
|
||||
remove_inode_hugepages(inode, 0, LLONG_MAX);
|
||||
|
||||
/*
|
||||
|
|
@ -814,8 +818,10 @@ static long hugetlbfs_fallocate(struct file *file, int mode, loff_t offset,
|
|||
if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (mode & FALLOC_FL_PUNCH_HOLE)
|
||||
return hugetlbfs_punch_hole(inode, offset, len);
|
||||
if (mode & FALLOC_FL_PUNCH_HOLE) {
|
||||
error = hugetlbfs_punch_hole(inode, offset, len);
|
||||
goto out_nolock;
|
||||
}
|
||||
|
||||
/*
|
||||
* Default preallocate case.
|
||||
|
|
@ -919,6 +925,9 @@ static long hugetlbfs_fallocate(struct file *file, int mode, loff_t offset,
|
|||
inode_set_ctime_current(inode);
|
||||
out:
|
||||
inode_unlock(inode);
|
||||
|
||||
out_nolock:
|
||||
trace_hugetlbfs_fallocate(inode, mode, offset, len, error);
|
||||
return error;
|
||||
}
|
||||
|
||||
|
|
@ -935,6 +944,8 @@ static int hugetlbfs_setattr(struct mnt_idmap *idmap,
|
|||
if (error)
|
||||
return error;
|
||||
|
||||
trace_hugetlbfs_setattr(inode, dentry, attr);
|
||||
|
||||
if (ia_valid & ATTR_SIZE) {
|
||||
loff_t oldsize = inode->i_size;
|
||||
loff_t newsize = attr->ia_size;
|
||||
|
|
@ -1033,6 +1044,7 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb,
|
|||
break;
|
||||
}
|
||||
lockdep_annotate_inode_mutex_key(inode);
|
||||
trace_hugetlbfs_alloc_inode(inode, dir, mode);
|
||||
} else {
|
||||
if (resv_map)
|
||||
kref_put(&resv_map->refs, resv_map_release);
|
||||
|
|
@ -1272,6 +1284,7 @@ static struct inode *hugetlbfs_alloc_inode(struct super_block *sb)
|
|||
|
||||
static void hugetlbfs_free_inode(struct inode *inode)
|
||||
{
|
||||
trace_hugetlbfs_free_inode(inode);
|
||||
kmem_cache_free(hugetlbfs_inode_cachep, HUGETLBFS_I(inode));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user