Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4aaf15d1 authored by Dave Chinner's avatar Dave Chinner Committed by Alex Elder
Browse files

xfs: Add inode pin counts to traces



We don't record pin counts in inode events right now, and this makes
it difficult to track down problems related to pinning inodes. Add
the pin count to the inode trace class and add trace events for
pinning and unpinning inodes.

Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 43f5efc5
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -562,18 +562,21 @@ DECLARE_EVENT_CLASS(xfs_inode_class,
		__field(dev_t, dev)
		__field(xfs_ino_t, ino)
		__field(int, count)
		__field(int, pincount)
		__field(unsigned long, caller_ip)
	),
	TP_fast_assign(
		__entry->dev = VFS_I(ip)->i_sb->s_dev;
		__entry->ino = ip->i_ino;
		__entry->count = atomic_read(&VFS_I(ip)->i_count);
		__entry->pincount = atomic_read(&ip->i_pincount);
		__entry->caller_ip = caller_ip;
	),
	TP_printk("dev %d:%d ino 0x%llx count %d caller %pf",
	TP_printk("dev %d:%d ino 0x%llx count %d pincount %d caller %pf",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  __entry->ino,
		  __entry->count,
		  __entry->pincount,
		  (char *)__entry->caller_ip)
)

@@ -583,6 +586,10 @@ DEFINE_EVENT(xfs_inode_class, name, \
	TP_ARGS(ip, caller_ip))
DEFINE_INODE_EVENT(xfs_ihold);
DEFINE_INODE_EVENT(xfs_irele);
DEFINE_INODE_EVENT(xfs_inode_pin);
DEFINE_INODE_EVENT(xfs_inode_unpin);
DEFINE_INODE_EVENT(xfs_inode_unpin_nowait);

/* the old xfs_itrace_entry tracer - to be replaced by s.th. in the VFS */
DEFINE_INODE_EVENT(xfs_inode);
#define xfs_itrace_entry(ip)    \
+2 −0
Original line number Diff line number Diff line
@@ -2449,6 +2449,8 @@ xfs_iunpin_nowait(
{
	ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED));

	trace_xfs_inode_unpin_nowait(ip, _RET_IP_);

	/* Give the log a push to start the unpinning I/O */
	xfs_log_force_lsn(ip->i_mount, ip->i_itemp->ili_last_lsn, 0);

+2 −0
Original line number Diff line number Diff line
@@ -543,6 +543,7 @@ xfs_inode_item_pin(
{
	ASSERT(xfs_isilocked(iip->ili_inode, XFS_ILOCK_EXCL));

	trace_xfs_inode_pin(iip->ili_inode, _RET_IP_);
	atomic_inc(&iip->ili_inode->i_pincount);
}

@@ -561,6 +562,7 @@ xfs_inode_item_unpin(
{
	struct xfs_inode	*ip = iip->ili_inode;

	trace_xfs_inode_unpin(ip, _RET_IP_);
	ASSERT(atomic_read(&ip->i_pincount) > 0);
	if (atomic_dec_and_test(&ip->i_pincount))
		wake_up(&ip->i_ipin_wait);