Commit daaeb031 authored by Federico Vaga's avatar Federico Vaga

fmc: fix fmc_carrier_register error handling process

The carrier device release function and the fmc_carrier_register error handling
process were freeing the IDA is twice.
Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent 35eded62
......@@ -116,6 +116,7 @@ static void fmc_carrier_release(struct device *dev)
struct fmc_carrier *carrier = to_fmc_carrier(dev);
ida_simple_remove(&fmc_carrier_ida, carrier->dev.id);
carrier->dev.id = -1;
}
static const struct device_type fmc_carrier_type = {
......@@ -252,7 +253,7 @@ int fmc_carrier_register(struct device *parent,
void *priv)
{
struct fmc_carrier *carrier;
int err, id, i;
int err, i;
ssize_t carrier_mem_size;
void *tmp_p;
......@@ -273,13 +274,6 @@ int fmc_carrier_register(struct device *parent,
return -EINVAL;
}
id = ida_simple_get(&fmc_carrier_ida, 0, 0, GFP_KERNEL);
if (id < 0) {
dev_err(parent, "FMC can't assign ID to carrier\n");
err = id;
goto err_ida;
}
carrier_mem_size = sizeof(struct fmc_carrier);
carrier_mem_size += sizeof(struct fmc_slot *) * nr_slot;
carrier = devm_kzalloc(parent, carrier_mem_size, GFP_KERNEL);
......@@ -296,7 +290,13 @@ int fmc_carrier_register(struct device *parent,
carrier->dev.class = &fmc_class;
carrier->dev.type = &fmc_carrier_type;
carrier->dev.parent = parent;
carrier->dev.id = id;
carrier->dev.id = ida_simple_get(&fmc_carrier_ida, 0, 0, GFP_KERNEL);
if (carrier->dev.id < 0) {
dev_err(parent, "FMC can't assign ID to carrier\n");
err = carrier->dev.id;
goto err_ida;
}
err = dev_set_name(&carrier->dev, "fmc-carrier-%x", carrier->dev.id);
if (err)
goto err_name;
......@@ -324,10 +324,10 @@ err_slot:
device_unregister(&carrier->dev);
err_reg:
err_name:
ida_simple_remove(&fmc_carrier_ida, carrier->dev.id);
err_ida:
devm_kfree(parent, carrier);
err_alloc:
ida_simple_remove(&fmc_carrier_ida, id);
err_ida:
dev_err(parent, "FMC carrier registration: failed %d\n", err);
return err;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment