Re: [Intel-gfx] [igt-dev] [PATCH i-g-t 6/8] lib/igt_sysfs: Support large files

Matthew Brost
2021-10-29T02:51:04Z

On Thu, Oct 21, 2021 at 04:40:42PM -0700, John.C.Harrison@Intel.com wrote:
> From: John Harrison <John.C.Harrison@Intel.com>
>
> The syfs helper functions were all using basic 'int' data types for
> sizs, offsets, etc. when reading from sysfs. This works fine for
> little files, but not for large error capture logs (which can be
> gigabytes in sizes).
>
> Signed-off-by: John Harrison <John.C.Harrison@Intel.com>

Reviewed-by: Matthew Brost <matthew.brost@intel.com>

> ---
> lib/igt_sysfs.c | 17 +++++++++++------
> 1 file changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/lib/igt_sysfs.c b/lib/igt_sysfs.c
> index 6919ac361..ee75e3ef1 100644
> --- a/lib/igt_sysfs.c
> +++ b/lib/igt_sysfs.c
> @@ -53,9 +53,11 @@
> * provides basic support for like igt_sysfs_open().
> */
>
> -static int readN(int fd, char *buf, int len)
> +static ssize_t readN(int fd, char *buf, size_t len)
> {
> - int ret, total = 0;
> + ssize_t ret;
> + size_t total = 0;
> +
> do {
> ret = read(fd, buf + total, len - total);
> if (ret < 0)
> @@ -69,9 +71,11 @@ static int readN(int fd, char *buf, int len)
> return total ?: ret;
> }
>
> -static int writeN(int fd, const char *buf, int len)
> +static ssize_t writeN(int fd, const char *buf, size_t len)
> {
> - int ret, total = 0;
> + ssize_t ret;
> + size_t total = 0;
> +
> do {
> ret = write(fd, buf + total, len - total);
> if (ret < 0)
> @@ -218,8 +222,9 @@ bool igt_sysfs_set(int dir, const char *attr, const char *value)
> char *igt_sysfs_get(int dir, const char *attr)
> {
> char *buf;
> - int len, offset, rem;
> - int ret, fd;
> + size_t len, offset, rem;
> + ssize_t ret;
> + int fd;
>
> fd = openat(dir, attr, O_RDONLY);
> if (igt_debug_on(fd < 0))
> --
> 2.25.1
>