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: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Родитель
e3c5de2202
Коммит
22a68ba724
|
@ -982,7 +982,7 @@ xfs_attr_set(
|
||||||
int error, local;
|
int error, local;
|
||||||
int rmt_blks = 0;
|
int rmt_blks = 0;
|
||||||
unsigned int total;
|
unsigned int total;
|
||||||
int delayed = xfs_has_larp(mp);
|
bool use_logging = xfs_has_larp(mp);
|
||||||
|
|
||||||
if (xfs_is_shutdown(dp->i_mount))
|
if (xfs_is_shutdown(dp->i_mount))
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
@ -1027,7 +1027,7 @@ xfs_attr_set(
|
||||||
rmt_blks = xfs_attr3_rmt_blocks(mp, XFS_XATTR_SIZE_MAX);
|
rmt_blks = xfs_attr3_rmt_blocks(mp, XFS_XATTR_SIZE_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (delayed) {
|
if (use_logging) {
|
||||||
error = xfs_attr_use_log_assist(mp);
|
error = xfs_attr_use_log_assist(mp);
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
|
@ -1101,7 +1101,7 @@ xfs_attr_set(
|
||||||
out_unlock:
|
out_unlock:
|
||||||
xfs_iunlock(dp, XFS_ILOCK_EXCL);
|
xfs_iunlock(dp, XFS_ILOCK_EXCL);
|
||||||
drop_incompat:
|
drop_incompat:
|
||||||
if (delayed)
|
if (use_logging)
|
||||||
xlog_drop_incompat_feat(mp->m_log);
|
xlog_drop_incompat_feat(mp->m_log);
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,8 @@ struct xfs_attr_list_context;
|
||||||
static inline bool xfs_has_larp(struct xfs_mount *mp)
|
static inline bool xfs_has_larp(struct xfs_mount *mp)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
return xfs_globals.larp;
|
/* Logged xattrs require a V5 super for log_incompat */
|
||||||
|
return xfs_has_crc(mp) && xfs_globals.larp;
|
||||||
#else
|
#else
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
|
Загрузка…
Ссылка в новой задаче