qio: Fix copyblock()
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 21 Sep 2016 18:48:36 +0000 (14:48 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 21 Sep 2016 21:27:46 +0000 (17:27 -0400)
commit80ff120277401f0ee621d6aa45e3ffeab3e8f1d2
tree7676627151798938ed0716ebc84c71d8ce696f11
parent18d20e9b5838941b2ea2a07331cf98086c45873c
qio: Fix copyblock()

Previously, copyblock() couldn't handle extra data.

The only caller was passing the full block length, so let's just always do
the full amount.  At this point, it's basically the same as
linearizeblock(), minus the block swapping.  So we can implement
linearizeblock() with copyblock().

Note that Qsnoop uses copyblock(), making a copy of the block to pass up
to a snooping process (e.g. snoopy).  I considered making something like
qclone, where we clone the block instead - using pointers to the original
block's memory.  This would probably work with our current setup, but if we
ever use user memory for the block extra data segments, then we'd have a
problem.  The issue is one of immutability of data, and if we are using
user memory, then we have no guarantee of immutability (unless it's
read-only or something).  For now, we can just make a copy.

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