Messages in this thread |  | | Date | Wed, 28 Nov 2001 19:37:35 -0500 | From | Jeff Garzik <> | Subject | Re: [PATCH] remove BKL from drivers' release functions |
| |
"David C. Hansen" wrote: > > Russell King wrote: > > >On Wed, Nov 28, 2001 at 03:32:32PM -0800, David C. Hansen wrote: > > > >>Nothing, because the BKL is not held for all opens anymore. In most of > >>the cases that we addressed, the BKL was in release _only_, not in open > >>at all. There were quite a few drivers where we added a spinlock, or > >>used atomic operations to keep open from racing with release. > >> > > > >All char and block devs are opened with the BKL held - see chrdev_open in > >fs/devices.c and do_open in fs/block_dev.c > > > I wrote a quick and dirty char device driver to see if this happened. > If I run two tasks doing a bunch of opens and closes, the -EBUSY > condition in the open function does happen. Is my driver doing > something wrong? > > Here is the meat of the driver: > > static int Device_Open = 0; > > int testdev_open(struct inode *inode, struct file *file) > { > if ( test_and_set_bit(0,&Device_Open) ) { > printk( "attempt to open testdev more than once\n" ); > return -EBUSY; > } > MOD_INC_USE_COUNT; > return SUCCESS; > } > > int testdev_release(struct inode *inode, struct file *file) > { > clear_bit(0,&Device_Open); > MOD_DEC_USE_COUNT; > return 0; > }
it is still racy, that's why struct file_operations and other structs have an 'owner' member......
-- Jeff Garzik | Only so many songs can be sung Building 1024 | with two lips, two lungs, and one tongue. MandrakeSoft | - nomeansno
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |