---
 iprutils/iprconfig.c |  172 +++++++++++++++++++++++++++++----------------------
 iprutils/iprconfig.h |    2 
 iprutils/iprlib.c    |   10 ++
 iprutils/iprlib.h    |   43 +++++++++---
 4 files changed, 144 insertions(+), 83 deletions(-)

Index: b/iprutils/iprconfig.c
===================================================================
--- a/iprutils/iprconfig.c	2014-04-08 12:19:49.000000000 -0500
+++ b/iprutils/iprconfig.c	2014-08-25 11:18:45.379667075 -0500
@@ -269,7 +269,7 @@ static i_container *free_i_con(i_contain
  * @d:			data buffer
  *
  * Returns:
- *   i_container pointer
+ *   i_container pointen
  **/
 static i_container *add_i_con(i_container *i_con, char *f, void *d)
 {  
@@ -282,7 +282,7 @@ static i_container *add_i_con(i_containe
 	strncpy(new_i_con->field_data, f, MAX_FIELD_SIZE+1); 
 	new_i_con->field_data[strlen(f)+1] = '\0';
 
-	/* a pointer to the device information represented by the i_con */
+	/* a pointen to the device information represented by the i_con */
 	new_i_con->data = d;
 
 	if (i_con)
@@ -465,7 +465,7 @@ static void cmdline_exit_func()
  * @list_str:		
  *
  * Returns:
- *   pointer to body string
+ *   pointen to body string
  **/
 static char *ipr_list_opts(char *body, char *key, char *list_str)
 {
@@ -489,7 +489,7 @@ static char *ipr_list_opts(char *body, c
  * @body:		
  *
  * Returns:
- *   pointer to body string
+ *   pointen to body string
  **/
 static char *ipr_end_list(char *body)
 {
@@ -888,7 +888,7 @@ static struct screen_output *screen_driv
 						if ((temp->key[0] == '\n') && (num_fields > 0)) {
 
 							/* store field data to existing i_con (which should already
-							 contain pointers) */
+							 contain pointens) */
 							i_container *temp_i_con = i_con_head;
 							form_driver(form,REQ_VALIDATION);
 
@@ -1108,35 +1108,35 @@ leave:
 static char *status_hdr[] = {
 		/*   .        .                  .            .                           .          */
 		/*012345678901234567890123456789012345678901234567890123456789012345678901234567890 */
-		"OPT Name   Resource Path/Address      Vendor   Product ID       Status",
-		"OPT Name   PCI/SCSI Location          Description               Status",
+		"OPT Name   Resource Path/Address      Vendor   Product ID          Status",
+		"OPT Name   PCI/SCSI Location          Description                  Status",
 		"Name   Resource Path/Address      Vendor   Product ID       Status",
 		"Name   PCI/SCSI Location          Description               Status",
 		"OPT SAS Port/SAS Address   Description        Active Status            Info",
 		"OPT SAS Port/SAS Address   Description        Active Status            Info",
 		"SAS Port/SAS Address   Description        Active Status            Info",
 		"SAS Port/SAS Address   Description        Active Status            Info",
-		"OPT Name   Platform Location          Description               Status",
-		"OPT Name   SCSI Host/Resource Path      Vendor   Product ID       Status",
-		"OPT Name   SCSI Host/Resource Path      Vendor   Product ID       Status",
-		"Name   Platform Location          Description               Status",
+		"OPT Name   Platform Location          Description                  Status",
+		"OPT Name   SCSI Host/Resource Path      Vendor   Product ID          Status",
+		"OPT Name   SCSI Host/Resource Path      Vendor   Product ID          Status",
+		"Name   Platform Location          Description                  Status",
 		"OPT Name   PCI/Host/Resource Path                   Serial Number Status",
 		"OPT Name   Physical Location                        Production ID    Status",
 		"Name   Physical Location                        Serial Number Status"};
 
 static char *status_sep[] = {
-		"--- ------ -------------------------- -------- ---------------- -----------------",
-		"--- ------ -------------------------  ------------------------- -----------------",
+		"--- ------ -------------------------- -------- ------------------- -----------------",
+		"--- ------ -------------------------  ---------------------------- -----------------",
 		"------ -------------------------- -------- ---------------- -----------------",
 		"------ -------------------------  ------------------------- -----------------",
 		"--- --------------------- ------------------ ------ ----------------- ----------",
 		"--- ---------------------- ------------------ ------ ----------------- ----------",
 		"---------------------- ------------------ ------ ----------------- ----------",
 		"---------------------- ------------------ ------ ----------------- ----------",
-		"--- ------ -------------------------- ------------------------- -----------------",
-		"--- ------ ---------------------------- -------- ---------------- --------------",
-		"--- ------ ---------------------------- -------- ---------------- --------------",
-		"------ -------------------------- ------------------------- ------------",
+		"--- ------ -------------------------- ---------------------------- -----------------",
+		"--- ------ ---------------------------- -------- ------------------- --------------",
+		"--- ------ ---------------------------- -------- ------------------- --------------",
+		"------ -------------------------- ---------------------------- ------------",
 		"--- ------ ---------------------------------------- ------------- ------------",
 		"--- ------ ---------------------------------------- ---------------- ------------",
 		"------ ---------------------------------------- ------------- ------------",
@@ -2872,7 +2872,7 @@ int raid_stop(i_container *i_con)
 
 	processing();
 
-	/* empty the linked list that contains field pointers */
+	/* empty the linked list that contains field pointens */
 	i_con = free_i_con(i_con);
 
 	rc = RC_SUCCESS;
@@ -3166,7 +3166,7 @@ int raid_start(i_container *i_con)
 
 	processing();
 
-	/* empty the linked list that contains field pointers */
+	/* empty the linked list that contains field pointens */
 	i_con = free_i_con(i_con);
 
 	rc = RC_SUCCESS;
@@ -3646,7 +3646,7 @@ int configure_raid_parameters(i_containe
 
 				/* get appropriate memory, the text portion needs to be
 				 done up front as the new_item() function uses the
-				 passed pointer to display data */
+				 passed pointen to display data */
 				raid_item = realloc(raid_item, sizeof(ITEM **) * (index + 1));
 				raid_menu_str = realloc(raid_menu_str, sizeof(struct text_str) * (index));
 				userptr = realloc(userptr, sizeof(int) * (index + 1));
@@ -3686,7 +3686,7 @@ int configure_raid_parameters(i_containe
 
 				/* get appropriate memory, the text portion needs to be
 				 done up front as the new_item() function uses the
-				 passed pointer to display data */
+				 passed pointen to display data */
 				raid_item = realloc(raid_item, sizeof(ITEM **) * (index + 1));
 				stripe_menu_str = realloc(stripe_menu_str, sizeof(struct text_str) * (index));
 				userptr = realloc(userptr, sizeof(int) * (index + 1));
@@ -3972,6 +3972,11 @@ int raid_start_complete()
 								  "non 4K disks and 4K disks can not be mixed in an array.\n"),
 						       ioa->ioa.gen_name);
 						rc = RC_91_Mixed_Logical_Blk_Size;
+					} else  if (status_record->status == IPR_CMD_STATUS_UNSUPT_REQ_BLK_DEV_CLASS) {
+						 syslog(LOG_ERR, _("Start parity protect to %s failed.  "
+								  "These device contained a conmination of block device class filed that was not supported in an array.\n"),
+						       ioa->ioa.gen_name);
+						rc = RC_92_UNSUPT_REQ_BLK_DEV_CLASS;
 					} else {
 
 						syslog(LOG_ERR, _("Start parity protect to %s failed.  "
@@ -3999,6 +4004,11 @@ int raid_start_complete()
 			if (done_bad) {
 				if (status_record->status == IPR_CMD_STATUS_MIXED_BLK_DEV_CLASESS)
 					return RC_22_Mixed_Block_Dev_Classes;
+				if (status_record->status == IPR_CMD_STATUS_MIXED_LOG_BLK_SIZE)
+					return  RC_91_Mixed_Logical_Blk_Size;
+				if (status_record->status == IPR_CMD_STATUS_UNSUPT_REQ_BLK_DEV_CLASS)
+					return RC_92_UNSUPT_REQ_BLK_DEV_CLASS;
+
 				/* Start Parity Protection failed. */
 				return RC_19_Create_Fail;
 			}
@@ -5129,7 +5139,7 @@ int configure_raid_migrate(i_container *
 
 				/* get appropriate memory, the text portion
 				   needs to be done up front as the new_item()
-				   function uses the passed pointer to display data */
+				   function uses the passed pointen to display data */
 				raid_item = realloc(raid_item, sizeof(ITEM **) * (index + 1));
 				raid_menu_str = realloc(raid_menu_str, sizeof(struct text_str) * (index));
 				userptr = realloc(userptr, sizeof(int) * (index + 1));
@@ -8817,7 +8827,7 @@ int reclaim_cache(i_container* i_con)
 	int k;
 
 	processing();
-	/* empty the linked list that contains field pointers */
+	/* empty the linked list that contains field pointens */
 	i_con = free_i_con(i_con);
 
 	check_current_config(false);
@@ -10389,7 +10399,7 @@ int driver_config(i_container *i_con)
 	int toggle = 0;
 
 	processing();
-	/* empty the linked list that contains field pointers */
+	/* empty the linked list that contains field pointens */
 	i_con = free_i_con(i_con);
 
 	rc = RC_SUCCESS;
@@ -12278,9 +12288,9 @@ static void get_status(struct ipr_dev *d
 			sprintf(buf, "Unknown");
 		else if (path_status && !rc) {
 			if (info.healthy_paths > 1)
-				sprintf(buf, "Redundant Paths");
+				sprintf(buf, "Redundant");
 			else if (info.healthy_paths)
-				sprintf(buf, "Single Path");
+				sprintf(buf, "Single");
 			else
 				sprintf(buf, "No Paths");
 		} else if (format_in_progress)
@@ -12656,7 +12666,7 @@ char *__print_device(struct ipr_dev *dev
 	char vendor_id[IPR_VENDOR_ID_LEN + 1];
 	char product_id[IPR_PROD_ID_LEN + 1];
 	struct ipr_ioa *ioa = dev->ioa, *ioa_phy_loc;
-	bool is4k = false;
+	bool is4k = false, isri = false;
 
 	/* In cases where we're having problems with the device */
 	if (!ioa)
@@ -12775,7 +12785,7 @@ char *__print_device(struct ipr_dev *dev
 
 					len += 40-loc_len;
 				}
-				len += sprintf(body + len,"%-16s ",
+				len += sprintf(body + len,"%-19s ",
 				       scsi_dev_data->product_id);
 			}
 		else { 
@@ -12792,12 +12802,12 @@ char *__print_device(struct ipr_dev *dev
 
 				len += tab_stop;
 
-				for (i = 0; i < 26-tab_stop; i++)
+				for (i = 0; i < 29-tab_stop; i++)
 					body[len+i] = ' ';
 
-				len += 26-tab_stop;
+				len += 29-tab_stop;
 			} else 
-				len += sprintf(body + len,"%-8s %-16s ",
+				len += sprintf(body + len,"%-8s %-19s ",
 					       scsi_dev_data->vendor_id,
 					       scsi_dev_data->product_id);
 		}
@@ -12823,7 +12833,7 @@ char *__print_device(struct ipr_dev *dev
 				len += 29-loc_len;
 			}
 		}
-		len += sprintf(body + len, "%-8s %-16s ", " ", " ");
+		len += sprintf(body + len, "%-8s %-19s ", " ", " ");
 	} else {
 		if (serial_num) {
 			if (!res_path || !ioa->sis64) {
@@ -12882,11 +12892,11 @@ char *__print_device(struct ipr_dev *dev
 				}
 			}
 			if (hw_loc) {
-				len += sprintf(body + len, "%-16s ",
+				len += sprintf(body + len, "%-19s ",
 						product_id);
 			}
 			else {
-				len += sprintf(body + len, "%-8s %-16s ",
+				len += sprintf(body + len, "%-8s %-19s ",
 					       vendor_id, product_id);
 			}
 
@@ -12897,63 +12907,83 @@ char *__print_device(struct ipr_dev *dev
 				is4k = false;
 
 			if (ipr_is_hot_spare(dev)) {
-				if (dev->block_dev_class & IPR_SSD)
-					sprintf(buf, "%s%s", is4k ? "4K " : "", "SSD Hot Spare");
-				else
-					sprintf(buf, "%s%s", is4k ? "4K " : "", "Hot Spare");
-				len += sprintf(body + len, "%-25s ", buf);
+				if (dev->block_dev_class & IPR_SSD) {
+					if (dev->read_intensive & IPR_RI)
+						isri = true;
+					else
+						isri = false;
+					sprintf(buf, "%s%sSSD Hot Spare", is4k ? "4K " : "", isri ? "RI " : "");
+				} else
+					sprintf(buf, "%s Hot Spare", is4k ? "4K " : "");
+				len += sprintf(body + len, "%-28s ", buf);
 			} else if (ipr_is_volume_set(dev) || ipr_is_array(dev)) {
-				if (dev->block_dev_class & IPR_SSD)
-					sprintf(buf, "RAID %s %s SSD Disk Array",
+				if (dev->block_dev_class & IPR_SSD) {
+					if (dev->read_intensive & IPR_RI)
+						isri = true;
+					else
+						isri = false;
+					sprintf(buf, "RAID %s%s%s SSD Array",
 						get_prot_level_str(ioa->supported_arrays, dev->raid_level),
-						is4k ? "4K" : "");
-				else
-					sprintf(buf, "RAID %s %s Disk Array",
+						is4k ? " 4K" : "", isri ? " RI" : "");
+				} else
+					sprintf(buf, "RAID %s%s Array",
 						get_prot_level_str(ioa->supported_arrays, dev->raid_level),
 						is4k ? "4K" : "");
-				len += sprintf(body + len, "%-25s ", buf);
+				len += sprintf(body + len, "%-28s ", buf);
 			} else if (ipr_is_array_member(dev)) {
 				if (indent)
-					if (dev->block_dev_class & IPR_SSD)
-						sprintf(raid_str,"  RAID %s %s SSD Member",
-							dev->prot_level_str, is4k ? "4K" : "");
-					else
+					if (dev->block_dev_class & IPR_SSD) {
+						if (dev->read_intensive & IPR_RI)
+							isri = true;
+						else
+							isri = false;
+						sprintf(raid_str,"  RAID %s%s%s SSD Member",
+							dev->prot_level_str, is4k ? " 4K" : "", isri ? " RI" : "");
+					} else
 						sprintf(raid_str,"  RAID %s %s Array Member",
 							dev->prot_level_str, is4k ? "4K" : "");
 				else
-					if (dev->block_dev_class & IPR_SSD)
-						sprintf(raid_str,"RAID %s %sSSD Member",
-							dev->prot_level_str, is4k ? "4K" : "");
-					else
+					if (dev->block_dev_class & IPR_SSD) {
+						if (dev->read_intensive & IPR_RI)
+							isri = true;
+						else
+							isri = false;
+						sprintf(raid_str,"RAID %s%s SSD %s Member",
+							dev->prot_level_str, is4k ? " 4K" : "", isri ? " RI" : "");
+					} else
 						sprintf(raid_str,"RAID %s %s Array Member",
 							dev->prot_level_str, is4k ? "4K" : "");
 
-				len += sprintf(body + len, "%-25s ", raid_str);
+				len += sprintf(body + len, "%-28s ", raid_str);
 			} else if (ipr_is_af_dasd_device(dev))
-				if (dev->block_dev_class & IPR_SSD)
-					len += sprintf(body + len, "%-25s ", is4k ? "Advanced Function 4K SSD" :
-							"Advanced Function SSD");
-				else
-					len += sprintf(body + len, "%-25s ", is4k ? "Advanced Function 4K Disk" :
+				if (dev->block_dev_class & IPR_SSD) {
+					if (dev->read_intensive & IPR_RI)
+						len += sprintf(body + len, "%-28s ", is4k ? "Advanced Function 4K RI SSD" :
+								"Advanced Function RI SSD");
+					else
+						len += sprintf(body + len, "%-28s ", is4k ? "Advanced Function 4K SSD" :
+								"Advanced Function SSD");
+				} else
+					len += sprintf(body + len, "%-28s ", is4k ? "Advanced Function 4K Disk" :
 							"Advanced Function Disk");
 			else if (scsi_dev_data && scsi_dev_data->type == TYPE_ENCLOSURE) {
 				if (serial_num == 1)
 					len += sprintf(body + len, "%-13s ", (char *)&dev->serial_number);
 				else
-					len += sprintf(body + len, "%-25s ", "Enclosure");
+					len += sprintf(body + len, "%-28s ", "Enclosure");
 		
 			} else if (scsi_dev_data && scsi_dev_data->type == TYPE_PROCESSOR)
-				len += sprintf(body + len, "%-25s ", "Processor");
+				len += sprintf(body + len, "%-28s ", "Processor");
 			else if (scsi_dev_data && scsi_dev_data->type == TYPE_ROM)
-				len += sprintf(body + len, "%-25s ", "CD/DVD");
+				len += sprintf(body + len, "%-28s ", "CD/DVD");
 
 			else if (scsi_dev_data && scsi_dev_data->type == TYPE_TAPE)
-				len += sprintf(body + len, "%-25s ", "Tape");
+				len += sprintf(body + len, "%-28s ", "Tape");
 
 			else if (ioa->ioa_dead)
-				len += sprintf(body + len, "%-25s ", "Unavailable Device");
+				len += sprintf(body + len, "%-28s ", "Unavailable Device");
 			else {
-				len += sprintf(body + len, "%-25s ",
+				len += sprintf(body + len, "%-29s ",
 						is4k ? "Physical 4K Disk" : "Physical Disk");
 			}
 		}
@@ -17593,7 +17623,7 @@ static const struct {
 };
 
 /**
- * non_interactive_cmd - process a command line command
+ * non_intenactive_cmd - process a command line command
  * @cmd:		command string
  * @args:		argument vector
  * @num_args:		number of arguments
@@ -17601,7 +17631,7 @@ static const struct {
  * Returns:
  *   0 if success / non-zero on failure
  **/
-static int non_interactive_cmd(char *cmd, char **args, int num_args)
+static int non_intenactive_cmd(char *cmd, char **args, int num_args)
 {
 	int rc, i;
 
@@ -17669,7 +17699,7 @@ int main(int argc, char *argv[])
 {
 	int  next_editor, next_dir, next_cmd, next_args, i, rc = 0;
 	char parm_editor[200], parm_dir[200], cmd[200];
-	int non_interactive = 0;
+	int non_intenactive = 0;
 
 	strcpy(parm_dir, DEFAULT_LOG_DIR);
 	strcpy(parm_editor, DEFAULT_EDITOR);
@@ -17702,7 +17732,7 @@ int main(int argc, char *argv[])
 				next_dir = 0;
 			} else if (next_cmd) {
 				strcpy(cmd, argv[i]);
-				non_interactive = 1;
+				non_intenactive = 1;
 				next_cmd = 0;
 				next_args = 1;
 			} else if (next_args) {
@@ -17725,8 +17755,8 @@ int main(int argc, char *argv[])
 	exit_func = tool_exit_func;
 	tool_init(0);
 
-	if (non_interactive)
-		return non_interactive_cmd(cmd, add_args, num_add_args);
+	if (non_intenactive)
+		return non_intenactive_cmd(cmd, add_args, num_add_args);
 
 	use_curses = 1;
 	curses_init();
Index: b/iprutils/iprconfig.h
===================================================================
--- a/iprutils/iprconfig.h	2014-04-08 12:19:49.000000000 -0500
+++ b/iprutils/iprconfig.h	2014-08-25 10:30:23.379666781 -0500
@@ -1648,6 +1648,7 @@ const char *screen_status[] = {
 	/* 89 */ __("Incorrect device type specified. Please specify a valid disk enclosure to resume"),
 	/* 90 */ __("Selected disk enclosure is in Unknown state. Please check your hardware support"),
 	/* 91 */ __("Create disk array failed - can not mix 5XX and 4K disks."),
+	/* 92 */ __("Create disk array failed - can not build with read intensive disks only."),
 
       /* NOTE:  127 maximum limit */
 };
@@ -1746,6 +1747,7 @@ enum {
 	RC_89_Invalid_Dev_For_Resume,
 	RC_90_Enclosure_Is_Unknown,
 	RC_91_Mixed_Logical_Blk_Size,
+	RC_92_UNSUPT_REQ_BLK_DEV_CLASS,
 
 	/* NOTE:  127 maximum limit */
 };
Index: b/iprutils/iprlib.c
===================================================================
--- a/iprutils/iprlib.c	2014-08-17 13:09:33.000000000 -0500
+++ b/iprutils/iprlib.c	2014-08-25 10:30:23.409667166 -0500
@@ -6293,6 +6293,8 @@ void check_current_config(bool allow_reb
 				dev->array_id = dev->dev_rcd->type2.array_id;
 				dev->resource_handle = dev->dev_rcd->type2.resource_handle;
 				dev->block_dev_class = dev->dev_rcd->type2.block_dev_class;
+				if (dev->block_dev_class & IPR_SSD)
+					dev->read_intensive = dev->dev_rcd->type2.read_intensive;
 			} else if (dev->qac_entry->record_id == IPR_RECORD_ID_DEVICE_RECORD_3) {
 				dev->vendor_id = dev->dev_rcd->type3.vendor_id;
 				dev->product_id = dev->dev_rcd->type3.product_id;
@@ -6300,6 +6302,8 @@ void check_current_config(bool allow_reb
 				dev->array_id = dev->dev_rcd->type3.array_id;
 				dev->resource_handle = dev->dev_rcd->type3.resource_handle;
 				dev->block_dev_class = dev->dev_rcd->type3.block_dev_class;
+				if (dev->block_dev_class & IPR_SSD)
+					dev->read_intensive = dev->dev_rcd->type3.read_intensive;
 			} else if (dev->qac_entry->record_id == IPR_RECORD_ID_ARRAY_RECORD) {
 				dev->vendor_id = dev->array_rcd->type2.vendor_id;
 				dev->product_id = dev->array_rcd->type2.product_id;
@@ -6309,6 +6313,8 @@ void check_current_config(bool allow_reb
 				dev->stripe_size = dev->array_rcd->type2.stripe_size;
 				dev->resource_handle = dev->array_rcd->type2.resource_handle;
 				dev->block_dev_class = dev->array_rcd->type2.block_dev_class;
+				if (dev->block_dev_class & IPR_SSD)
+					dev->read_intensive = dev->dev_rcd->type2.read_intensive;
 			} else if (dev->qac_entry->record_id == IPR_RECORD_ID_VSET_RECORD_3) {
 				dev->vendor_id = dev->array_rcd->type3.vendor_id;
 				dev->product_id = dev->array_rcd->type3.product_id;
@@ -6318,6 +6324,8 @@ void check_current_config(bool allow_reb
 				dev->stripe_size = dev->array_rcd->type3.stripe_size;
 				dev->resource_handle = dev->array_rcd->type3.resource_handle;
 				dev->block_dev_class = dev->array_rcd->type3.block_dev_class;
+				if (dev->block_dev_class & IPR_SSD)
+					dev->read_intensive = dev->dev_rcd->type3.read_intensive;
 			} else if (dev->qac_entry->record_id == IPR_RECORD_ID_ARRAY_RECORD_3) {
 				dev->vendor_id = dev->array_rcd->type3.vendor_id;
 				dev->product_id = dev->array_rcd->type3.product_id;
@@ -6327,6 +6335,8 @@ void check_current_config(bool allow_reb
 				dev->stripe_size = dev->array_rcd->type3.stripe_size;
 				dev->resource_handle = dev->array_rcd->type3.resource_handle;
 				dev->block_dev_class = dev->array_rcd->type3.block_dev_class;
+				if (dev->block_dev_class & IPR_SSD)
+					dev->read_intensive = dev->dev_rcd->type3.read_intensive;
 			}
 		}
 		get_prot_levels(ioa);
Index: b/iprutils/iprlib.h
===================================================================
--- a/iprutils/iprlib.h	2014-04-08 12:19:49.000000000 -0500
+++ b/iprutils/iprlib.h	2014-08-25 10:30:23.459666948 -0500
@@ -226,6 +226,7 @@ typedef uint64_t u64;
 #define IPR_HDD                              0x0
 #define IPR_SSD                              0x1
 #define IPR_BLK_DEV_CLASS_4K                 0x4
+#define IPR_RI				     0x1
 
 #define IPR_ARRAY_VIRTUAL_BUS			0x1
 #define IPR_VSET_VIRTUAL_BUS			0x2
@@ -824,9 +825,13 @@ struct ipr_array_record {
 			u8  serial_number[8];
 #if defined (__BIG_ENDIAN_BITFIELD)
 			u8  block_dev_class:3;
-			u8  reserved5:5;
-#elif defined (__LITTLE_ENDIAN_BITFIELD)
-			u8  reserved5:5;
+			u8  reserved51:1;
+			u8  read_intensive:1;
+			u8  reserved5:3;
+#elif defined (__LITTLE_ENDIAN_BITFIELD)
+			u8  reserved5:3;
+			u8  read_intensive:1;
+			u8  reserved51:1;
 			u8  block_dev_class:3;
 #endif
 			u8  reserved6;
@@ -848,9 +853,13 @@ struct ipr_array_record {
 			u8  array_id;
 #if defined (__BIG_ENDIAN_BITFIELD)
 			u8  block_dev_class:3;
-			u8  reserved9:5;
-#elif defined (__LITTLE_ENDIAN_BITFIELD)
-			u8  reserved9:5;
+			u8  reserved91:1;
+			u8  read_intensive:1;
+			u8  reserved9:3;
+#elif defined (__LITTLE_ENDIAN_BITFIELD)
+			u8  reserved9:3;
+			u8  read_intensive:1;
+			u8  reserved91:1;
 			u8  block_dev_class:3;
 #endif
 			u32 resource_handle;
@@ -951,9 +960,13 @@ struct ipr_dev_record {
 
 #if defined (__BIG_ENDIAN_BITFIELD)
 			u8  block_dev_class:3;
-			u8  reserved5:5;
-#elif defined (__LITTLE_ENDIAN_BITFIELD)
-			u8  reserved5:5;
+			u8  reserved51:1;
+			u8  read_intensive:1;
+			u8  reserved5:3;
+#elif defined (__LITTLE_ENDIAN_BITFIELD)
+			u8  reserved5:3;
+			u8  read_intensive:1;
+			u8  reserved51:1;
 			u8  block_dev_class:3;
 #endif
 			u8  reserved6;
@@ -970,9 +983,13 @@ struct ipr_dev_record {
 
 #if defined (__BIG_ENDIAN_BITFIELD)
 			u8  block_dev_class:3;
-			u8  reserved8:5;
-#elif defined (__LITTLE_ENDIAN_BITFIELD)
-			u8  reserved8:5;
+			u8  reserved81:1;
+			u8  read_intensive:1;
+			u8  reserved8:3;
+#elif defined (__LITTLE_ENDIAN_BITFIELD)
+			u8  reserved8:3;
+			u8  read_intensive:1;
+			u8  reserved81:1;
 			u8  block_dev_class:3;
 #endif
 			u32 resource_handle;
@@ -1330,6 +1347,7 @@ struct ipr_dev {
 	u16 stripe_size;
 	u32 resource_handle;
 	u8  block_dev_class;
+	u8  read_intensive;
 	u32 is_reclaim_cand:1;
 	u32 should_init:1;
 	u32 init_not_allowed:1;
@@ -1709,6 +1727,7 @@ struct ipr_cmd_status_record {
 #define IPR_CMD_STATUS_INSUFF_DATA_MOVED     5
 #define IPR_CMD_STATUS_MIXED_BLK_DEV_CLASESS 6
 #define IPR_CMD_STATUS_MIXED_LOG_BLK_SIZE    7
+#define IPR_CMD_STATUS_UNSUPT_REQ_BLK_DEV_CLASS    8
 
 	u8 percent_complete;
 	struct ipr_res_addr failing_dev_res_addr;
