mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	xfs: xfs_bmap_punch_delalloc_range() should take a byte range
All the callers of xfs_bmap_punch_delalloc_range() jump through hoops to convert a byte range to filesystem blocks before calling xfs_bmap_punch_delalloc_range(). Instead, pass the byte range to xfs_bmap_punch_delalloc_range() and have it do the conversion to filesystem blocks internally. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
		
							parent
							
								
									f43dc4dc3e
								
							
						
					
					
						commit
						7348b32233
					
				
					 4 changed files with 15 additions and 21 deletions
				
			
		| 
						 | 
				
			
			@ -114,9 +114,8 @@ xfs_end_ioend(
 | 
			
		|||
	if (unlikely(error)) {
 | 
			
		||||
		if (ioend->io_flags & IOMAP_F_SHARED) {
 | 
			
		||||
			xfs_reflink_cancel_cow_range(ip, offset, size, true);
 | 
			
		||||
			xfs_bmap_punch_delalloc_range(ip,
 | 
			
		||||
						      XFS_B_TO_FSBT(mp, offset),
 | 
			
		||||
						      XFS_B_TO_FSB(mp, size));
 | 
			
		||||
			xfs_bmap_punch_delalloc_range(ip, offset,
 | 
			
		||||
					offset + size);
 | 
			
		||||
		}
 | 
			
		||||
		goto done;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -455,12 +454,8 @@ xfs_discard_folio(
 | 
			
		|||
	struct folio		*folio,
 | 
			
		||||
	loff_t			pos)
 | 
			
		||||
{
 | 
			
		||||
	struct inode		*inode = folio->mapping->host;
 | 
			
		||||
	struct xfs_inode	*ip = XFS_I(inode);
 | 
			
		||||
	struct xfs_inode	*ip = XFS_I(folio->mapping->host);
 | 
			
		||||
	struct xfs_mount	*mp = ip->i_mount;
 | 
			
		||||
	size_t			offset = offset_in_folio(folio, pos);
 | 
			
		||||
	xfs_fileoff_t		start_fsb = XFS_B_TO_FSBT(mp, pos);
 | 
			
		||||
	xfs_fileoff_t		pageoff_fsb = XFS_B_TO_FSBT(mp, offset);
 | 
			
		||||
	int			error;
 | 
			
		||||
 | 
			
		||||
	if (xfs_is_shutdown(mp))
 | 
			
		||||
| 
						 | 
				
			
			@ -470,8 +465,9 @@ xfs_discard_folio(
 | 
			
		|||
		"page discard on page "PTR_FMT", inode 0x%llx, pos %llu.",
 | 
			
		||||
			folio, ip->i_ino, pos);
 | 
			
		||||
 | 
			
		||||
	error = xfs_bmap_punch_delalloc_range(ip, start_fsb,
 | 
			
		||||
			i_blocks_per_folio(inode, folio) - pageoff_fsb);
 | 
			
		||||
	error = xfs_bmap_punch_delalloc_range(ip, pos,
 | 
			
		||||
			round_up(pos, folio_size(folio)));
 | 
			
		||||
 | 
			
		||||
	if (error && !xfs_is_shutdown(mp))
 | 
			
		||||
		xfs_alert(mp, "page discard unable to remove delalloc mapping.");
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -590,11 +590,13 @@ xfs_getbmap(
 | 
			
		|||
int
 | 
			
		||||
xfs_bmap_punch_delalloc_range(
 | 
			
		||||
	struct xfs_inode	*ip,
 | 
			
		||||
	xfs_fileoff_t		start_fsb,
 | 
			
		||||
	xfs_fileoff_t		length)
 | 
			
		||||
	xfs_off_t		start_byte,
 | 
			
		||||
	xfs_off_t		end_byte)
 | 
			
		||||
{
 | 
			
		||||
	struct xfs_mount	*mp = ip->i_mount;
 | 
			
		||||
	struct xfs_ifork	*ifp = &ip->i_df;
 | 
			
		||||
	xfs_fileoff_t		end_fsb = start_fsb + length;
 | 
			
		||||
	xfs_fileoff_t		start_fsb = XFS_B_TO_FSBT(mp, start_byte);
 | 
			
		||||
	xfs_fileoff_t		end_fsb = XFS_B_TO_FSB(mp, end_byte);
 | 
			
		||||
	struct xfs_bmbt_irec	got, del;
 | 
			
		||||
	struct xfs_iext_cursor	icur;
 | 
			
		||||
	int			error = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -607,7 +609,7 @@ xfs_bmap_punch_delalloc_range(
 | 
			
		|||
 | 
			
		||||
	while (got.br_startoff + got.br_blockcount > start_fsb) {
 | 
			
		||||
		del = got;
 | 
			
		||||
		xfs_trim_extent(&del, start_fsb, length);
 | 
			
		||||
		xfs_trim_extent(&del, start_fsb, end_fsb - start_fsb);
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * A delete can push the cursor forward. Step back to the
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ xfs_bmap_rtalloc(struct xfs_bmalloca *ap)
 | 
			
		|||
#endif /* CONFIG_XFS_RT */
 | 
			
		||||
 | 
			
		||||
int	xfs_bmap_punch_delalloc_range(struct xfs_inode *ip,
 | 
			
		||||
		xfs_fileoff_t start_fsb, xfs_fileoff_t length);
 | 
			
		||||
		xfs_off_t start_byte, xfs_off_t end_byte);
 | 
			
		||||
 | 
			
		||||
struct kgetbmap {
 | 
			
		||||
	__s64		bmv_offset;	/* file offset of segment in blocks */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1126,12 +1126,8 @@ xfs_buffered_write_delalloc_punch(
 | 
			
		|||
	loff_t			offset,
 | 
			
		||||
	loff_t			length)
 | 
			
		||||
{
 | 
			
		||||
	struct xfs_mount	*mp = XFS_M(inode->i_sb);
 | 
			
		||||
	xfs_fileoff_t		start_fsb = XFS_B_TO_FSBT(mp, offset);
 | 
			
		||||
	xfs_fileoff_t		end_fsb = XFS_B_TO_FSB(mp, offset + length);
 | 
			
		||||
 | 
			
		||||
	return xfs_bmap_punch_delalloc_range(XFS_I(inode), start_fsb,
 | 
			
		||||
				end_fsb - start_fsb);
 | 
			
		||||
	return xfs_bmap_punch_delalloc_range(XFS_I(inode), offset,
 | 
			
		||||
			offset + length);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue