diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2011-06-12 14:24:33 (GMT) |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2011-06-12 21:45:34 (GMT) |
commit | d251ed271d528afb407cc2ede30923e34cb209a5 (patch) | |
tree | b77e0133453057821ee50956c560013acb467c4c /lib | |
parent | b1c27ab3f93daede979f804afc38b189c2f17c60 (diff) | |
download | linux-d251ed271d528afb407cc2ede30923e34cb209a5.tar.xz |
ubifs: fix sget races
* allocate ubifs_info in ->mount(), fill it enough for sb_test() and
set ->s_fs_info to it in set() callback passed to sget().
* do *not* free it in ->put_super(); do that in ->kill_sb() after we'd
done kill_anon_super().
* don't free it in ubifs_fill_super() either - deactivate_locked_super()
done by caller when ubifs_fill_super() returns an error will take care
of that sucker.
* get rid of kludge with passing ubi to ubifs_fill_super() in ->s_fs_info;
we only need it in alloc_ubifs_info(), so ubifs_fill_super() will need
only ubifs_info. Which it will find in ->s_fs_info just fine, no need to
reassign anything...
As the result, sb_test() becomes safe to apply to all superblocks that
can be found by sget() (and a kludge with temporary use of ->s_fs_info
to store a pointer to very different structure goes away).
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'lib')
0 files changed, 0 insertions, 0 deletions