[PATCH] Fix bd_claim() error code.

Problem: In some circumstances, bd_claim() is returning the wrong error
code.

If we try to swapon an unused block device that isn't swap formatted, we
get -EINVAL.  But if that same block device is already mounted, we instead
get -EBUSY, even though it still isn't a valid swap device.

This issue came up on the busybox list trying to get the error message
from "swapon -a" right.  If a swap device is already enabled, we get -EBUSY,
and we shouldn't report this as an error.  But we can't distinguish the two
-EBUSY conditions, which are very different errors.

In the code, bd_claim() returns either 0 or -EBUSY, but in this case busy
means "somebody other than sys_swapon has already claimed this", and
_that_ means this block device can't be a valid swap device.  So return
-EINVAL there.

Signed-off-by: Rob Landley <rob@landley.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Rob Landley 2005-09-22 21:44:27 -07:00 committed by Linus Torvalds
parent 8bdac5d1ed
commit f7b3a4359b
1 changed files with 1 additions and 0 deletions

View File

@ -1381,6 +1381,7 @@ asmlinkage long sys_swapon(const char __user * specialfile, int swap_flags)
error = bd_claim(bdev, sys_swapon); error = bd_claim(bdev, sys_swapon);
if (error < 0) { if (error < 0) {
bdev = NULL; bdev = NULL;
error = -EINVAL;
goto bad_swap; goto bad_swap;
} }
p->old_block_size = block_size(bdev); p->old_block_size = block_size(bdev);