Re: [PATCH v2 3/5] lib/pattern: Support short repeated read calls when loading from file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.



[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux