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 <[email protected]>
---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/iprdd-devel