]> www.infradead.org Git - users/jedix/linux-maple.git/commit
drivers: xen-blkfront: only talk_to_blkback() when in XenbusStateInitialising
authorBob Liu <bob.liu@oracle.com>
Fri, 19 Jun 2015 04:23:00 +0000 (00:23 -0400)
committerElena Ufimtseva <elena.ufimtseva@oracle.com>
Wed, 12 Aug 2015 09:57:45 +0000 (05:57 -0400)
commit6d4985eea90ba1b0e128d36bb723dbade11bc04f
tree9531372c468e7c78264214af20d571562b88aef5
parent530e47acdc9e528aea31a57578571d73812d1ea5
drivers: xen-blkfront: only talk_to_blkback() when in XenbusStateInitialising

Patch 69b91ede5cab843dcf345c28bd1f4b5a99dacd9b
"drivers: xen-blkback: delay pending_req allocation to connect_ring"
exposed an problem that Xen blkfront has. There is a race
with XenStored and the drivers such that we can see two:

vbd vbd-268440320: blkfront:blkback_changed to state 2.
vbd vbd-268440320: blkfront:blkback_changed to state 2.
vbd vbd-268440320: blkfront:blkback_changed to state 4.

state changes to XenbusStateInitWait ('2'). The end result is that
blkback_changed() receives two notify and calls twice setup_blkring().

While the backend driver may only get the first setup_blkring() which is
wrong and reads out-dated (or reads them as they are being updated
with new ring-ref values).

The end result is that the ring ends up being incorrectly set.

The other drivers in the tree have such checks already in.

Reported-and-Tested-by: Robert Butera <robert.butera@oracle.com>
Signed-off-by: Bob Liu <bob.liu@oracle.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
(cherry picked from commit a9b54bb95176cd27f952cd9647849022c4c998d6)
Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
drivers/block/xen-blkfront.c