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.

Reply via email to