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);
}