• Rob Landley's avatar
    [PATCH] Fix bd_claim() error code. · f7b3a435
    Rob Landley authored
    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: default avatarRob Landley <rob@landley.net>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    f7b3a435
swapfile.c 41.9 KB