Author: mav
Date: Mon Apr 23 13:04:02 2012
New Revision: 234603
URL: http://svn.freebsd.org/changeset/base/234603

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

Modified:
  head/sys/geom/raid/g_raid.c
  head/sys/geom/raid/g_raid.h
  head/sys/geom/raid/tr_raid1.c
  head/sys/geom/raid/tr_raid1e.c

Modified: head/sys/geom/raid/g_raid.c
==============================================================================
--- head/sys/geom/raid/g_raid.c Mon Apr 23 12:18:38 2012        (r234602)
+++ head/sys/geom/raid/g_raid.c Mon Apr 23 13:04:02 2012        (r234603)
@@ -277,31 +277,87 @@ g_raid_volume_level2str(int level, int q
        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,
                *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;
+               *qual = G_RAID_VOLUME_RLQ_R3P0;
+       } else if (strcasecmp(str, "RAID3-PN") == 0 &&
+                  strcasecmp(str, "RAID3") == 0) {
                *level = G_RAID_VOLUME_RL_RAID3;
-       else if (strcasecmp(str, "RAID4") == 0)
+               *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;
+               *qual = G_RAID_VOLUME_RLQ_R6RA;
+       } else if (strcasecmp(str, "RAID6-RS") == 0) {
                *level = G_RAID_VOLUME_RL_RAID6;
-       else if (strcasecmp(str, "RAID10") == 0 ||
-                strcasecmp(str, "RAID1E") == 0)
+               *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;
+               *qual = G_RAID_VOLUME_RLQ_R5ERA;
+       } else if (strcasecmp(str, "RAID5E-RS") == 0) {
                *level = G_RAID_VOLUME_RL_RAID5E;
-       else if (strcasecmp(str, "RAID5EE") == 0)
+               *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);
 }

Modified: head/sys/geom/raid/g_raid.h
==============================================================================
--- head/sys/geom/raid/g_raid.h Mon Apr 23 12:18:38 2012        (r234602)
+++ head/sys/geom/raid/g_raid.h Mon Apr 23 13:04:02 2012        (r234603)
@@ -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;

Modified: head/sys/geom/raid/tr_raid1.c
==============================================================================
--- head/sys/geom/raid/tr_raid1.c       Mon Apr 23 12:18:38 2012        
(r234602)
+++ head/sys/geom/raid/tr_raid1.c       Mon Apr 23 13:04:02 2012        
(r234603)
@@ -145,7 +145,8 @@ g_raid_tr_taste_raid1(struct g_raid_tr_o
 
        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);

Modified: head/sys/geom/raid/tr_raid1e.c
==============================================================================
--- head/sys/geom/raid/tr_raid1e.c      Mon Apr 23 12:18:38 2012        
(r234602)
+++ head/sys/geom/raid/tr_raid1e.c      Mon Apr 23 13:04:02 2012        
(r234603)
@@ -187,7 +187,7 @@ g_raid_tr_taste_raid1e(struct g_raid_tr_
 
        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);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to