On 19/11/2020 17:03, Christoph Hellwig wrote: > On Thu, Nov 19, 2020 at 03:29:43PM +0000, Pavel Begunkov wrote: >> The problem here is that iov_iter_is_*() helpers check types for >> equality, but all iterate_* helpers do bitwise ands. This confuses >> a compiler, so even if some cases were handled separately with >> iov_iter_is_*(), it can't eliminate and skip unreachable branches in >> following iterate*(). > > I think we need to kill the iov_iter_is_* helpers, renumber to not do > the pointless bitmask and just check for equality (might turn into a > bunch of nice switch statements actually). There are uses like below though, and that would also add some overhead on iov_iter_type(), so it's not apparent to me which version would be cleaner/faster in the end. But yeah, we can experiment after landing this patch. if (type & (ITER_BVEC|ITER_KVEC)) -- Pavel Begunkov