Commit 7302cda7 authored by Darrick J. Wong's avatar Darrick J. Wong
Browse files

xfs: add a realtime flag to the bmap update log redo items



Extend the bmap update (BUI) log items with a new realtime flag that
indicates that the updates apply against a realtime file's data fork.
We'll wire up the actual code later.

Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 2b6a5ec2
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -838,10 +838,12 @@ struct xfs_cud_log_format {

#define XFS_BMAP_EXTENT_ATTR_FORK	(1U << 31)
#define XFS_BMAP_EXTENT_UNWRITTEN	(1U << 30)
#define XFS_BMAP_EXTENT_REALTIME	(1U << 29)

#define XFS_BMAP_EXTENT_FLAGS		(XFS_BMAP_EXTENT_TYPE_MASK | \
					 XFS_BMAP_EXTENT_ATTR_FORK | \
					 XFS_BMAP_EXTENT_UNWRITTEN)
					 XFS_BMAP_EXTENT_UNWRITTEN | \
					 XFS_BMAP_EXTENT_REALTIME)

/*
 * This is the structure used to lay out an bui log item in the
+8 −0
Original line number Diff line number Diff line
@@ -275,6 +275,8 @@ xfs_bmap_update_log_item(
		map->me_flags |= XFS_BMAP_EXTENT_UNWRITTEN;
	if (bi->bi_whichfork == XFS_ATTR_FORK)
		map->me_flags |= XFS_BMAP_EXTENT_ATTR_FORK;
	if (xfs_ifork_is_realtime(bi->bi_owner, bi->bi_whichfork))
		map->me_flags |= XFS_BMAP_EXTENT_REALTIME;
}

static struct xfs_log_item *
@@ -324,6 +326,9 @@ xfs_bmap_update_get_group(
{
	xfs_agnumber_t		agno;

	if (xfs_ifork_is_realtime(bi->bi_owner, bi->bi_whichfork))
		return;

	agno = XFS_FSB_TO_AGNO(mp, bi->bi_bmap.br_startblock);

	/*
@@ -353,6 +358,9 @@ static inline void
xfs_bmap_update_put_group(
	struct xfs_bmap_intent	*bi)
{
	if (xfs_ifork_is_realtime(bi->bi_owner, bi->bi_whichfork))
		return;

	xfs_perag_intent_put(bi->bi_pag);
}

+18 −5
Original line number Diff line number Diff line
@@ -2955,9 +2955,11 @@ DECLARE_EVENT_CLASS(xfs_bmap_deferred_class,
	TP_ARGS(bi),
	TP_STRUCT__entry(
		__field(dev_t, dev)
		__field(dev_t, opdev)
		__field(xfs_agnumber_t, agno)
		__field(xfs_ino_t, ino)
		__field(xfs_agblock_t, agbno)
		__field(xfs_fsblock_t, rtbno)
		__field(int, whichfork)
		__field(xfs_fileoff_t, l_loff)
		__field(xfs_filblks_t, l_len)
@@ -2968,23 +2970,34 @@ DECLARE_EVENT_CLASS(xfs_bmap_deferred_class,
		struct xfs_inode	*ip = bi->bi_owner;

		__entry->dev = ip->i_mount->m_super->s_dev;
		if (xfs_ifork_is_realtime(ip, bi->bi_whichfork)) {
			__entry->agno = 0;
			__entry->agbno = 0;
			__entry->rtbno = bi->bi_bmap.br_startblock;
			__entry->opdev = ip->i_mount->m_rtdev_targp->bt_dev;
		} else {
			__entry->agno = XFS_FSB_TO_AGNO(ip->i_mount,
						bi->bi_bmap.br_startblock);
		__entry->ino = ip->i_ino;
			__entry->agbno = XFS_FSB_TO_AGBNO(ip->i_mount,
						bi->bi_bmap.br_startblock);
			__entry->rtbno = 0;
			__entry->opdev = __entry->dev;
		}
		__entry->ino = ip->i_ino;
		__entry->whichfork = bi->bi_whichfork;
		__entry->l_loff = bi->bi_bmap.br_startoff;
		__entry->l_len = bi->bi_bmap.br_blockcount;
		__entry->l_state = bi->bi_bmap.br_state;
		__entry->op = bi->bi_type;
	),
	TP_printk("dev %d:%d op %s ino 0x%llx agno 0x%x agbno 0x%x %s fileoff 0x%llx fsbcount 0x%llx state %d",
	TP_printk("dev %d:%d op %s opdev %d:%d ino 0x%llx agno 0x%x agbno 0x%x rtbno 0x%llx %s fileoff 0x%llx fsbcount 0x%llx state %d",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  __print_symbolic(__entry->op, XFS_BMAP_INTENT_STRINGS),
		  MAJOR(__entry->opdev), MINOR(__entry->opdev),
		  __entry->ino,
		  __entry->agno,
		  __entry->agbno,
		  __entry->rtbno,
		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
		  __entry->l_loff,
		  __entry->l_len,