Commit 13c7c54b authored by Darrick J. Wong's avatar Darrick J. Wong
Browse files

xfs: separate out setting buftarg atomic writes limits



Separate out setting buftarg atomic writes limits into a dedicated
function, xfs_configure_buftarg_atomic_writes(), to keep the specific
functionality self-contained.

For naming consistency, rename xfs_setsize_buftarg() ->
xfs_configure_buftarg().

Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
[jpg: separate out from patch "xfs: ignore HW which ..."]
Signed-off-by: default avatarJohn Garry <john.g.garry@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 5af9f550
Loading
Loading
Loading
Loading
+24 −8
Original line number Diff line number Diff line
@@ -1714,13 +1714,33 @@ xfs_free_buftarg(
	kfree(btp);
}

/*
 * Configure this buffer target for hardware-assisted atomic writes if the
 * underlying block device supports is congruent with the filesystem geometry.
 */
static inline void
xfs_configure_buftarg_atomic_writes(
	struct xfs_buftarg	*btp)
{
	unsigned int		min_bytes, max_bytes;

	min_bytes = bdev_atomic_write_unit_min_bytes(btp->bt_bdev);
	max_bytes = bdev_atomic_write_unit_max_bytes(btp->bt_bdev);

	btp->bt_bdev_awu_min = min_bytes;
	btp->bt_bdev_awu_max = max_bytes;
}

/* Configure a buffer target that abstracts a block device. */
int
xfs_setsize_buftarg(
xfs_configure_buftarg(
	struct xfs_buftarg	*btp,
	unsigned int		sectorsize)
{
	int			error;

	ASSERT(btp->bt_bdev != NULL);

	/* Set up metadata sector size info */
	btp->bt_meta_sectorsize = sectorsize;
	btp->bt_meta_sectormask = sectorsize - 1;
@@ -1733,6 +1753,9 @@ xfs_setsize_buftarg(
		return -EINVAL;
	}

	if (bdev_can_atomic_write(btp->bt_bdev))
		xfs_configure_buftarg_atomic_writes(btp);

	return 0;
}

@@ -1797,13 +1820,6 @@ xfs_alloc_buftarg(
	btp->bt_daxdev = fs_dax_get_by_bdev(btp->bt_bdev, &btp->bt_dax_part_off,
					    mp, ops);

	if (bdev_can_atomic_write(btp->bt_bdev)) {
		btp->bt_bdev_awu_min = bdev_atomic_write_unit_min_bytes(
						btp->bt_bdev);
		btp->bt_bdev_awu_max = bdev_atomic_write_unit_max_bytes(
						btp->bt_bdev);
	}

	/*
	 * Flush and invalidate all devices' pagecaches before reading any
	 * metadata because XFS doesn't use the bdev pagecache.
+1 −1
Original line number Diff line number Diff line
@@ -374,7 +374,7 @@ struct xfs_buftarg *xfs_alloc_buftarg(struct xfs_mount *mp,
extern void xfs_free_buftarg(struct xfs_buftarg *);
extern void xfs_buftarg_wait(struct xfs_buftarg *);
extern void xfs_buftarg_drain(struct xfs_buftarg *);
extern int xfs_setsize_buftarg(struct xfs_buftarg *, unsigned int);
int xfs_configure_buftarg(struct xfs_buftarg *btp, unsigned int sectorsize);

#define xfs_getsize_buftarg(buftarg)	block_size((buftarg)->bt_bdev)
#define xfs_readonly_buftarg(buftarg)	bdev_read_only((buftarg)->bt_bdev)
+3 −3
Original line number Diff line number Diff line
@@ -537,7 +537,7 @@ xfs_setup_devices(
{
	int			error;

	error = xfs_setsize_buftarg(mp->m_ddev_targp, mp->m_sb.sb_sectsize);
	error = xfs_configure_buftarg(mp->m_ddev_targp, mp->m_sb.sb_sectsize);
	if (error)
		return error;

@@ -546,7 +546,7 @@ xfs_setup_devices(

		if (xfs_has_sector(mp))
			log_sector_size = mp->m_sb.sb_logsectsize;
		error = xfs_setsize_buftarg(mp->m_logdev_targp,
		error = xfs_configure_buftarg(mp->m_logdev_targp,
					    log_sector_size);
		if (error)
			return error;
@@ -560,7 +560,7 @@ xfs_setup_devices(
		}
		mp->m_rtdev_targp = mp->m_ddev_targp;
	} else if (mp->m_rtname) {
		error = xfs_setsize_buftarg(mp->m_rtdev_targp,
		error = xfs_configure_buftarg(mp->m_rtdev_targp,
					    mp->m_sb.sb_sectsize);
		if (error)
			return error;