From: Asias He <asias@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: kvm@vger.kernel.org, virtualization@lists.linux-foundation.org
Subject: Re: [PATCH] virtio-blk: Don't free ida when disk is in use
Date: Fri, 21 Dec 2012 09:57:18 +0800 [thread overview]
Message-ID: <50D3C1FE.7000508@redhat.com> (raw)
In-Reply-To: <20121220105417.GA3789@redhat.com>
On 12/20/2012 06:54 PM, Michael S. Tsirkin wrote:
> On Wed, Dec 19, 2012 at 08:40:15PM +0100, Alexander Graf wrote:
>> When a file system is mounted on a virtio-blk disk, we then remove it
>> and then reattach it, the reattached disk gets the same disk name and
>> ids as the hot removed one.
>>
>> This leads to very nasty effects - mostly rendering the newly attached
>> device completely unusable.
>>
>> Trying what happens when I do the same thing with a USB device, I saw
>> that the sd node simply doesn't get free'd when a device gets forcefully
>> removed.
>>
>> Imitate the same behavior for vd devices. This way broken vd devices
>> simply are never free'd and newly attached ones keep working just fine.
>>
>> Signed-off-by: Alexander Graf <agraf@suse.de>
>> ---
>> drivers/block/virtio_blk.c | 7 ++++++-
>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
>> index 0bdde8f..07a18e2 100644
>> --- a/drivers/block/virtio_blk.c
>> +++ b/drivers/block/virtio_blk.c
>> @@ -889,6 +889,7 @@ static void __devexit virtblk_remove(struct virtio_device *vdev)
>> {
>> struct virtio_blk *vblk = vdev->priv;
>> int index = vblk->index;
>> + int refc;
>>
>> /* Prevent config work handler from accessing the device. */
>> mutex_lock(&vblk->config_lock);
>> @@ -903,11 +904,15 @@ static void __devexit virtblk_remove(struct virtio_device *vdev)
>>
>> flush_work(&vblk->config_work);
>>
>> + refc = atomic_read(&disk_to_dev(vblk->disk)->kobj.kref.refcount);
>> put_disk(vblk->disk);
>> mempool_destroy(vblk->pool);
>> vdev->config->del_vqs(vdev);
>> kfree(vblk);
>> - ida_simple_remove(&vd_index_ida, index);
>> +
>> + /* Only free device id if we don't have any users */
>> + if (refc == 1)
>> + ida_simple_remove(&vd_index_ida, index);
>> }
>>
>> #ifdef CONFIG_PM
>
> Network devices take the approach of retrying every second.
> Donnu if it makes sense here.
virtnet_remove()? I am not seeing the code there.
We are too late in the remove path in virtblk_remove(). No easy way to
come back to the state before the remove. So, giving user warning (tell
him to close the device) and retrying might be a choice.
>> --
>> 1.7.12.4
> _______________________________________________
> Virtualization mailing list
> Virtualization@lists.linux-foundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/virtualization
>
--
Asias
prev parent reply other threads:[~2012-12-21 1:57 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-19 19:40 [PATCH] virtio-blk: Don't free ida when disk is in use Alexander Graf
2012-12-20 4:15 ` Rusty Russell
2012-12-20 8:46 ` Asias He
2012-12-20 9:41 ` Alexander Graf
2012-12-21 1:48 ` Asias He
2013-01-02 5:09 ` Rusty Russell
2012-12-20 10:54 ` Michael S. Tsirkin
2012-12-20 11:27 ` Alexander Graf
2012-12-20 11:38 ` Michael S. Tsirkin
2012-12-20 11:47 ` Alexander Graf
2012-12-21 2:02 ` Asias He
2012-12-21 1:58 ` Asias He
2012-12-20 11:27 ` Alexander Graf
2012-12-21 1:57 ` Asias He [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50D3C1FE.7000508@redhat.com \
--to=asias@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mst@redhat.com \
--cc=virtualization@lists.linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.