On 12/08/2015 09:18 AM, Gabriel Krisman Bertazi wrote:
> 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 <[email protected]>
> ---
> 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"};
Can we change what we display to the end user on the screen to be:
char *cache_pols[] = {"Write Through", "Write Back"};
> + 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 . . . . . . . . . . . . :");
I think this parameter might be confusing for anyone with a battery or supercap
backed cache.
Let's be consistent with what was done in the disk config screen and only
display the attribute
when vset_write_cache = 1.
Additionally, let's name the field to be more consistent with the field on the
disk configuration screen. I'd suggest we call it "Array Write Cache Policy"
here.
> 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);
>
--
Brian King
Power Linux I/O
IBM Linux Technology Center
------------------------------------------------------------------------------
_______________________________________________
Iprdd-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/iprdd-devel