IMSM: allow some array attribute bits to be ignored.

Some bits are not handled by mdadm, but their presence should not
cause failure.
In particular MPB_ATTRIB_NEVER_USE appears harmless.

Reported-by: Thomas Steinborn <thestonewell@googlemail.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
NeilBrown 2011-08-09 08:49:34 +10:00
parent 6218489119
commit 418f9b368a
1 changed files with 10 additions and 4 deletions

View File

@ -74,14 +74,17 @@
/* Define all supported attributes that have to be accepted by mdadm
*/
#define MPB_ATTRIB_SUPPORTED MPB_ATTRIB_CHECKSUM_VERIFY | \
#define MPB_ATTRIB_SUPPORTED (MPB_ATTRIB_CHECKSUM_VERIFY | \
MPB_ATTRIB_2TB | \
MPB_ATTRIB_2TB_DISK | \
MPB_ATTRIB_RAID0 | \
MPB_ATTRIB_RAID1 | \
MPB_ATTRIB_RAID10 | \
MPB_ATTRIB_RAID5 | \
MPB_ATTRIB_EXP_STRIPE_SIZE
MPB_ATTRIB_EXP_STRIPE_SIZE)
/* Define attributes that are unused but not harmful */
#define MPB_ATTRIB_IGNORED (MPB_ATTRIB_NEVER_USE)
#define MPB_SECTOR_CNT 2210
#define IMSM_RESERVED_SECTORS 4096
@ -1141,11 +1144,14 @@ void examine_migr_rec_imsm(struct intel_super *super)
static int imsm_check_attributes(__u32 attributes)
{
int ret_val = 1;
__u32 not_supported = (MPB_ATTRIB_SUPPORTED)^0xffffffff;
__u32 not_supported = MPB_ATTRIB_SUPPORTED^0xffffffff;
not_supported &= ~MPB_ATTRIB_IGNORED;
not_supported &= attributes;
if (not_supported) {
fprintf(stderr, Name "(IMSM): Unsupported attributes : %x\n", not_supported);
fprintf(stderr, Name "(IMSM): Unsupported attributes : %x\n",
(unsigned)__le32_to_cpu(not_supported));
if (not_supported & MPB_ATTRIB_CHECKSUM_VERIFY) {
dprintf("\t\tMPB_ATTRIB_CHECKSUM_VERIFY \n");
not_supported ^= MPB_ATTRIB_CHECKSUM_VERIFY;