* [PATCH] Fix bd_claim() error code.
@ 2005-09-17 10:37 Rob Landley
0 siblings, 0 replies; only message in thread
From: Rob Landley @ 2005-09-17 10:37 UTC (permalink / raw)
To: linux-kernel, akpm
Signed-off-by: Rob Landley <rob@landley.net>
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);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2005-09-17 10:37 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-09-17 10:37 [PATCH] Fix bd_claim() error code Rob Landley
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox