AHCI: Fix port reset race
commitc9b308d20b642c106048f088ccc31f2aa7cf59ba
authorAlexander Graf <agraf@suse.de>
Mon, 30 Jan 2012 22:29:47 +0000 (30 23:29 +0100)
committerKevin Wolf <kwolf@redhat.com>
Thu, 9 Feb 2012 15:17:51 +0000 (9 16:17 +0100)
tree16185fd57de00dd04d669d0e2c4bdb2db3e4409d
parentea8f978ffef325ab2fd0edcf5f24b6dcec6078f3
AHCI: Fix port reset race

bdrv_aio_cancel() can trigger bdrv_aio_flush() which makes all aio
that is currently in flight finish. So what we do is:

  port reset
  detect ncq in flight
  cancel ncq
  delete ncq sg list

at which point we have double freed the sg list. Instead, with this
patch we do:

  port reset
  detect ncq in flight
  cancel ncq
  check if we are really still in flight
  delete ncq sg list

which makes things work and gets rid of the race.

Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
hw/ide/ahci.c