mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
dm mpath: Add missing dm_put_device when failing to get scsi dh name
When commitfd81bc5cca("scsi: device_handler: Return error pointer in scsi_dh_attached_handler_name()") added code to fail parsing the path if scsi_dh_attached_handler_name() failed with -ENOMEM, it didn't clean up the reference to the path device that had just been taken. Fix this, and steamline the error paths of parse_path() a little. Fixes:fd81bc5cca("scsi: device_handler: Return error pointer in scsi_dh_attached_handler_name()") Cc: stable@vger.kernel.org Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
This commit is contained in:
parent
ec8534021a
commit
787bd63ee6
|
|
@ -960,27 +960,27 @@ static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps
|
|||
attached_handler_name = NULL;
|
||||
} else {
|
||||
r = PTR_ERR(attached_handler_name);
|
||||
goto bad;
|
||||
ti->error = "error allocating handler name";
|
||||
goto bad_put_device;
|
||||
}
|
||||
}
|
||||
if (attached_handler_name || m->hw_handler_name) {
|
||||
INIT_DELAYED_WORK(&p->activate_path, activate_path_work);
|
||||
r = setup_scsi_dh(p->path.dev->bdev, m, &attached_handler_name, &ti->error);
|
||||
kfree(attached_handler_name);
|
||||
if (r) {
|
||||
dm_put_device(ti, p->path.dev);
|
||||
goto bad;
|
||||
}
|
||||
if (r)
|
||||
goto bad_put_device;
|
||||
}
|
||||
|
||||
r = ps->type->add_path(ps, &p->path, as->argc, as->argv, &ti->error);
|
||||
if (r) {
|
||||
dm_put_device(ti, p->path.dev);
|
||||
goto bad;
|
||||
}
|
||||
if (r)
|
||||
goto bad_put_device;
|
||||
|
||||
return p;
|
||||
bad:
|
||||
|
||||
bad_put_device:
|
||||
dm_put_device(ti, p->path.dev);
|
||||
bad:
|
||||
free_pgpath(p);
|
||||
return ERR_PTR(r);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user