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

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
...@@ -624,6 +624,8 @@ xfs_iext_insert( ...@@ -624,6 +624,8 @@ xfs_iext_insert(
struct xfs_iext_leaf *new = NULL; struct xfs_iext_leaf *new = NULL;
int nr_entries, i; int nr_entries, i;
ifp->if_seq++;
if (ifp->if_height == 0) if (ifp->if_height == 0)
xfs_iext_alloc_root(ifp, cur); xfs_iext_alloc_root(ifp, cur);
else if (ifp->if_height == 1) else if (ifp->if_height == 1)
...@@ -864,6 +866,8 @@ xfs_iext_remove( ...@@ -864,6 +866,8 @@ xfs_iext_remove(
ASSERT(ifp->if_u1.if_root != NULL); ASSERT(ifp->if_u1.if_root != NULL);
ASSERT(xfs_iext_valid(ifp, cur)); ASSERT(xfs_iext_valid(ifp, cur));
ifp->if_seq++;
nr_entries = xfs_iext_leaf_nr_entries(ifp, leaf, cur->pos) - 1; nr_entries = xfs_iext_leaf_nr_entries(ifp, leaf, cur->pos) - 1;
for (i = cur->pos; i < nr_entries; i++) for (i = cur->pos; i < nr_entries; i++)
leaf->recs[i] = leaf->recs[i + 1]; leaf->recs[i] = leaf->recs[i + 1];
...@@ -970,6 +974,8 @@ xfs_iext_update_extent( ...@@ -970,6 +974,8 @@ xfs_iext_update_extent(
{ {
struct xfs_ifork *ifp = xfs_iext_state_to_fork(ip, state); struct xfs_ifork *ifp = xfs_iext_state_to_fork(ip, state);
ifp->if_seq++;
if (cur->pos == 0) { if (cur->pos == 0) {
struct xfs_bmbt_irec old; struct xfs_bmbt_irec old;
......
...@@ -14,6 +14,7 @@ struct xfs_dinode; ...@@ -14,6 +14,7 @@ struct xfs_dinode;
*/ */
struct xfs_ifork { struct xfs_ifork {
int if_bytes; /* bytes in if_u1 */ 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 */ struct xfs_btree_block *if_broot; /* file's incore btree root */
short if_broot_bytes; /* bytes allocated for root */ short if_broot_bytes; /* bytes allocated for root */
unsigned char if_flags; /* per-fork flags */ unsigned char if_flags; /* per-fork flags */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment