summaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@redhat.com>2014-02-13 11:42:05 +0200
committerDavid S. Miller <davem@davemloft.net>2014-02-13 18:47:30 -0500
commit0ad8b480d6ee916aa84324f69acf690142aecd0e (patch)
tree0822d50ade14f1ab57ec2cd4fa878611f3ba752f /block
parent208ece14e23b167b43d906c74e3bdcbee8d6e4aa (diff)
vhost: fix ref cnt checking deadlock
vhost checked the counter within the refcnt before decrementing. It really wanted to know that it is the one that has the last reference, as a way to batch freeing resources a bit more efficiently. Note: we only let refcount go to 0 on device release. This works well but we now access the ref counter twice so there's a race: all users might see a high count and decide to defer freeing resources. In the end no one initiates freeing resources until the last reference is gone (which is on VM shotdown so might happen after a looooong time). Let's do what we probably should have done straight away: switch from kref to plain atomic, documenting the semantics, return the refcount value atomically after decrement, then use that to avoid the deadlock. Reported-by: Qin Chuanyu <qinchuanyu@huawei.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'block')
0 files changed, 0 insertions, 0 deletions