On 10/26/2015 08:14 AM, Gabriel Krisman Bertazi wrote:
> Add new field in show-details to report Sync Write Cache support for a
> given IOA.  This will only be displayed when passing an IOA to command
> 'show-details'.
> 
> This field tells if the adapter has support to sync cache
> enabled/implemented.  It does not mean that sync cache is enabled
> for a specific device.  It has three states: Unsupported - in
> case adapter doesn't support it; Enabled - if Sync Cache is
> supported and is globally enabled for this adapter; Disabled - in case
> it is supported but was disabled for the whole adapter.
> 
> The information is recovered from the device using the Query Cache
> Parameters command.  It can return a new value now, indicating if Volume
> Set Caching Mode Page is enabled.
> 
> Signed-off-by: Gabriel Krisman Bertazi <kris...@linux.vnet.ibm.com>
> ---
>  iprconfig.c | 27 +++++++++++++++++++++++++++
>  iprlib.c    |  8 +++++++-
>  iprlib.h    | 13 ++++++++++---
>  3 files changed, 44 insertions(+), 4 deletions(-)
> 
> diff --git a/iprconfig.c b/iprconfig.c
> index 2ee1e5a..e591655 100644
> --- a/iprconfig.c
> +++ b/iprconfig.c
> @@ -2046,6 +2046,7 @@ static char *ioa_details(char *body, struct ipr_dev 
> *dev)
>       struct ipr_inquiry_page0 page0_inq;
>       struct scsi_dev_data *scsi_dev_data = dev->scsi_dev_data;
>       struct ipr_dual_ioa_entry *ioa_entry;
> +     struct ipr_reclaim_query_data *reclaim_data = dev->ioa->reclaim_data;

I don't think there should be any cases where this is not NULL. Suggest we just 
declare
the reclaim buffer here on the stack....

>       int rc, i;
>       char buffer[200];
>       int cache_size, dram_size;
> @@ -2166,6 +2167,32 @@ static char *ioa_details(char *body, struct ipr_dev 
> *dev)
>                       body = add_line_to_body(body,_("Current Requested 
> Caching Mode"), _("Default"));
>       }
> 
> +     if (dev->ioa->has_cache) {
> +             if (dev->ioa->vset_write_cache) {
> +                     strcpy(buffer, "Synchronize Cache");
> +             } else {
> +                     if (!reclaim_data) {
> +                             reclaim_data =
> +                                     calloc(1, sizeof(struct 
> ipr_reclaim_query_data));
> +                             rc = ipr_reclaim_cache_store(dev->ioa,
> +                                                          IPR_RECLAIM_QUERY,
> +                                                          reclaim_data);
> +                             if (rc) {
> +                                     free(reclaim_data);
> +                                     goto out;
> +                             }
> +                             dev->ioa->reclaim_data = reclaim_data;

... and then drop this line as well.

> +                     }
> +
> +                     if(reclaim_data->rechargeable_battery_type)
> +                             strcpy(buffer, "Battery Backed");
> +                     else
> +                             strcpy(buffer, "Supercap Protected");
> +             }
> +             body = add_line_to_body(body, _("Cache Protection"), buffer);
> +     }
> +
> +     out:
>       return body;
>  }
> 

-- 
Brian King
Power Linux I/O
IBM Linux Technology Center


------------------------------------------------------------------------------
_______________________________________________
Iprdd-devel mailing list
Iprdd-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iprdd-devel

Reply via email to