Hi John, On Thu, Dec 13, 2012 at 12:31 PM, John Beard <johnb@xxxxxxxxxxxxxxxx> wrote: > Hi, > > I have block driver for a hot-pluggable device PCIe storage device on > kernel version 2.6.43 (which I know isn't a mainline kernel version, but > it's what I am required to build against). The driver itself is > relatively simple and implements the following block operations: > > static struct block_device_operations mydev_ops = { > .owner = THIS_MODULE, > .open = mydev_open, > .release = mydev_release, > .getgeo = mydev_getgeo, > .ioctl = mydev_ioctl > }; > > and the following PCI driver structure: > > static struct pci_driver mydev_driver = { > .name = DRIVER_NAME, > .probe = mydev_pci_init_one, > .remove = mydev_pci_remove_one, > .id_table = mydev_pci_tbl, > }; > > As well as a request_fn with the following signature: > > static void mydev_submit_req(struct request_queue *q); > > Whenever I get IO requests, there is the expected pattern of "open, IO, > release", and everything works OK. > > However, if the device is physically removed during IO, I never seem to > get a "release", just "open, IO, hang". I believe (but I don't know), > that this is preventing del_gendisk() from completing, thus hanging the > cleanup of the driver, which is triggered by mydev_pci_remove_one() upon > the removal of the device. > > I am ending all requests on the queue once an eject happens, but it > still doesn't seem to cause a release. > > What is the right way to terminate requests and delete the gendisk in > the case of physically vanished PCI devices (or even devices in general)? > There are several block driver examples in drivers/block. Or you might want to take a loot at mtdblock.c, or perhaps this simple ubiblock implementation: http://lwn.net/Articles/525957/ If you send a PATCH with your driver perhaps someone can take a look at it and tell you what's going on. Ezequiel _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies