[PATCH] device-mapper: Fix dm_swap_table error cases
Fix dm_swap_table() __bind error cases: a missing unlock, and EINVAL preferable to EPERM. Signed-off-by: Alasdair G Kergon <agk@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
c3cd4f6b27
commit
93c534aefb
@ -966,23 +966,20 @@ static void __flush_deferred_io(struct mapped_device *md, struct bio *c)
|
||||
*/
|
||||
int dm_swap_table(struct mapped_device *md, struct dm_table *table)
|
||||
{
|
||||
int r;
|
||||
int r = -EINVAL;
|
||||
|
||||
down_write(&md->lock);
|
||||
|
||||
/* device must be suspended */
|
||||
if (!test_bit(DMF_SUSPENDED, &md->flags)) {
|
||||
up_write(&md->lock);
|
||||
return -EPERM;
|
||||
}
|
||||
if (!test_bit(DMF_SUSPENDED, &md->flags))
|
||||
goto out;
|
||||
|
||||
__unbind(md);
|
||||
r = __bind(md, table);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
out:
|
||||
up_write(&md->lock);
|
||||
return 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user