Add a new RAID parameter to allow configuration of vset cache through
the ncurses interface, in the raid creation screen.

Signed-off-by: Gabriel Krisman Bertazi <kris...@linux.vnet.ibm.com>
---
 iprconfig.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 52 insertions(+), 3 deletions(-)

diff --git a/iprconfig.c b/iprconfig.c
index fb95bbd..a67a205 100644
--- a/iprconfig.c
+++ b/iprconfig.c
@@ -3524,7 +3524,7 @@ int display_input(int field_start_row, int *userptr)
  **/
 int configure_raid_parameters(i_container *i_con)
 {
-       FIELD *input_fields[5];
+       FIELD *input_fields[6];
        FIELD *cur_field;
        FORM *form;
        ITEM **raid_item = NULL;
@@ -3542,7 +3542,9 @@ int configure_raid_parameters(i_container *i_con)
        {
                char line[16];
        } *raid_menu_str = NULL, *stripe_menu_str = NULL;
-       char raid_str[16], stripe_str[16], qdepth_str[4];
+       char *cache_pols[] = {"writethrough", "writeback"};
+       ITEM *cache_prot_item[ARRAY_SIZE(cache_pols) + 1];
+       char raid_str[16], stripe_str[16], qdepth_str[4], *cache_prot_str;
        int ch, start_row;
        int cur_field_index;
        int selected_count = 0, ssd_num = 0, hdd_num = 0;
@@ -3552,6 +3554,7 @@ int configure_raid_parameters(i_container *i_con)
        int *retptr;
        int max_x,max_y,start_y,start_x;
        int qdepth, new_qdepth;
+       int cache_prot;
 
        getmaxyx(stdscr,max_y,max_x);
        getbegyx(stdscr,start_y,start_x);
@@ -3614,6 +3617,11 @@ int configure_raid_parameters(i_container *i_con)
        if (raid_index_default == -1)
                raid_index_default = 0;
 
+       if (ioa->vset_write_cache)
+               cache_prot = IPR_DEV_CACHE_WRITE_BACK;
+       else
+               cache_prot = IPR_DEV_CACHE_WRITE_THROUGH;
+
        /* Title */
        input_fields[0] = new_field(1, max_x - start_x,   /* new field size */ 
                                    0, 0,       /* upper left corner */
@@ -3637,8 +3645,13 @@ int configure_raid_parameters(i_container *i_con)
                                    10, 44,       /*  */
                                    0,           /* number of offscreen rows */
                                    0);          /* number of working buffers */
+       /* Sync Cache protection */
+       input_fields[4] = new_field(1, 13,  /* new field size */
+                                   11, 44,     /*  */
+                                   0,          /* number of offscreen rows */
+                                   0);         /* number of working buffers */
 
-       input_fields[4] = NULL;
+       input_fields[5] = NULL;
 
        raid_index = raid_index_default;
        cap_entry = prot_level_list[raid_index].array_cap_entry;
@@ -3650,11 +3663,13 @@ int configure_raid_parameters(i_container *i_con)
 
        set_field_just(input_fields[0], JUSTIFY_CENTER);
        set_field_just(input_fields[3], JUSTIFY_LEFT);
+       set_field_just(input_fields[4], JUSTIFY_LEFT);
 
        field_opts_off(input_fields[0], O_ACTIVE);
        field_opts_off(input_fields[1], O_EDIT);
        field_opts_off(input_fields[2], O_EDIT);
        field_opts_off(input_fields[3], O_EDIT);
+       field_opts_off(input_fields[4], O_EDIT);
 
        set_field_buffer(input_fields[0],        /* field to alter */
                         0,          /* number of buffer to alter */
@@ -3677,6 +3692,7 @@ int configure_raid_parameters(i_container *i_con)
        mvaddstr(8, 0,  "Protection Level . . . . . . . . . . . . :");
        mvaddstr(9, 0,  "Stripe Size  . . . . . . . . . . . . . . :");
        mvprintw(10, 0, "Queue Depth (default = %3d). . . . . . . :", qdepth);
+       mvprintw(11, 0, "Cache Protection . . . . . . . . . . . . :");
        mvaddstr(max_y - 4, 0, _("Press Enter to Continue"));
        mvaddstr(max_y - 2, 0, EXIT_KEY_LABEL CANCEL_KEY_LABEL);
 
@@ -3704,6 +3720,11 @@ int configure_raid_parameters(i_container *i_con)
                                 0,                    /* number of buffer to 
alter */
                                 qdepth_str);          /* string value to set */
 
+               cache_prot_str = cache_pols[cache_prot];
+               set_field_buffer(input_fields[4],     /* field to alter */
+                                0,                   /* number of buffer to 
alter */
+                                cache_prot_str);     /* string value to set */
+
                refresh();
                ch = getch();
 
@@ -3814,6 +3835,33 @@ int configure_raid_parameters(i_container *i_con)
                                else
                                        qdepth = new_qdepth;
                                continue;
+                       } else if (cur_field_index == 4) {
+                               userptr = realloc(userptr,
+                                                 (sizeof(int) *
+                                                  (ARRAY_SIZE(cache_pols) + 
1)));
+
+                               for (index = 0; index < ARRAY_SIZE(cache_pols);
+                                    index++) {
+                                       cache_prot_item[index] =
+                                               new_item(cache_pols[index], "");
+                                       userptr[index] = index;
+                                       set_item_userptr(cache_prot_item[index],
+                                                        (char 
*)&userptr[index]);
+                               }
+                               cache_prot_item[index] = (ITEM *) NULL;
+
+                               start_row = 8;
+                               rc = display_menu(cache_prot_item, start_row,
+                                                 index, &retptr);
+                               if (rc == RC_SUCCESS) {
+                                       cache_prot = *retptr;
+                               }
+                               for (index = 0; index < ARRAY_SIZE(cache_pols);
+                                    index++)
+                                       free_item(cache_prot_item[index]);
+                               if (rc == EXIT_FLAG)
+                                       goto leave;
+                               continue;
                        } else
                                continue;
 
@@ -3830,6 +3878,7 @@ int configure_raid_parameters(i_container *i_con)
                        cur_raid_cmd->prot_level = cap_entry->prot_level;
                        cur_raid_cmd->stripe_size = stripe_sz;
                        cur_raid_cmd->qdepth = qdepth;
+                       cur_raid_cmd->vset_cache = cache_prot;
                        goto leave;
                } else if (ch == KEY_RIGHT)
                        form_driver(form, REQ_NEXT_CHAR);
-- 
2.1.0


------------------------------------------------------------------------------
Go from Idea to Many App Stores Faster with Intel(R) XDK
Give your users amazing mobile app experiences with Intel(R) XDK.
Use one codebase in this all-in-one HTML5 development environment.
Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
http://pubads.g.doubleclick.net/gampad/clk?id=254741911&iu=/4140
_______________________________________________
Iprdd-devel mailing list
Iprdd-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iprdd-devel

Reply via email to