[PATCH] Fix bd_claim() error code.

From: Rob Landley
Date: Sat Sep 17 2005 - 05:39:08 EST


Signed-off-by: Rob Landley <rob@xxxxxxxxxxx>

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.

--- linux-2.6.13.1/mm/swapfile.c 2005-09-09 21:42:58.000000000 -0500
+++ linux-2.6.13.1-new/mm/swapfile.c 2005-09-17 02:42:45.000000000 -0500
@@ -1358,6 +1358,7 @@
error = bd_claim(bdev, sys_swapon);
if (error < 0) {
bdev = NULL;
+ error = -EINVAL;
goto bad_swap;
}
p->old_block_size = block_size(bdev);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/