Messages in this thread | | | Date | Sun, 1 Jun 2008 08:59:55 +0300 | From | "Matti Linnanvuori" <> | Subject | Re: [PATCH v1.2.26] wan: new driver retina |
| |
2008/5/30 Krzysztof Halasa <khc@pm.waw.pl>: > "Matti Linnanvuori" <mattilinn@gmail.com> writes: >>>> +static int fepci_char_open(struct inode *inode, struct file *filp) >>>> +{ >>>> + unsigned int minor = MINOR(inode->i_rdev); >>>> + if (unlikely(minor >= find_cnt || card_privates[minor].pci_dev == NULL)) >>>> + return -ENXIO; >>>> + filp->f_op = &fepci_char_fops; >>>> + if (unlikely(!try_module_get(THIS_MODULE))) >>>> + return -EBUSY; >>> >>> That won't work race-free, use owner field. >> >> You mean the f_op assignment? I have removed that. > > Actually I meant try_module_get() from within the driver, for example > your module may get unloaded while in this function, before this > try_module_get(), and that would be fatal.
I don't think the module can finish getting unloaded while in that function because the module cleanup function unregisters the character device.
> Yes, I thought stream mode = character device but now I see it's > another flavour of network device(?), which is never up and exists > only for the ability to receive netdev ioctls (though it also uses > char dev ioctls). > > Did I get this right?
Yeah.
> Why not simply use a character device, with normal read, write etc?
It would make more sense to use a character device. Read and write system calls consume more CPU time, though.
| |