Commit 22a68ba7 authored by Darrick J. Wong's avatar Darrick J. Wong Committed by Dave Chinner
Browse files

xfs: do not use logged xattr updates on V4 filesystems



V4 superblocks do not contain the log_incompat feature bit, which means
that we cannot protect xattr log items against kernels that are too old
to know how to recover them.  Turn off the log items for such
filesystems and adjust the "delayed" name to reflect what it's really
controlling.

Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
parent e3c5de22
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -982,7 +982,7 @@ xfs_attr_set(
	int			error, local;
	int			rmt_blks = 0;
	unsigned int		total;
	int			delayed = xfs_has_larp(mp);
	bool			use_logging = xfs_has_larp(mp);

	if (xfs_is_shutdown(dp->i_mount))
		return -EIO;
@@ -1027,7 +1027,7 @@ xfs_attr_set(
		rmt_blks = xfs_attr3_rmt_blocks(mp, XFS_XATTR_SIZE_MAX);
	}

	if (delayed) {
	if (use_logging) {
		error = xfs_attr_use_log_assist(mp);
		if (error)
			return error;
@@ -1101,7 +1101,7 @@ xfs_attr_set(
out_unlock:
	xfs_iunlock(dp, XFS_ILOCK_EXCL);
drop_incompat:
	if (delayed)
	if (use_logging)
		xlog_drop_incompat_feat(mp->m_log);
	return error;

+2 −1
Original line number Diff line number Diff line
@@ -31,7 +31,8 @@ struct xfs_attr_list_context;
static inline bool xfs_has_larp(struct xfs_mount *mp)
{
#ifdef DEBUG
	return xfs_globals.larp;
	/* Logged xattrs require a V5 super for log_incompat */
	return xfs_has_crc(mp) && xfs_globals.larp;
#else
	return false;
#endif