On Sun, Jun 6, 2021 at 3:05 PM Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > So I think iov_iter_init() would actually be better off just being > > *i = (struct iov_iter) { > .iter_type = uaccess_kernel() ? ITER_KVEC : ITER_IOVEC, > .data_source = direction, > .iov = iov, > .nr_segs = nr_segs, > .iov_offset = 0, > .count = count > }; > > with possibly a big comment about that ".opv = iov" thing being a > union member assignment, and being either a iovec or a kvec. I don't know what kind of mini-stroke I had, but ".opv" is obviously supposed to be ".iov". Fingers just off by a small amount. And yes, I realize that 'uaccess_kernel()' is hopefully always false on any architectures we care about and so the compiler would just pick one at compile time rather than actually having both those initializers. But I think that "the uaccess_kernel() KVEC case is legacy for architectures that haven't converted to the new world order yet" thing is just even more of an argument for not duplicating and writing the code out in full on a source level (and making that normal case be ".iov = iov"). Linus