Add names for all primary RAID levels defined by DDF 2.0 specification.

This commit is contained in:
Alexander Motin 2012-04-23 13:04:02 +00:00
parent e26083ca69
commit dbb2e75504
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=234603
4 changed files with 180 additions and 19 deletions

View File

@ -277,31 +277,87 @@ g_raid_volume_level2str(int level, int qual)
case G_RAID_VOLUME_RL_RAID1:
return ("RAID1");
case G_RAID_VOLUME_RL_RAID3:
if (qual == G_RAID_VOLUME_RLQ_R3P0)
return ("RAID3-P0");
if (qual == G_RAID_VOLUME_RLQ_R3PN)
return ("RAID3-PN");
return ("RAID3");
case G_RAID_VOLUME_RL_RAID4:
if (qual == G_RAID_VOLUME_RLQ_R4P0)
return ("RAID3-P0");
if (qual == G_RAID_VOLUME_RLQ_R4PN)
return ("RAID3-PN");
return ("RAID4");
case G_RAID_VOLUME_RL_RAID5:
if (qual == G_RAID_VOLUME_RLQ_R5RA)
return ("RAID5RA");
return ("RAID5-RA");
if (qual == G_RAID_VOLUME_RLQ_R5RS)
return ("RAID5RS");
return ("RAID5-RS");
if (qual == G_RAID_VOLUME_RLQ_R5LA)
return ("RAID5LA");
return ("RAID5-LA");
if (qual == G_RAID_VOLUME_RLQ_R5LS)
return ("RAID5LS");
return ("RAID5-LS");
return ("RAID5");
case G_RAID_VOLUME_RL_RAID6:
if (qual == G_RAID_VOLUME_RLQ_R6RA)
return ("RAID6-RA");
if (qual == G_RAID_VOLUME_RLQ_R6RS)
return ("RAID6-RS");
if (qual == G_RAID_VOLUME_RLQ_R6LA)
return ("RAID6-LA");
if (qual == G_RAID_VOLUME_RLQ_R6LS)
return ("RAID6-LS");
return ("RAID6");
case G_RAID_VOLUME_RL_RAIDMDF:
if (qual == G_RAID_VOLUME_RLQ_RMDFRA)
return ("RAIDMDF-RA");
if (qual == G_RAID_VOLUME_RLQ_RMDFRS)
return ("RAIDMDF-RS");
if (qual == G_RAID_VOLUME_RLQ_RMDFLA)
return ("RAIDMDF-LA");
if (qual == G_RAID_VOLUME_RLQ_RMDFLS)
return ("RAIDMDF-LS");
return ("RAIDMDF");
case G_RAID_VOLUME_RL_RAID1E:
if (qual == G_RAID_VOLUME_RLQ_R1EA)
return ("RAID1E-A");
if (qual == G_RAID_VOLUME_RLQ_R1EO)
return ("RAID1E-O");
return ("RAID1E");
case G_RAID_VOLUME_RL_SINGLE:
return ("SINGLE");
case G_RAID_VOLUME_RL_CONCAT:
return ("CONCAT");
case G_RAID_VOLUME_RL_RAID5E:
if (qual == G_RAID_VOLUME_RLQ_R5ERA)
return ("RAID5E-RA");
if (qual == G_RAID_VOLUME_RLQ_R5ERS)
return ("RAID5E-RS");
if (qual == G_RAID_VOLUME_RLQ_R5ELA)
return ("RAID5E-LA");
if (qual == G_RAID_VOLUME_RLQ_R5ELS)
return ("RAID5E-LS");
return ("RAID5E");
case G_RAID_VOLUME_RL_RAID5EE:
if (qual == G_RAID_VOLUME_RLQ_R5EERA)
return ("RAID5EE-RA");
if (qual == G_RAID_VOLUME_RLQ_R5EERS)
return ("RAID5EE-RS");
if (qual == G_RAID_VOLUME_RLQ_R5EELA)
return ("RAID5EE-LA");
if (qual == G_RAID_VOLUME_RLQ_R5EELS)
return ("RAID5EE-LS");
return ("RAID5EE");
case G_RAID_VOLUME_RL_RAID5R:
if (qual == G_RAID_VOLUME_RLQ_R5RRA)
return ("RAID5R-RA");
if (qual == G_RAID_VOLUME_RLQ_R5RRS)
return ("RAID5R-RS");
if (qual == G_RAID_VOLUME_RLQ_R5RLA)
return ("RAID5R-LA");
if (qual == G_RAID_VOLUME_RLQ_R5RLS)
return ("RAID5R-LS");
return ("RAID5E");
default:
return ("UNKNOWN");
}
@ -317,37 +373,111 @@ g_raid_volume_str2level(const char *str, int *level, int *qual)
*level = G_RAID_VOLUME_RL_RAID0;
else if (strcasecmp(str, "RAID1") == 0)
*level = G_RAID_VOLUME_RL_RAID1;
else if (strcasecmp(str, "RAID3") == 0)
else if (strcasecmp(str, "RAID3-P0") == 0) {
*level = G_RAID_VOLUME_RL_RAID3;
else if (strcasecmp(str, "RAID4") == 0)
*qual = G_RAID_VOLUME_RLQ_R3P0;
} else if (strcasecmp(str, "RAID3-PN") == 0 &&
strcasecmp(str, "RAID3") == 0) {
*level = G_RAID_VOLUME_RL_RAID3;
*qual = G_RAID_VOLUME_RLQ_R3P0;
} else if (strcasecmp(str, "RAID4-P0") == 0) {
*level = G_RAID_VOLUME_RL_RAID4;
else if (strcasecmp(str, "RAID5RA") == 0) {
*qual = G_RAID_VOLUME_RLQ_R4P0;
} else if (strcasecmp(str, "RAID4-PN") == 0 &&
strcasecmp(str, "RAID4") == 0) {
*level = G_RAID_VOLUME_RL_RAID4;
*qual = G_RAID_VOLUME_RLQ_R4P0;
} else if (strcasecmp(str, "RAID5-RA") == 0) {
*level = G_RAID_VOLUME_RL_RAID5;
*qual = G_RAID_VOLUME_RLQ_R5RA;
} else if (strcasecmp(str, "RAID5RS") == 0) {
} else if (strcasecmp(str, "RAID5-RS") == 0) {
*level = G_RAID_VOLUME_RL_RAID5;
*qual = G_RAID_VOLUME_RLQ_R5RS;
} else if (strcasecmp(str, "RAID5") == 0 ||
strcasecmp(str, "RAID5LA") == 0) {
strcasecmp(str, "RAID5-LA") == 0) {
*level = G_RAID_VOLUME_RL_RAID5;
*qual = G_RAID_VOLUME_RLQ_R5LA;
} else if (strcasecmp(str, "RAID5LS") == 0) {
} else if (strcasecmp(str, "RAID5-LS") == 0) {
*level = G_RAID_VOLUME_RL_RAID5;
*qual = G_RAID_VOLUME_RLQ_R5LS;
} else if (strcasecmp(str, "RAID6") == 0)
} else if (strcasecmp(str, "RAID6-RA") == 0) {
*level = G_RAID_VOLUME_RL_RAID6;
else if (strcasecmp(str, "RAID10") == 0 ||
strcasecmp(str, "RAID1E") == 0)
*qual = G_RAID_VOLUME_RLQ_R6RA;
} else if (strcasecmp(str, "RAID6-RS") == 0) {
*level = G_RAID_VOLUME_RL_RAID6;
*qual = G_RAID_VOLUME_RLQ_R6RS;
} else if (strcasecmp(str, "RAID6") == 0 ||
strcasecmp(str, "RAID6-LA") == 0) {
*level = G_RAID_VOLUME_RL_RAID6;
*qual = G_RAID_VOLUME_RLQ_R6LA;
} else if (strcasecmp(str, "RAID6-LS") == 0) {
*level = G_RAID_VOLUME_RL_RAID6;
*qual = G_RAID_VOLUME_RLQ_R6LS;
} else if (strcasecmp(str, "RAIDMDF-RA") == 0) {
*level = G_RAID_VOLUME_RL_RAIDMDF;
*qual = G_RAID_VOLUME_RLQ_RMDFRA;
} else if (strcasecmp(str, "RAIDMDF-RS") == 0) {
*level = G_RAID_VOLUME_RL_RAIDMDF;
*qual = G_RAID_VOLUME_RLQ_RMDFRS;
} else if (strcasecmp(str, "RAIDMDF") == 0 ||
strcasecmp(str, "RAIDMDF-LA") == 0) {
*level = G_RAID_VOLUME_RL_RAIDMDF;
*qual = G_RAID_VOLUME_RLQ_RMDFLA;
} else if (strcasecmp(str, "RAIDMDF-LS") == 0) {
*level = G_RAID_VOLUME_RL_RAIDMDF;
*qual = G_RAID_VOLUME_RLQ_RMDFLS;
} else if (strcasecmp(str, "RAID10") == 0 ||
strcasecmp(str, "RAID1E") == 0 ||
strcasecmp(str, "RAID1E-A") == 0) {
*level = G_RAID_VOLUME_RL_RAID1E;
else if (strcasecmp(str, "SINGLE") == 0)
*qual = G_RAID_VOLUME_RLQ_R1EA;
} else if (strcasecmp(str, "RAID1E-O") == 0) {
*level = G_RAID_VOLUME_RL_RAID1E;
*qual = G_RAID_VOLUME_RLQ_R1EO;
} else if (strcasecmp(str, "SINGLE") == 0)
*level = G_RAID_VOLUME_RL_SINGLE;
else if (strcasecmp(str, "CONCAT") == 0)
*level = G_RAID_VOLUME_RL_CONCAT;
else if (strcasecmp(str, "RAID5E") == 0)
else if (strcasecmp(str, "RAID5E-RA") == 0) {
*level = G_RAID_VOLUME_RL_RAID5E;
else if (strcasecmp(str, "RAID5EE") == 0)
*qual = G_RAID_VOLUME_RLQ_R5ERA;
} else if (strcasecmp(str, "RAID5E-RS") == 0) {
*level = G_RAID_VOLUME_RL_RAID5E;
*qual = G_RAID_VOLUME_RLQ_R5ERS;
} else if (strcasecmp(str, "RAID5E") == 0 ||
strcasecmp(str, "RAID5E-LA") == 0) {
*level = G_RAID_VOLUME_RL_RAID5E;
*qual = G_RAID_VOLUME_RLQ_R5ELA;
} else if (strcasecmp(str, "RAID5E-LS") == 0) {
*level = G_RAID_VOLUME_RL_RAID5E;
*qual = G_RAID_VOLUME_RLQ_R5ELS;
} else if (strcasecmp(str, "RAID5EE-RA") == 0) {
*level = G_RAID_VOLUME_RL_RAID5EE;
else
*qual = G_RAID_VOLUME_RLQ_R5EERA;
} else if (strcasecmp(str, "RAID5EE-RS") == 0) {
*level = G_RAID_VOLUME_RL_RAID5EE;
*qual = G_RAID_VOLUME_RLQ_R5EERS;
} else if (strcasecmp(str, "RAID5EE") == 0 ||
strcasecmp(str, "RAID5EE-LA") == 0) {
*level = G_RAID_VOLUME_RL_RAID5EE;
*qual = G_RAID_VOLUME_RLQ_R5EELA;
} else if (strcasecmp(str, "RAID5EE-LS") == 0) {
*level = G_RAID_VOLUME_RL_RAID5EE;
*qual = G_RAID_VOLUME_RLQ_R5EELS;
} else if (strcasecmp(str, "RAID5R-RA") == 0) {
*level = G_RAID_VOLUME_RL_RAID5R;
*qual = G_RAID_VOLUME_RLQ_R5RRA;
} else if (strcasecmp(str, "RAID5R-RS") == 0) {
*level = G_RAID_VOLUME_RL_RAID5R;
*qual = G_RAID_VOLUME_RLQ_R5RRS;
} else if (strcasecmp(str, "RAID5R") == 0 ||
strcasecmp(str, "RAID5R-LA") == 0) {
*level = G_RAID_VOLUME_RL_RAID5R;
*qual = G_RAID_VOLUME_RLQ_R5RLA;
} else if (strcasecmp(str, "RAID5R-LS") == 0) {
*level = G_RAID_VOLUME_RL_RAID5R;
*qual = G_RAID_VOLUME_RLQ_R5RLS;
} else
return (-1);
return (0);
}

View File

@ -219,18 +219,48 @@ struct g_raid_subdisk {
#define G_RAID_VOLUME_RL_RAID4 0x04
#define G_RAID_VOLUME_RL_RAID5 0x05
#define G_RAID_VOLUME_RL_RAID6 0x06
#define G_RAID_VOLUME_RL_RAIDMDF 0x07
#define G_RAID_VOLUME_RL_RAID1E 0x11
#define G_RAID_VOLUME_RL_SINGLE 0x0f
#define G_RAID_VOLUME_RL_CONCAT 0x1f
#define G_RAID_VOLUME_RL_RAID5E 0x15
#define G_RAID_VOLUME_RL_RAID5EE 0x25
#define G_RAID_VOLUME_RL_RAID5R 0x35
#define G_RAID_VOLUME_RL_UNKNOWN 0xff
#define G_RAID_VOLUME_RLQ_NONE 0x00
#define G_RAID_VOLUME_RLQ_R1SM 0x00
#define G_RAID_VOLUME_RLQ_R1MM 0x01
#define G_RAID_VOLUME_RLQ_R3P0 0x00
#define G_RAID_VOLUME_RLQ_R3PN 0x01
#define G_RAID_VOLUME_RLQ_R4P0 0x00
#define G_RAID_VOLUME_RLQ_R4PN 0x01
#define G_RAID_VOLUME_RLQ_R5RA 0x00
#define G_RAID_VOLUME_RLQ_R5RS 0x01
#define G_RAID_VOLUME_RLQ_R5LA 0x02
#define G_RAID_VOLUME_RLQ_R5LS 0x03
#define G_RAID_VOLUME_RLQ_R6RA 0x00
#define G_RAID_VOLUME_RLQ_R6RS 0x01
#define G_RAID_VOLUME_RLQ_R6LA 0x02
#define G_RAID_VOLUME_RLQ_R6LS 0x03
#define G_RAID_VOLUME_RLQ_RMDFRA 0x00
#define G_RAID_VOLUME_RLQ_RMDFRS 0x01
#define G_RAID_VOLUME_RLQ_RMDFLA 0x02
#define G_RAID_VOLUME_RLQ_RMDFLS 0x03
#define G_RAID_VOLUME_RLQ_R1EA 0x00
#define G_RAID_VOLUME_RLQ_R1EO 0x01
#define G_RAID_VOLUME_RLQ_R5ERA 0x00
#define G_RAID_VOLUME_RLQ_R5ERS 0x01
#define G_RAID_VOLUME_RLQ_R5ELA 0x02
#define G_RAID_VOLUME_RLQ_R5ELS 0x03
#define G_RAID_VOLUME_RLQ_R5EERA 0x00
#define G_RAID_VOLUME_RLQ_R5EERS 0x01
#define G_RAID_VOLUME_RLQ_R5EELA 0x02
#define G_RAID_VOLUME_RLQ_R5EELS 0x03
#define G_RAID_VOLUME_RLQ_R5RRA 0x00
#define G_RAID_VOLUME_RLQ_R5RRS 0x01
#define G_RAID_VOLUME_RLQ_R5RLA 0x02
#define G_RAID_VOLUME_RLQ_R5RLS 0x03
#define G_RAID_VOLUME_RLQ_UNKNOWN 0xff
struct g_raid_volume;

View File

@ -145,7 +145,8 @@ g_raid_tr_taste_raid1(struct g_raid_tr_object *tr, struct g_raid_volume *vol)
trs = (struct g_raid_tr_raid1_object *)tr;
if (tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_RAID1 ||
tr->tro_volume->v_raid_level_qualifier != G_RAID_VOLUME_RLQ_NONE)
(tr->tro_volume->v_raid_level_qualifier != G_RAID_VOLUME_RLQ_R1SM &&
tr->tro_volume->v_raid_level_qualifier != G_RAID_VOLUME_RLQ_R1MM))
return (G_RAID_TR_TASTE_FAIL);
trs->trso_starting = 1;
return (G_RAID_TR_TASTE_SUCCEED);

View File

@ -187,7 +187,7 @@ g_raid_tr_taste_raid1e(struct g_raid_tr_object *tr, struct g_raid_volume *vol)
trs = (struct g_raid_tr_raid1e_object *)tr;
if (tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_RAID1E ||
tr->tro_volume->v_raid_level_qualifier != G_RAID_VOLUME_RLQ_NONE)
tr->tro_volume->v_raid_level_qualifier != G_RAID_VOLUME_RLQ_R1EA)
return (G_RAID_TR_TASTE_FAIL);
trs->trso_starting = 1;
return (G_RAID_TR_TASTE_SUCCEED);