|
@@ -2456,20 +2456,14 @@ static ssize_t ipr_read_trace(struct kobject *kobj,
|
|
|
struct Scsi_Host *shost = class_to_shost(dev);
|
|
|
struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
|
|
|
unsigned long lock_flags = 0;
|
|
|
- int size = IPR_TRACE_SIZE;
|
|
|
- char *src = (char *)ioa_cfg->trace;
|
|
|
-
|
|
|
- if (off > size)
|
|
|
- return 0;
|
|
|
- if (off + count > size) {
|
|
|
- size -= off;
|
|
|
- count = size;
|
|
|
- }
|
|
|
+ ssize_t ret;
|
|
|
|
|
|
spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
|
|
|
- memcpy(buf, &src[off], count);
|
|
|
+ ret = memory_read_from_buffer(buf, count, &off, ioa_cfg->trace,
|
|
|
+ IPR_TRACE_SIZE);
|
|
|
spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
|
|
|
- return count;
|
|
|
+
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static struct bin_attribute ipr_trace_attr = {
|