From 72f112572389a8d5f04323c0ce6a28a610714446 Mon Sep 17 00:00:00 2001 From: Eric Sandeen Date: Wed, 2 Dec 2009 11:19:48 -0600 Subject: [PATCH] xfs_db: modify bad_features2 when modifying features2 The "attr1" command in xfs_db, for example, only modifies the features2 field; when mounted, the kernel will find a mismatch between features2 and bad_features2, and attr2 gets turned back on. I think the simplest fix is to modify do_version to modify both fields, but not if there is an existing mismatch that should be investigated first. Any mismatch can be fixed up by writing directly to the superblock fields. Signed-off-by: Eric Sandeen Reviewed-by: Christoph Hellwig --- db/sb.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/db/sb.c b/db/sb.c index 7c61b15a4..961a939ef 100644 --- a/db/sb.c +++ b/db/sb.c @@ -556,6 +556,12 @@ do_version(xfs_agnumber_t agno, __uint16_t version, __uint32_t features) if (!get_sb(agno, &tsb)) return 0; + if (xfs_sb_has_mismatched_features2(&tsb)) { + dbprintf(_("Superblock has mismatched features2 fields, " + "skipping modification\n")); + return 0; + } + if ((version & XFS_SB_VERSION_LOGV2BIT) && !xfs_sb_version_haslogv2(&tsb)) { tsb.sb_logsunit = 1; @@ -564,7 +570,8 @@ do_version(xfs_agnumber_t agno, __uint16_t version, __uint32_t features) tsb.sb_versionnum = version; tsb.sb_features2 = features; - fields |= XFS_SB_VERSIONNUM | XFS_SB_FEATURES2; + tsb.sb_bad_features2 = features; + fields |= XFS_SB_VERSIONNUM | XFS_SB_FEATURES2 | XFS_SB_BAD_FEATURES2; libxfs_sb_to_disk(iocur_top->data, &tsb, fields); write_cur(); return 1; -- 2.47.2