blkback: advertise indirect descriptors

We use the same default as Linux i.e. maximum of 256 segments per
request (256 segments = 256 pages = 1MiB)

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
Add parser for x86-64 indirect descriptor operation

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
Complete the set of x86-64, x86-32, indirect parsers and printers

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
blkback: implement indirect descriptors

If any requests are using indirect descriptors then we make 2 passes
over the requests: (1) we map the indirect grefs to allow us to transform
the indirect operations into direct ones; (2) we map the payload
grefs to perofrm the I/O.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
indirect: when reading the operation type, read the 'indirect_op' field

Otherwise we confuse blkback which doesn't know whether it's a read
or a write.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
blkback: when an error happens, be explicit about it

We need a proper error-handling strategy (something like: log the
problem somewhere, fail all outstanding requests and shutdown)

In the meantime, we'll try extra-hard to highlight the problem
for debugging by printing to the console.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
blkback: on shutdown report if we missed any requests

If we lost an event it may manifest as a request on the ring we
didn't see. We can check for this just before we unmap.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
blkback: allow the maximum number of indirect segments to be configured

In particular '0' means 'off'.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
blkback: record segments_per_request (lost during indirect descriptors add)

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
update CHANGES

Signed-off-by: David Scott <dave.scott@eu.citrix.com>