1) ->read_super() called with lock already taken. 2) module reference counter is taken care of in VFS. Forget about MOD_{INC.DEC}_USE_COUNT crap in ->{read,put}_super(). 3) get_fs_type() taken out of the export list. If somebody wants it back - fine, but I'ld rather _not_ do it if possible. 4) DECLARE_FSTYPE() and DECLARE_FSTYPE_DEV() added - see fs/ext2/super.c and fs/nfs/inode.c for examples. Use them instead of direct messing with struct file_system_type. 5) filesystem doesn't need to touch sb->s_dev - if read_super() fails it should return NULL anyway and VFS will clean up after us just fine. Unneeded code removed from filesystems. Rationale: 1) cuts a lot of crap away; the change was way overdue (see comments in old variant of read_super()). 2) old code was fundamentally broken. Code should never decrement the counter on itself - it asks for trouble big way. Moreover, there were honest to $DEITY oopsable races in fs/super.c (e.g. sys_sysfs()). So taking the maintainance of the reference counter to VFS was the Right Thing(tm) and the fact that it had cut down on the amount of crud in filesystems was an additional win. 3) semantic had been changed: in case when get_fs_type() succeeds it increments the reference counter on the object it returns (obviously right thing). I've made the beast static in fs/super.c (and quite possibly it will be able to remain that way), so that if somebody used it they would notice - otherwise they'ld silently get modules that couldn't be unloaded. Anyway, if you are messing with fs/super.c guts - show up and let me know what do you need. The thing changes right now, so... 4) cleaner than it used to be. Less PITA to update in case of struct file_system_type changes. 5) the only reason why we didn't do that before was lack of lock at exit from ->read_super() (it was taken and released inside). So we had to clean ->s_dev before we release the lock to prevent an obvious race. Now we can do it in VFS.