diff options
| -rw-r--r-- | drivers/infiniband/hw/cxgb4/device.c | 26 |
1 files changed, 1 insertions, 25 deletions
diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c index b25435736d44..22a290d0d5bf 100644 --- a/drivers/infiniband/hw/cxgb4/device.c +++ b/drivers/infiniband/hw/cxgb4/device.c | |||
| @@ -68,32 +68,8 @@ static ssize_t debugfs_read(struct file *file, char __user *buf, size_t count, | |||
| 68 | loff_t *ppos) | 68 | loff_t *ppos) |
| 69 | { | 69 | { |
| 70 | struct c4iw_debugfs_data *d = file->private_data; | 70 | struct c4iw_debugfs_data *d = file->private_data; |
| 71 | loff_t pos = *ppos; | ||
| 72 | loff_t avail = d->pos; | ||
| 73 | 71 | ||
| 74 | if (pos < 0) | 72 | return simple_read_from_buffer(buf, count, ppos, d->buf, d->pos); |
| 75 | return -EINVAL; | ||
| 76 | if (pos >= avail) | ||
| 77 | return 0; | ||
| 78 | if (count > avail - pos) | ||
| 79 | count = avail - pos; | ||
| 80 | |||
| 81 | while (count) { | ||
| 82 | size_t len = 0; | ||
| 83 | |||
| 84 | len = min((int)count, (int)d->pos - (int)pos); | ||
| 85 | if (copy_to_user(buf, d->buf + pos, len)) | ||
| 86 | return -EFAULT; | ||
| 87 | if (len == 0) | ||
| 88 | return -EINVAL; | ||
| 89 | |||
| 90 | buf += len; | ||
| 91 | pos += len; | ||
| 92 | count -= len; | ||
| 93 | } | ||
| 94 | count = pos - *ppos; | ||
| 95 | *ppos = pos; | ||
| 96 | return count; | ||
| 97 | } | 73 | } |
| 98 | 74 | ||
| 99 | static int dump_qp(int id, void *p, void *data) | 75 | static int dump_qp(int id, void *p, void *data) |
