On 11/17/22 17:05, Logan Gunthorpe wrote:
> Once a pattern file can be much larger, it will be possible that
> kernel will return a short read while loading the file and thus may
> randomly only load part of the file.
>
> Fix this by putting the read in a loop so the entire file will be
> read.
> ---
> lib/pattern.c | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/lib/pattern.c b/lib/pattern.c
> index 70d0313d237e..d324263c2b34 100644
> --- a/lib/pattern.c
> +++ b/lib/pattern.c
> @@ -32,7 +32,7 @@ static const char *parse_file(const char *beg, char
*out,
> const char *end;
> char *file;
> int fd;
> - ssize_t count;
> + ssize_t rc, count = 0;
>
> if (!out_len)
> goto err_out;
> @@ -52,9 +52,16 @@ static const char *parse_file(const char *beg,
char *out,
> goto err_free_out;
>
> if (out) {
> - count = read(fd, out, out_len);
> - if (count == -1)
> - goto err_free_close_out;
> + while (1) {
> + rc = read(fd, out, out_len - count);
> + if (rc == 0)
> + break;
> + if (rc == -1)
> + goto err_free_close_out;
> +
> + count += rc;
> + out += rc;
> + }
> } else {
> count = lseek(fd, 0, SEEK_END);
> if (count == -1)
Please add your sign-off to the commit message.