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

Commit 745b3f76 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Darrick J. Wong
Browse files

xfs: maintain a sequence count for inode fork manipulations



Add a simple 32-bit unsigned integer as the sequence count for
modifications to the extent list in the inode fork.  This will be
used to optimize away extent list lookups in the writeback code.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarCarlos Maiolino <cmaiolino@redhat.com>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 9e037cb7
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -624,6 +624,8 @@ xfs_iext_insert(
	struct xfs_iext_leaf	*new = NULL;
	int			nr_entries, i;

	ifp->if_seq++;

	if (ifp->if_height == 0)
		xfs_iext_alloc_root(ifp, cur);
	else if (ifp->if_height == 1)
@@ -864,6 +866,8 @@ xfs_iext_remove(
	ASSERT(ifp->if_u1.if_root != NULL);
	ASSERT(xfs_iext_valid(ifp, cur));

	ifp->if_seq++;

	nr_entries = xfs_iext_leaf_nr_entries(ifp, leaf, cur->pos) - 1;
	for (i = cur->pos; i < nr_entries; i++)
		leaf->recs[i] = leaf->recs[i + 1];
@@ -970,6 +974,8 @@ xfs_iext_update_extent(
{
	struct xfs_ifork	*ifp = xfs_iext_state_to_fork(ip, state);

	ifp->if_seq++;

	if (cur->pos == 0) {
		struct xfs_bmbt_irec	old;

+1 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ struct xfs_dinode;
 */
struct xfs_ifork {
	int			if_bytes;	/* bytes in if_u1 */
	unsigned int		if_seq;		/* cow fork mod counter */
	struct xfs_btree_block	*if_broot;	/* file's incore btree root */
	short			if_broot_bytes;	/* bytes allocated for root */
	unsigned char		if_flags;	/* per-fork flags */