Messages in this thread | | | Date | Tue, 4 Nov 2014 16:55:43 +0100 | From | Jan Kara <> | Subject | Re: [PATCH 2/4] chardev: Increment cdev reference count when i_cdev references it |
| |
On Tue 04-11-14 15:40:30, Al Viro wrote: > On Tue, Nov 04, 2014 at 04:37:52PM +0100, Jan Kara wrote: > > On Tue 04-11-14 14:46:11, Al Viro wrote: > > > On Wed, Oct 22, 2014 at 10:14:11PM +0200, Jan Kara wrote: > > > > Currently i_cdev reference to a character device isn't accounted in the > > > > reference count of the character device. This then requires us to track > > > > all references through a list of all inodes referencing a character > > > > device which is somewhat clumsy and requires list_head in each inode in > > > > the system. > > > > > > > > So make i_cdev a reference like any other. > > > > > > So no rmmod for you until an inode of character device node you had > > > closed a while ago finally gets evicted from icache? Or am I misreading > > > you? > > Yes, this is a consequence of the change. I should have noted in the > > changelog I guess. > > That consequence looks broken, IMO. Hum, it already behaves for block devices that way (and noone complained - but admittedly block devices tied to strange modules are less common than character devices). Also rmmod isn't that common IMO, but I see your point that it's unintuitive behavior.
Alternatively we could clear i_cdev when the inode isn't open anymore (and thus doesn't hold any references to cdev). The downside is we have to re-lookup the character device on the first inode open. Would such a solution look acceptable to you?
Honza -- Jan Kara <jack@suse.cz> SUSE Labs, CR
| |