Re: [PATCH v2 2/7] bvec/iter: disallow zero-length segment bvecs

2021-01-04 Thread Pavel Begunkov
On 04/01/2021 16:37, Matthew Wilcox wrote:
> On Sat, Jan 02, 2021 at 03:17:34PM +, Pavel Begunkov wrote:
>> --- a/Documentation/filesystems/porting.rst
>> +++ b/Documentation/filesystems/porting.rst
>> @@ -865,3 +865,10 @@ no matter what.  Everything is handled by the caller.
>>  
>>  clone_private_mount() returns a longterm mount now, so the proper 
>> destructor of
>>  its result is kern_unmount() or kern_unmount_array().
>> +
>> +---
>> +
>> +**mandatory**
>> +
>> +zero-length bvec segments are disallowed, they must be filtered out before
>> +passed on to an iterator.
> 
> Why are you putting this in filesystems/porting?  Filesystems don't usually

At least splice and a dozen of others do. As block apriori doesn't have them,
it's mainly addressed to fs + net. 

> generate bvecs ... there's nothing in this current series that stops them.

Yes, just mixing it with splice changes, which did all the work, looks
awkward to me. Would you suggest another segregation for the patches?

> I'd suggest Documentation/block/biovecs.rst or biodoc.rst (and frankly,
> biodoc.rst needs a good cleanup)

I'll add a note to biovecs.rst

-- 
Pavel Begunkov


Re: [PATCH v2 2/7] bvec/iter: disallow zero-length segment bvecs

2021-01-04 Thread Matthew Wilcox
On Sat, Jan 02, 2021 at 03:17:34PM +, Pavel Begunkov wrote:
> --- a/Documentation/filesystems/porting.rst
> +++ b/Documentation/filesystems/porting.rst
> @@ -865,3 +865,10 @@ no matter what.  Everything is handled by the caller.
>  
>  clone_private_mount() returns a longterm mount now, so the proper destructor 
> of
>  its result is kern_unmount() or kern_unmount_array().
> +
> +---
> +
> +**mandatory**
> +
> +zero-length bvec segments are disallowed, they must be filtered out before
> +passed on to an iterator.

Why are you putting this in filesystems/porting?  Filesystems don't usually
generate bvecs ... there's nothing in this current series that stops them.
I'd suggest Documentation/block/biovecs.rst or biodoc.rst (and frankly,
biodoc.rst needs a good cleanup)


Re: [PATCH v2 2/7] bvec/iter: disallow zero-length segment bvecs

2021-01-04 Thread Christoph Hellwig
On Sat, Jan 02, 2021 at 03:17:34PM +, Pavel Begunkov wrote:
> zero-length bvec segments are allowed in general, but not handled by bio
> and down the block layer so filtered out. This inconsistency may be
> confusing and prevent from optimisations. As zero-length segments are
> useless and places that were generating them are patched, declare them
> not allowed.

Looks good,

Reviewed-by: Christoph Hellwig 


[PATCH v2 2/7] bvec/iter: disallow zero-length segment bvecs

2021-01-02 Thread Pavel Begunkov
zero-length bvec segments are allowed in general, but not handled by bio
and down the block layer so filtered out. This inconsistency may be
confusing and prevent from optimisations. As zero-length segments are
useless and places that were generating them are patched, declare them
not allowed.

Signed-off-by: Pavel Begunkov 
---
 Documentation/filesystems/porting.rst | 7 +++
 lib/iov_iter.c| 2 --
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/Documentation/filesystems/porting.rst 
b/Documentation/filesystems/porting.rst
index 867036aa90b8..c722d94f29ea 100644
--- a/Documentation/filesystems/porting.rst
+++ b/Documentation/filesystems/porting.rst
@@ -865,3 +865,10 @@ no matter what.  Everything is handled by the caller.
 
 clone_private_mount() returns a longterm mount now, so the proper destructor of
 its result is kern_unmount() or kern_unmount_array().
+
+---
+
+**mandatory**
+
+zero-length bvec segments are disallowed, they must be filtered out before
+passed on to an iterator.
diff --git a/lib/iov_iter.c b/lib/iov_iter.c
index 1635111c5bd2..7de304269641 100644
--- a/lib/iov_iter.c
+++ b/lib/iov_iter.c
@@ -72,8 +72,6 @@
__start.bi_bvec_done = skip;\
__start.bi_idx = 0; \
for_each_bvec(__v, i->bvec, __bi, __start) {\
-   if (!__v.bv_len)\
-   continue;   \
(void)(STEP);   \
}   \
 }
-- 
2.24.0