iprutils: Enable write cache policy for JBODs
If there is no saved write cache policy for a JBOD, we would like the write cache policy to default to write back for the best performance. To do this, we do two things: 1. Remove the write_cache_policy field in the ipr_dev struct. 2. Enhance ipr_modify_dev_attr to set write_cache_policy to the default value of write back if there is no saved write cache policy. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Reviewed-by: Guilherme G. Piccoli <gpiccoli@linux.vnet.ibm.com>
This commit is contained in:
parent
053ce15504
commit
e72dee8ef3
2 changed files with 18 additions and 17 deletions
34
iprlib.c
34
iprlib.c
|
|
@ -3593,6 +3593,7 @@ static int ipr_set_dev_wcache_policy (const struct ipr_dev *dev, int policy)
|
|||
char *cache_type;
|
||||
char current_type[100];
|
||||
|
||||
memset(current_type, 0, sizeof(current_type));
|
||||
sprintf(path, "/sys/class/scsi_disk/%s",
|
||||
dev->scsi_dev_data->sysfs_device_name);
|
||||
|
||||
|
|
@ -6646,15 +6647,6 @@ void check_current_config(bool allow_rebuild_refresh)
|
|||
strcpy(ioa->dev[device_count].gen_name,
|
||||
scsi_dev_data->gen_name);
|
||||
|
||||
if (scsi_dev_data->type == TYPE_DISK) {
|
||||
if (ipr_dev_wcache_policy(&(ioa->dev[device_count])) == IPR_DEV_CACHE_WRITE_BACK)
|
||||
ioa->dev[device_count].write_cache_policy =
|
||||
IPR_DEV_CACHE_WRITE_BACK;
|
||||
else
|
||||
ioa->dev[device_count].write_cache_policy =
|
||||
IPR_DEV_CACHE_WRITE_THROUGH;
|
||||
}
|
||||
|
||||
/* find array config data matching resource entry */
|
||||
k = 0;
|
||||
for_each_qac_entry(common_record, qac_data) {
|
||||
|
|
@ -7487,7 +7479,13 @@ int ipr_get_dev_attr(struct ipr_dev *dev, struct ipr_disk_attr *attr)
|
|||
attr->tcq_enabled = is_tagged(dev);
|
||||
|
||||
attr->format_timeout = get_format_timeout(dev);
|
||||
attr->write_cache_policy = dev->write_cache_policy;
|
||||
|
||||
if (ipr_is_gscsi(dev) || ipr_is_volume_set(dev)) {
|
||||
if (ipr_dev_wcache_policy(dev) == IPR_DEV_CACHE_WRITE_BACK)
|
||||
attr->write_cache_policy = IPR_DEV_CACHE_WRITE_BACK;
|
||||
else
|
||||
attr->write_cache_policy = IPR_DEV_CACHE_WRITE_THROUGH;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -7655,6 +7653,8 @@ int ipr_modify_dev_attr(struct ipr_dev *dev, struct ipr_disk_attr *attr)
|
|||
rc = ipr_get_saved_dev_attr(dev, IPR_WRITE_CACHE_POLICY, temp);
|
||||
if (rc == RC_SUCCESS)
|
||||
sscanf(temp, "%d", &attr->write_cache_policy);
|
||||
else
|
||||
attr->write_cache_policy = IPR_DEV_CACHE_WRITE_BACK;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -7738,12 +7738,14 @@ int ipr_set_dev_attr(struct ipr_dev *dev, struct ipr_disk_attr *attr, int save)
|
|||
}
|
||||
}
|
||||
|
||||
if (attr->write_cache_policy != old_attr.write_cache_policy
|
||||
|| !attr->write_cache_policy) {
|
||||
ipr_set_dev_wcache_policy(dev, attr->write_cache_policy);
|
||||
if (save) {
|
||||
sprintf(temp, "%d", attr->write_cache_policy);
|
||||
ipr_save_dev_attr(dev, IPR_WRITE_CACHE_POLICY, temp, 1);
|
||||
if (ipr_is_gscsi(dev) || ipr_is_volume_set(dev)) {
|
||||
if (attr->write_cache_policy != old_attr.write_cache_policy
|
||||
|| !attr->write_cache_policy) {
|
||||
ipr_set_dev_wcache_policy(dev, attr->write_cache_policy);
|
||||
if (save) {
|
||||
sprintf(temp, "%d", attr->write_cache_policy);
|
||||
ipr_save_dev_attr(dev, IPR_WRITE_CACHE_POLICY, temp, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
1
iprlib.h
1
iprlib.h
|
|
@ -1483,7 +1483,6 @@ struct ipr_dev {
|
|||
u8 active_suspend;
|
||||
u32 is_suspend_cand:1;
|
||||
u32 is_resume_cand:1;
|
||||
u8 write_cache_policy:1;
|
||||
u8 supports_4k:1;
|
||||
u8 supports_5xx:1;
|
||||
u8 read_c7:1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue