[PATCH] (1/3) fs/super.c cleanups
authorAlexander Viro <viro@math.psu.edu>
Mon, 25 Feb 2002 04:07:38 +0000 (20:07 -0800)
committerLinus Torvalds <torvalds@penguin.transmeta.com>
Mon, 25 Feb 2002 04:07:38 +0000 (20:07 -0800)
commitad9e3359dfcadb92560c16c76771c8243219e11b
treec2c2a8c7c98a3f215718a93f96e0cbffb3710f54
parentdbd56307a5fbd69fbb0b59b16b8963bca9e07c09
[PATCH] (1/3) fs/super.c cleanups

* missing yield() added to grab_super() (on failure exit).  Without
  that we have a nasty race - if get_sb_bdev() happens just before
  we grab ->s_umount in kill_super(), we are going to have
  get_sb_bdev() spinning indefinitely long without yielding CPU,
  so that kill_super() could make progress (and break the loop).

* in kill_super() code that does actual superblock shutdown is
  wrapped in if (sb->s_root) {}.  That condition is true for
  all old callers of kill_super(), so we don't change existing
  behaviour.

* instances of deactivate_super()/remove_super() (after failed
  call of foo_fill_super()) are replaced with
up_write(&s->s_umount);
kill_super(s);
  - now it becomes legitimate (kill_super() works on such guys and
  does exactly what we want).
fs/super.c