Re: git: 1c2be25f6080 - main - Add extra EINVAL information about wrong block size to read(2)/write(2)

From: Hans Petter Selasky <hps_at_selasky.org>
Date: Sat, 08 Oct 2022 06:52:26 UTC
On 10/8/22 02:48, Konstantin Belousov wrote:
> On Fri, Oct 07, 2022 at 11:39:04AM +0000, Benedict Reuschling wrote:
>> The branch main has been updated by bcr (doc committer):
>>
>> URL: https://cgit.FreeBSD.org/src/commit/?id=1c2be25f6080ee63baeae55e45761e1310d1b756
>>
>> commit 1c2be25f6080ee63baeae55e45761e1310d1b756
>> Author:     Benedict Reuschling <bcr@FreeBSD.org>
>> AuthorDate: 2022-10-07 11:32:37 +0000
>> Commit:     Benedict Reuschling <bcr@FreeBSD.org>
>> CommitDate: 2022-10-07 11:32:37 +0000
>>
>>      Add extra EINVAL information about wrong block size to read(2)/write(2)
>>      
>>      The read system call will return EINVAL if the current file offset is
>>      not a multiple of the block size. This also applies to write(2). Add an
>>      entry for EINVAL about this error to both man pages.
>>      
>>      PR:                     91149
>>      Event:                  Aberdeen Hackathon 2022
>>      Differential Revision:  https://reviews.freebsd.org/D24617
>> ---
>>   lib/libc/sys/read.2  | 4 +++-
>>   lib/libc/sys/write.2 | 4 +++-
>>   2 files changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/lib/libc/sys/read.2 b/lib/libc/sys/read.2
>> index 8b58debd3fbb..28d085562af3 100644
>> --- a/lib/libc/sys/read.2
>> +++ b/lib/libc/sys/read.2
>> @@ -28,7 +28,7 @@
>>   .\"     @(#)read.2	8.4 (Berkeley) 2/26/94
>>   .\" $FreeBSD$
>>   .\"
>> -.Dd June 4, 2020
>> +.Dd October 7, 2022
>>   .Dt READ 2
>>   .Os
>>   .Sh NAME
>> @@ -250,6 +250,8 @@ The sum of the
>>   values in the
>>   .Fa iov
>>   array overflowed a 32-bit integer.
>> +.It Bq Er EINVAL
>> +The current file offset is not a multiple of the block size.
>>   .It Bq Er EFAULT
>>   Part of the
>>   .Fa iov
>> diff --git a/lib/libc/sys/write.2 b/lib/libc/sys/write.2
>> index 937e95b53a14..048338ed4dee 100644
>> --- a/lib/libc/sys/write.2
>> +++ b/lib/libc/sys/write.2
>> @@ -28,7 +28,7 @@
>>   .\"     @(#)write.2	8.5 (Berkeley) 4/2/94
>>   .\" $FreeBSD$
>>   .\"
>> -.Dd February 11, 2021
>> +.Dd October 7, 2022
>>   .Dt WRITE 2
>>   .Os
>>   .Sh NAME
>> @@ -205,6 +205,8 @@ is greater than
>>   if the sysctl
>>   .Va debug.iosize_max_clamp
>>   is non-zero).
>> +.It Bq Er EINVAL
>> +The current file offset is not a multiple of the block size.
> This is bogus.  It does not.  You can perfectly write at arbitrary regular
> file offset.
> 

If you have a 4K block size character device, geom doesn't support 
writing / reading 515 byte blocks .... The description is maybe not 
applicable for all EINVAL's returned.

--HPS