Tested this code against create_tree and insert_node commands. Insert_node sends one request, gets one reply and terminates, as expected.
create_tree does the same, PROVIDED a single page is added to the bio before being issued. If no pages are added, infinite frames are created from the bio. It is as if it reads from random memory or something.
added a single page to the create_tree read bio. Apparently this is required to prevent infinite frames being created to satisfy the request.
added 32bit errcode onto hdr
first attempt at interpreting and acting on TREE CMD response packets
interface changes, notably insert_node only creates and inserts a node into the tree, it does not write data, too
Can now send and act on each of the TREE commands.

NOTE:
  * have not tested writes/reads which span more than a single ethernet frame
  * some test code in aoecmd.c=>ktiocomplete_tree for READNODE copies data in and prints it out assuming its a char* string -- remove this
changed blinktree allocation to use a kmem_cache to conserve some memory and reduce the number of allocations at the same time
begun work on IO component in earnest, wrapping the tree cmd's. Initial implementation of create_tree (sync)
progress with io code. update_node may actually split big updates up into chunks which can fit within a bio. Still need to modify __alloc_bio such that the number of preallocated vectors can be specified
further changes to io code, now requests which may span multiple bio's are wrapped such that a function is only called once all bio's are completed.
Also realised read/update node code shared essentially everything aside from which command to set and whether it's classified as READ or WRITE - hence
cfsio_read_node and cfsio_update_node call cfsio_data_request.
TERR's use a flag setup, so AOECMD now OR's the err message of each ethernet fragment into the request fragment's tree_iface_data.err field
improved the clean rule such that no temporary files are left after a clean
removed repeated definitions of AOE_CMD and tree_iface_data and moved it into global include/linux/tree.h -- revamped io part of clydefs to, for now, accept a block device argument determining which device the tree commands will
be issued against.
made necessary changes to integrate embunit test suite into clydefs and wrote an initial set of tests exercising the io module's create_tree,remove_tree and insert_node commands
enabled debugging mode which should result in pr_debug() statements being printed to dmesg
minor err-code fixes and a deadlock fix from returning a value in a function before releasing the lock...
updated tree interface documentation to reflect new TERR codes rather than -ENOMEM/-ENOENT etc
various fixes for errors found when implementing and executing unit tests. Particularly BUG()'ing out when an error message should be returned