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