public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [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