qio: Don't make extra empty EBDs
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 9 Nov 2017 17:22:40 +0000 (12:22 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Nov 2017 15:46:56 +0000 (10:46 -0500)
commit76778e8f18094796fd45cb04e615c4547670ef79
tree10f39b8a988aae9d2fd7a97162283e96674a431d
parentdc1b7baf72f7c733ff30747c80e40dee5afd3beb
qio: Don't make extra empty EBDs

We overestimated the number of extra data blocks in a couple of ways, and
this was triggering issues with SG in the NICs.

First, we were counting (and pointing to) the headers of blocks even when
the headers were empty.  Excessive work, no gain, extra ebds.

We were also counting the entire blist, even if we were only extracting a
small amount of data.  I had a few blocks that had 80 ebds, but only one
valid block.

We continue to assume that EBDs are all valid, and thus it is still an
overestimate.  It's not a bad one though, since I think the only time we
have empty EBDs are a result of pullups or other one-off operations.  Not
sure though.

It might be worth tracking the number of valid EBDs (base && len), but it
might be tricky.  Note that we have some EBDs with no len but with a
refcounted base.  So you'd have to be careful how you count 'valid.'

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/ns/qio.c