|
@@ -20,18 +20,12 @@ qla2x00_sysfs_read_fw_dump(struct kobject *kobj,
|
|
|
{
|
|
|
struct scsi_qla_host *ha = shost_priv(dev_to_shost(container_of(kobj,
|
|
|
struct device, kobj)));
|
|
|
- char *rbuf = (char *)ha->fw_dump;
|
|
|
|
|
|
if (ha->fw_dump_reading == 0)
|
|
|
return 0;
|
|
|
- if (off > ha->fw_dump_len)
|
|
|
- return 0;
|
|
|
- if (off + count > ha->fw_dump_len)
|
|
|
- count = ha->fw_dump_len - off;
|
|
|
|
|
|
- memcpy(buf, &rbuf[off], count);
|
|
|
-
|
|
|
- return (count);
|
|
|
+ return memory_read_from_buffer(buf, count, &off, ha->fw_dump,
|
|
|
+ ha->fw_dump_len);
|
|
|
}
|
|
|
|
|
|
static ssize_t
|
|
@@ -94,20 +88,13 @@ qla2x00_sysfs_read_nvram(struct kobject *kobj,
|
|
|
{
|
|
|
struct scsi_qla_host *ha = shost_priv(dev_to_shost(container_of(kobj,
|
|
|
struct device, kobj)));
|
|
|
- int size = ha->nvram_size;
|
|
|
- char *nvram_cache = ha->nvram;
|
|
|
|
|
|
- if (!capable(CAP_SYS_ADMIN) || off > size || count == 0)
|
|
|
+ if (!capable(CAP_SYS_ADMIN))
|
|
|
return 0;
|
|
|
- if (off + count > size) {
|
|
|
- size -= off;
|
|
|
- count = size;
|
|
|
- }
|
|
|
|
|
|
/* Read NVRAM data from cache. */
|
|
|
- memcpy(buf, &nvram_cache[off], count);
|
|
|
-
|
|
|
- return count;
|
|
|
+ return memory_read_from_buffer(buf, count, &off, ha->nvram,
|
|
|
+ ha->nvram_size);
|
|
|
}
|
|
|
|
|
|
static ssize_t
|
|
@@ -175,14 +162,9 @@ qla2x00_sysfs_read_optrom(struct kobject *kobj,
|
|
|
|
|
|
if (ha->optrom_state != QLA_SREADING)
|
|
|
return 0;
|
|
|
- if (off > ha->optrom_region_size)
|
|
|
- return 0;
|
|
|
- if (off + count > ha->optrom_region_size)
|
|
|
- count = ha->optrom_region_size - off;
|
|
|
|
|
|
- memcpy(buf, &ha->optrom_buffer[off], count);
|
|
|
-
|
|
|
- return count;
|
|
|
+ return memory_read_from_buffer(buf, count, &off, ha->optrom_buffer,
|
|
|
+ ha->optrom_region_size);
|
|
|
}
|
|
|
|
|
|
static ssize_t
|
|
@@ -374,20 +356,12 @@ qla2x00_sysfs_read_vpd(struct kobject *kobj,
|
|
|
{
|
|
|
struct scsi_qla_host *ha = shost_priv(dev_to_shost(container_of(kobj,
|
|
|
struct device, kobj)));
|
|
|
- int size = ha->vpd_size;
|
|
|
- char *vpd_cache = ha->vpd;
|
|
|
|
|
|
- if (!capable(CAP_SYS_ADMIN) || off > size || count == 0)
|
|
|
+ if (!capable(CAP_SYS_ADMIN))
|
|
|
return 0;
|
|
|
- if (off + count > size) {
|
|
|
- size -= off;
|
|
|
- count = size;
|
|
|
- }
|
|
|
|
|
|
/* Read NVRAM data from cache. */
|
|
|
- memcpy(buf, &vpd_cache[off], count);
|
|
|
-
|
|
|
- return count;
|
|
|
+ return memory_read_from_buffer(buf, count, &off, ha->vpd, ha->vpd_size);
|
|
|
}
|
|
|
|
|
|
static ssize_t
|