Konrad Rzeszutek Wilk c31ecf6c12 xen/blkfront: Fix crash if backend doesn't follow the right states.
We have split the setting up of all the resources in two steps:
1) talk_to_blkback  - which figures out the num_ring_pages (from
   the default value of zero), sets up shadow and so
2) blkfront_connect - does the real part of filling out the
   internal structures.

The problem is if we bypass the 1) step and go straight to 2)
and call blkfront_setup_indirect where we use the macro
BLK_RING_SIZE - which returns an negative value (because
sz is zero  - since num_ring_pages is zero - since it has never
been set).

We can fix this by making sure that we always have called
talk_to_blkback before going to blkfront_connect.

Or we could set in blkfront_probe info->nr_ring_pages = 1
to have a default value. But that looks odd - as we haven't
actually negotiated any ring size.

This patch changes XenbusStateConnected state to detect if
we haven't done the initial handshake - and if so continue
on as if were in XenbusStateInitWait state.

We also roll the error recovery (freeing the structure) into
talk_to_blkback error path - which is safe since that function
is only called from blkback_changed.

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
2016-01-04 12:21:26 -05:00
..
2015-11-13 20:35:54 -08:00
2015-11-20 01:22:33 +01:00
2015-11-10 15:00:03 -08:00
2015-11-12 15:26:39 -08:00
2015-11-06 14:22:15 -08:00
2015-11-11 10:21:34 -08:00
2015-11-10 15:00:03 -08:00
2015-11-06 14:22:15 -08:00
2015-11-13 20:35:54 -08:00
2015-11-05 13:15:12 -08:00
2015-10-29 09:02:16 +09:00
2015-11-10 15:00:03 -08:00
2015-11-12 07:06:18 -05:00
2015-11-06 14:22:15 -08:00
2015-11-08 16:24:43 -05:00
2015-11-10 16:32:11 -08:00
2015-11-04 14:47:13 -08:00
2015-11-13 21:53:18 -08:00
2015-11-06 10:23:50 -08:00
2015-11-11 09:16:10 -08:00
2015-11-05 13:15:12 -08:00
2015-11-10 10:01:21 -08:00
2015-11-13 20:35:54 -08:00
2015-11-10 15:00:03 -08:00
2015-11-04 22:15:15 -08:00
2015-11-13 20:35:54 -08:00
2015-11-20 16:19:54 -08:00
2015-11-04 21:50:37 -08:00
2015-11-13 17:05:32 -08:00
2015-11-10 10:00:09 -08:00
2015-11-04 22:15:15 -08:00
2015-11-04 22:15:15 -08:00