mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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: Christoph Hellwig <hch@lst.de> Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
		
							parent
							
								
									9e037cb797
								
							
						
					
					
						commit
						745b3f76d1
					
				
					 2 changed files with 7 additions and 0 deletions
				
			
		| 
						 | 
					@ -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(
 | 
				
			||||||
	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(
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	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;
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
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 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue