Commit 15fdeaa65af2362d94e64ddd604b68f588495a05 ("Add support to configurable rebuild rate in iprconfig.") added support to specify the array rebuild rate on command-line interface of iprconfig. Here we add the same functionality on the ncurses interface.
Signed-off-by: Guilherme G. Piccoli <gpicc...@linux.vnet.ibm.com> --- iprconfig.c | 155 ++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 103 insertions(+), 52 deletions(-) diff --git a/iprconfig.c b/iprconfig.c index 9fae41a..d0ab66e 100644 --- a/iprconfig.c +++ b/iprconfig.c @@ -10939,6 +10939,7 @@ struct ioa_config_attr { int active_active; int caching; int verify_array_rebuild; + int rebuild_rate; }; /** @@ -10966,68 +10967,95 @@ int ioa_config_menu(struct ioa_config_attr *ioa_config_attr, same line as the field in which the menu is opened for*/ start_row += 2; /* for title */ /* FIXME */ - if (ioa_config_attr->option == 1 || ioa_config_attr->option == 2 - || ioa_config_attr->option == 3 || ioa_config_attr->option == 4 - || ioa_config_attr->option == 5) { - num_menu_items = 4; - menu_item = malloc(sizeof(ITEM **) * (num_menu_items + 1)); - userptr = malloc(sizeof(int) * num_menu_items); + if (ioa_config_attr->option == 6) { + rc = display_input(start_row + 1, + &ioa_config_attr->rebuild_rate); + /* (start_row + 1) to correct window location */ - menu_index = 0; - if (ioa_config_attr->option == 1) - menu_item[menu_index] = new_item("None",""); - else if (ioa_config_attr->option == 2) - menu_item[menu_index] = new_item("RAID",""); - else if (ioa_config_attr->option == 3) - menu_item[menu_index] = new_item("Disabled",""); - else if (ioa_config_attr->option == 5) - menu_item[menu_index] = new_item("Enabled",""); - else - menu_item[menu_index] = new_item("Default",""); + if (ioa_config_attr->rebuild_rate > 100) + ioa_config_attr->rebuild_rate = 100; - userptr[menu_index] = 0; - set_item_userptr(menu_item[menu_index], - (char *)&userptr[menu_index]); + if (ioa_config_attr->rebuild_rate < 0) + ioa_config_attr->rebuild_rate = 0; - menu_index++; + ioa_config_attr->rebuild_rate = + (ioa_config_attr->rebuild_rate * 15) / 100; + /* + * this constant multiplication *(15/100) it's only used to + * give the user values 0-100 even though IOA only knows 0-15 + */ + } + else { + if ( ioa_config_attr->option == 1 + || ioa_config_attr->option == 2 + || ioa_config_attr->option == 3 + || ioa_config_attr->option == 4 + || ioa_config_attr->option == 5) { + + num_menu_items = 4; + menu_item = malloc(sizeof(ITEM **) + * (num_menu_items + 1)); + userptr = malloc(sizeof(int) * num_menu_items); + + menu_index = 0; + if (ioa_config_attr->option == 1) + menu_item[menu_index] = new_item("None",""); + else if (ioa_config_attr->option == 2) + menu_item[menu_index] = new_item("RAID",""); + else if (ioa_config_attr->option == 3) + menu_item[menu_index] = new_item("Disabled",""); + else if (ioa_config_attr->option == 5) + menu_item[menu_index] = new_item("Enabled",""); + else + menu_item[menu_index] = new_item("Default",""); - if (ioa_config_attr->option == 1) - menu_item[menu_index] = new_item("Primary",""); - else if (ioa_config_attr->option == 2) - menu_item[menu_index] = new_item("JBOD",""); - else if (ioa_config_attr->option == 3) - menu_item[menu_index] = new_item("Enabled",""); - else if (ioa_config_attr->option == 5) - menu_item[menu_index] = new_item("Disabled",""); - else - menu_item[menu_index] = new_item("Disabled",""); + userptr[menu_index] = 0; + set_item_userptr(menu_item[menu_index], + (char *)&userptr[menu_index]); - userptr[menu_index] = 1; - set_item_userptr(menu_item[menu_index], - (char *)&userptr[menu_index]); - menu_index++; + menu_index++; - menu_item[menu_index] = (ITEM *)NULL; - rc = display_menu(menu_item, start_row, menu_index, &retptr); - if (rc == RC_SUCCESS) { if (ioa_config_attr->option == 1) - ioa_config_attr->preferred_primary = *retptr; + menu_item[menu_index] = new_item("Primary",""); else if (ioa_config_attr->option == 2) - ioa_config_attr->gscsi_only_ha = *retptr; + menu_item[menu_index] = new_item("JBOD",""); else if (ioa_config_attr->option == 3) - ioa_config_attr->active_active = *retptr; + menu_item[menu_index] = new_item("Enabled",""); else if (ioa_config_attr->option == 5) - ioa_config_attr->verify_array_rebuild = *retptr; + menu_item[menu_index] = new_item("Disabled",""); else - ioa_config_attr->caching = *retptr; - } + menu_item[menu_index] = new_item("Disabled",""); - i = 0; - while (menu_item[i] != NULL) - free_item(menu_item[i++]); - free(menu_item); - free(userptr); - menu_item = NULL; + userptr[menu_index] = 1; + set_item_userptr(menu_item[menu_index], + (char *)&userptr[menu_index]); + menu_index++; + + menu_item[menu_index] = (ITEM *)NULL; + rc = display_menu(menu_item, start_row, + menu_index,&retptr); + if (rc == RC_SUCCESS) { + if (ioa_config_attr->option == 1) + ioa_config_attr->preferred_primary + = *retptr; + else if (ioa_config_attr->option == 2) + ioa_config_attr->gscsi_only_ha = *retptr; + else if (ioa_config_attr->option == 3) + ioa_config_attr->active_active = *retptr; + else if (ioa_config_attr->option == 5) + ioa_config_attr->verify_array_rebuild + = *retptr; + else + ioa_config_attr->caching = *retptr; + } + + i = 0; + while (menu_item[i] != NULL) + free_item(menu_item[i++]); + free(menu_item); + free(userptr); + menu_item = NULL; + } } return rc; @@ -11050,7 +11078,11 @@ int change_ioa_config(i_container * i_con) i_container *temp_i_con; int found = 0; char *input; - struct ioa_config_attr ioa_config_attr[3]; + struct ioa_config_attr ioa_config_attr[6]; + /* + * For now, the above 6 is a magic number - it means the maximum + * number of options showed at screen. It should be more generic... + */ struct ioa_config_attr *config_attr = NULL; struct ipr_ioa_attr ioa_attr; int header_lines = 0, index = 0; @@ -11068,7 +11100,7 @@ int change_ioa_config(i_container * i_con) if (strcmp(input, "1") == 0) { found++; break; - } + } } if (!found) @@ -11129,6 +11161,7 @@ int change_ioa_config(i_container * i_con) sprintf(pref_str, "Disabled"); i_con = add_i_con(i_con, pref_str, &ioa_config_attr[index++]); } + if (dev->ioa->configure_rebuild_verify) { body = add_line_to_body(body, _("Verify data during array rebuild"), @@ -11146,7 +11179,19 @@ int change_ioa_config(i_container * i_con) &ioa_config_attr[index++]); } + if (dev->ioa->sis64) { + body = add_line_to_body(body, _("Array rebuild rate"), "%3"); + ioa_config_attr[index].option = 6; + ioa_config_attr[index].rebuild_rate = ioa_attr.rebuild_rate; + + sprintf(pref_str, "%d", + (ioa_config_attr[index].rebuild_rate* 100) / 15); + + i_con = add_i_con(i_con, pref_str, &ioa_config_attr[index++]); + } + n_change_ioa_config.body = body; + while (1) { s_out = screen_driver(&n_change_ioa_config, header_lines, i_con); rc = s_out->rc; @@ -11194,7 +11239,13 @@ int change_ioa_config(i_container * i_con) sprintf(temp_i_con->field_data, "Disabled"); ioa_attr.disable_rebuild_verify = 1; } + } else if (config_attr->option == 6) { + sprintf( temp_i_con->field_data, "%d", + (config_attr->rebuild_rate * 100) / 15 ); + ioa_attr.rebuild_rate = + config_attr->rebuild_rate; } + found++; break; } -- 2.1.0 ------------------------------------------------------------------------------ _______________________________________________ Iprdd-devel mailing list Iprdd-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/iprdd-devel