
levinsasha928 at gmail
Apr 28, 2012, 8:21 PM
Post #7 of 9
(50 views)
Permalink
|
|
Re: [PATCH] 9p: disconnect channel when PCI device is removed
[In reply to]
|
|
On Sat, Apr 28, 2012 at 8:16 PM, Aneesh Kumar K.V <aneesh.kumar [at] linux> wrote: > Sasha Levin <levinsasha928 [at] gmail> writes: > >> On Mon, Apr 16, 2012 at 12:59 PM, Aneesh Kumar K.V >> <aneesh.kumar [at] linux> wrote: >>> Sasha Levin <levinsasha928 [at] gmail> writes: >>> >>>> On Sun, Apr 15, 2012 at 2:27 PM, Aneesh Kumar K.V >>>> <aneesh.kumar [at] linux> wrote: >>>>> Sasha Levin <levinsasha928 [at] gmail> writes: >>>>> >>>>>> When a virtio_9p pci device is being removed, we should close down any >>>>>> active channels and free up resources, we're not supposed to BUG() if there's >>>>>> still an open channel since it's a valid case when removing the PCI device. >>>>>> >>>>>> Otherwise, removing the PCI device with an open channel would cause the >>>>>> following BUG(): >>>>>> >>>>> ... >>>>> >>>>>> diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c >>>>>> index 3d43206..5af18d1 100644 >>>>>> --- a/net/9p/trans_virtio.c >>>>>> +++ b/net/9p/trans_virtio.c >>>>>> @@ -615,7 +615,8 @@ static void p9_virtio_remove(struct virtio_device *vdev) >>>>>> { >>>>>> struct virtio_chan *chan = vdev->priv; >>>>>> >>>>>> - BUG_ON(chan->inuse); >>>>>> + if (chan->inuse) >>>>>> + p9_virtio_close(chan->client); >>>>>> vdev->config->del_vqs(vdev); >>>>>> >>>>>> mutex_lock(&virtio_9p_lock); >>>>> >>>>> But an umount should have resulted in p9_virtio_close ? How are you >>>>> removing the device ? Are you removing the device with file system >>>>> mounted ?. In that case may be we should return EBUSY ? >>>> >>>> I signal the underlying PCI device to remove (echo 1 > >>>> /sys/devices/pci0000\:00/[...]/remove), we can't really prevent that >>>> thing so we must clean up ourselves. >>> >>> What does that mean for the mounted file system ? What would happen to >>> the pending fs operations in that case ? >> >> I'm guessing that all of them should be canceled. > > Pending operation we can cancel, but what about dirty pages in cached > mode ? Also how does virtio-blk handle this ? virtio-blk does pretty much the same thing: sh-4.2# echo 1 > 0000\:00\:05.0/remove sh-4.2# ls -al [hang] >> virtio-pci simulates >> a PCI device, if the PCI device is unplugged there's not much to do >> about the filesystem or pending requests. > > Ideal thing to do would be to make remove return -EBUSY; let the user > umount. But looking at the code, I guess there is no easy way to return > error from remove callback ? There's no way to return error, the removal callback is just a notifier. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo [at] vger More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|