X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=repair%2Fversions.c;h=4c44b4e79c9514d0a00760a0ce43df24c73fcfee;hb=b7fdeb4debfd9b992ec9a02e725c78923449c9b0;hp=0bf4ab3d02904fa347bc1230f1bd9b72671b7350;hpb=03b28059d28860c006df894252543803fcf0cae3;p=thirdparty%2Fxfsprogs-dev.git diff --git a/repair/versions.c b/repair/versions.c index 0bf4ab3d0..4c44b4e79 100644 --- a/repair/versions.c +++ b/repair/versions.c @@ -1,28 +1,33 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc. * All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "xfs/libxfs.h" +#include "libxfs.h" -#define EXTERN -#include "versions.h" -#undef EXTERN #include "err_protos.h" #include "globals.h" +#include "versions.h" + +/* + * filesystem feature global vars, set to 1 if the feature + * is on, 0 otherwise + */ + +int fs_attributes; +int fs_attributes2; +int fs_inode_nlink; +int fs_quotas; +int fs_aligned_inodes; +int fs_sb_feature_bits; +int fs_has_extflgbit; + +/* + * inode chunk alignment, fsblocks + */ + +xfs_extlen_t fs_ino_alignment; void update_sb_version(xfs_mount_t *mp) @@ -31,15 +36,11 @@ update_sb_version(xfs_mount_t *mp) sb = &mp->m_sb; - if (fs_attributes && !xfs_sb_version_hasattr(sb)) { - ASSERT(fs_attributes_allowed); + if (fs_attributes && !xfs_sb_version_hasattr(sb)) xfs_sb_version_addattr(sb); - } - if (fs_attributes2 && !xfs_sb_version_hasattr2(sb)) { - ASSERT(fs_attributes2_allowed); + if (fs_attributes2 && !xfs_sb_version_hasattr2(sb)) xfs_sb_version_addattr2(sb); - } /* V2 inode conversion is now always going to happen */ if (!(sb->sb_versionnum & XFS_SB_VERSION_NLINKBIT)) @@ -51,10 +52,8 @@ update_sb_version(xfs_mount_t *mp) * have quotas. */ if (fs_quotas) { - if (!xfs_sb_version_hasquota(sb)) { - ASSERT(fs_quotas_allowed); + if (!xfs_sb_version_hasquota(sb)) xfs_sb_version_addquota(sb); - } /* * protect against stray bits in the quota flag field @@ -84,7 +83,7 @@ update_sb_version(xfs_mount_t *mp) } } - if (!fs_aligned_inodes && xfs_sb_version_hasalign(sb)) + if (!fs_aligned_inodes && xfs_sb_version_hasalign(sb)) sb->sb_versionnum &= ~XFS_SB_VERSION_ALIGNBIT; } @@ -96,8 +95,6 @@ update_sb_version(xfs_mount_t *mp) int parse_sb_version(xfs_sb_t *sb) { - int issue_warning; - fs_attributes = 0; fs_attributes2 = 0; fs_inode_nlink = 1; @@ -105,21 +102,10 @@ parse_sb_version(xfs_sb_t *sb) fs_aligned_inodes = 0; fs_sb_feature_bits = 0; fs_ino_alignment = 0; - fs_has_extflgbit = 0; + fs_has_extflgbit = 1; have_uquotino = 0; have_gquotino = 0; have_pquotino = 0; - issue_warning = 0; - - if (sb->sb_versionnum & XFS_SB_VERSION_SHAREDBIT) { - do_warn(_("Shared Version bit set. Not supported. Ever.\n")); - return 1; - } - - if (sb->sb_versionnum & XFS_SB_VERSION_SHAREDBIT) { - do_warn(_("Shared Version bit set. Not supported. Ever.\n")); - return 1; - } if (sb->sb_versionnum & XFS_SB_VERSION_SHAREDBIT) { do_warn(_("Shared Version bit set. Not supported. Ever.\n")); @@ -130,22 +116,6 @@ parse_sb_version(xfs_sb_t *sb) * ok, check to make sure that the sb isn't newer * than we are */ - if (xfs_sb_version_hasextflgbit(sb)) { - fs_has_extflgbit = 1; - if (!fs_has_extflgbit_allowed) { - issue_warning = 1; - do_warn( - _("This filesystem has uninitialized extent flags.\n")); - } - } - - if (issue_warning) { - do_warn( -_("This filesystem uses feature(s) not yet supported in this release.\n" - "Please run a more recent version of xfs_repair.\n")); - return(1); - } - if (!xfs_sb_good_version(sb)) { do_warn(_("WARNING: unknown superblock version %d\n"), XFS_SB_VERSION_NUM(sb)); @@ -154,24 +124,8 @@ _("This filesystem contains features not understood by this program.\n")); return(1); } - if (XFS_SB_VERSION_NUM(sb) >= XFS_SB_VERSION_4) { - if (!fs_sb_feature_bits_allowed) { - if (!no_modify) { - do_warn( -_("WARNING: you have disallowed superblock-feature-bits-allowed\n" - "\tbut this superblock has feature bits. The superblock\n" - "\twill be downgraded. This may cause loss of filesystem meta-data\n")); - } else { - do_warn( -_("WARNING: you have disallowed superblock-feature-bits-allowed\n" - "\tbut this superblock has feature bits. The superblock\n" - "\twould be downgraded. This might cause loss of filesystem\n" - "\tmeta-data.\n")); - } - } else { - fs_sb_feature_bits = 1; - } - } + if (XFS_SB_VERSION_NUM(sb) >= XFS_SB_VERSION_4) + fs_sb_feature_bits = 1; /* Look for V5 feature flags we don't know about */ if (XFS_SB_VERSION_NUM(sb) >= XFS_SB_VERSION_5 && @@ -187,96 +141,42 @@ _("Superblock has unknown compat/rocompat/incompat features (0x%x/0x%x/0x%x).\n" return 1; } - if (xfs_sb_version_hasattr(sb)) { - if (!fs_attributes_allowed) { - if (!no_modify) { - do_warn( -_("WARNING: you have disallowed attributes but this filesystem\n" - "\thas attributes. The filesystem will be downgraded and\n" - "\tall attributes will be removed.\n")); - } else { - do_warn( -_("WARNING: you have disallowed attributes but this filesystem\n" - "\thas attributes. The filesystem would be downgraded and\n" - "\tall attributes would be removed.\n")); - } - } else { - fs_attributes = 1; - } - } + if (xfs_sb_version_hasattr(sb)) + fs_attributes = 1; - if (xfs_sb_version_hasattr2(sb)) { - if (!fs_attributes2_allowed) { - if (!no_modify) { - do_warn( -_("WARNING: you have disallowed attr2 attributes but this filesystem\n" - "\thas attributes. The filesystem will be downgraded and\n" - "\tall attr2 attributes will be removed.\n")); - } else { - do_warn( -_("WARNING: you have disallowed attr2 attributes but this filesystem\n" - "\thas attributes. The filesystem would be downgraded and\n" - "\tall attr2 attributes would be removed.\n")); - } - } else { - fs_attributes2 = 1; - } - } + if (xfs_sb_version_hasattr2(sb)) + fs_attributes2 = 1; if (!(sb->sb_versionnum & XFS_SB_VERSION_NLINKBIT)) { - do_warn( -_("WARNING: you have a V1 inode filesystem. It %s be converted to a\n" + if (!no_modify) { + do_warn( +_("WARNING: you have a V1 inode filesystem. It will be converted to a\n" + "\tversion 2 inode filesystem. If you do not want this, run an older\n" + "\tversion of xfs_repair.\n")); + } else { + do_warn( +_("WARNING: you have a V1 inode filesystem. It would be converted to a\n" "\tversion 2 inode filesystem. If you do not want this, run an older\n" - "\tversion of xfs_repair.\n"), no_modify ? "would" : "will"); + "\tversion of xfs_repair.\n")); + } } if (xfs_sb_version_hasquota(sb)) { - if (!fs_quotas_allowed) { - if (!no_modify) { - do_warn( -_("WARNING: you have disallowed quotas but this filesystem\n" - "\thas quotas. The filesystem will be downgraded and\n" - "\tall quota information will be removed.\n")); - } else { - do_warn( -_("WARNING: you have disallowed quotas but this filesystem\n" - "\thas quotas. The filesystem would be downgraded and\n" - "\tall quota information would be removed.\n")); - } - } else { - fs_quotas = 1; - - if (sb->sb_uquotino != 0 && - sb->sb_uquotino != NULLFSINO) - have_uquotino = 1; - - if (sb->sb_gquotino != 0 && - sb->sb_gquotino != NULLFSINO) - have_gquotino = 1; - - if (sb->sb_pquotino != 0 && - sb->sb_pquotino != NULLFSINO) - have_pquotino = 1; - } + fs_quotas = 1; + + if (sb->sb_uquotino != 0 && sb->sb_uquotino != NULLFSINO) + have_uquotino = 1; + + if (sb->sb_gquotino != 0 && sb->sb_gquotino != NULLFSINO) + have_gquotino = 1; + + if (sb->sb_pquotino != 0 && sb->sb_pquotino != NULLFSINO) + have_pquotino = 1; } if (xfs_sb_version_hasalign(sb)) { - if (fs_aligned_inodes_allowed) { - fs_aligned_inodes = 1; - fs_ino_alignment = sb->sb_inoalignmt; - } else { - if (!no_modify) { - do_warn( -_("WARNING: you have disallowed aligned inodes but this filesystem\n" - "\thas aligned inodes. The filesystem will be downgraded.\n" - "\tThis will permanently degrade the performance of this filesystem.\n")); - } else { - do_warn( -_("WARNING: you have disallowed aligned inodes but this filesystem\n" - "\thas aligned inodes. The filesystem would be downgraded.\n" - "\tThis would permanently degrade the performance of this filesystem.\n")); - } - } + fs_aligned_inodes = 1; + fs_ino_alignment = sb->sb_inoalignmt; } /*