[PATCH] death of is_mounted() and aother fixes
authorAlexander Viro <viro@math.psu.edu>
Tue, 5 Mar 2002 06:56:47 +0000 (22:56 -0800)
committerLinus Torvalds <torvalds@penguin.transmeta.com>
Tue, 5 Mar 2002 06:56:47 +0000 (22:56 -0800)
commit75e9c9e1bffbe4a1767172855296b94ccba28f71
treee8395cc06b7949cf934b3a7544ef6fc5a5d6b7d1
parentd9036aafeecbf6cea908c699980cfd986dd2600b
[PATCH] death of is_mounted() and aother fixes

* new functions - bd_claim(bdev, holder) and bd_release(bdev).
bd_claim(bdev, holder) fails is device is already claimed by
somebody else; bd_release(bdev) gives device up.

* get_sb_bdev() claims device for fs_type; it means that we don't need
to look through entire least of superblocks anymore - just through
the list of superblocks belonging to that type (i.e. the same thing
we do for non-block filesystems; that will allow to merge quite a
bit of code afterwards).

* sys_swapon claims device for itself;  free exclusion with mounting,
end of problems with bogus set_blocksize().

* is_mounted() and is_swap_partition() are gone - what we actually
wanted was "try to claim device for ourselves".  Which we can do
now - without races inherent to is_mounted()/is_swap_partition().

* RAID lock_rdev() claims device for itself.  I.e. we get rid of
is_mounted() in there (BTW, is_swap_partition() was missing) and
we get protection both ways - not only RAID won't take an already
mounted device, but mount won't stomp on a device claimed by RAID.

There are other places that would benefit from the same (e.g. ext3 with
external journal almost definitely wants to claim device for itself).

Notice that it's a cooperative thing - neither open() nor raw device stuff
claim the block device, so they don't care if device is mounted, etc.  So
we don't break fsck and friends - exclusion is between those who know that
they want that exclusion.
drivers/block/blkpg.c
drivers/md/md.c
fs/block_dev.c
fs/super.c
include/linux/fs.h
include/linux/swap.h
kernel/ksyms.c
mm/swapfile.c