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

Reply via email to