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

Commit 459f0fbc authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Dave Chinner
Browse files

xfs: use iomap infrastructure for DAX zeroing

parent d2bb140e
Loading
Loading
Loading
Loading
+1 −34
Original line number Diff line number Diff line
@@ -80,34 +80,6 @@ xfs_rw_ilock_demote(
		inode_unlock(VFS_I(ip));
}

static int
xfs_dax_zero_range(
	struct inode		*inode,
	loff_t			pos,
	size_t			count)
{
	int			status = 0;

	do {
		unsigned offset, bytes;

		offset = (pos & (PAGE_SIZE -1)); /* Within page */
		bytes = PAGE_SIZE - offset;
		if (bytes > count)
			bytes = count;

		status = dax_zero_page_range(inode, pos, bytes,
					     xfs_get_blocks_direct);
		if (status)
			break;

		pos += bytes;
		count -= bytes;
	} while (count);

	return status;
}

/*
 * Clear the specified ranges to zero through either the pagecache or DAX.
 * Holes and unwritten extents will be left as-is as they already are zeroed.
@@ -118,12 +90,7 @@ xfs_iozero(
	loff_t			pos,
	size_t			count)
{
	struct inode		*inode = VFS_I(ip);

	if (IS_DAX(VFS_I(ip)))
		return xfs_dax_zero_range(inode, pos, count);
	else
		return iomap_zero_range(inode, pos, count, NULL, &xfs_iomap_ops);
	return iomap_zero_range(VFS_I(ip), pos, count, NULL, &xfs_iomap_ops);
}

int
+2 −7
Original line number Diff line number Diff line
@@ -819,13 +819,8 @@ xfs_setattr_size(
	if (newsize > oldsize) {
		error = xfs_zero_eof(ip, newsize, oldsize, &did_zeroing);
	} else {
		if (IS_DAX(inode)) {
			error = dax_truncate_page(inode, newsize,
					xfs_get_blocks_direct);
		} else {
			error = iomap_truncate_page(inode, newsize,
					&did_zeroing, &xfs_iomap_ops);
		}
		error = iomap_truncate_page(inode, newsize, &did_zeroing,
				&xfs_iomap_ops);
	}

	if (error)