Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed542bed authored by Jeff Garzik's avatar Jeff Garzik Committed by James Bottomley
Browse files

[SCSI] raid class: handle component-add errors

parent 83aabc1b
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -215,7 +215,7 @@ static void raid_component_release(struct class_device *cdev)
	kfree(rc);
}

void raid_component_add(struct raid_template *r,struct device *raid_dev,
int raid_component_add(struct raid_template *r,struct device *raid_dev,
		       struct device *component_dev)
{
	struct class_device *cdev =
@@ -223,10 +223,11 @@ void raid_component_add(struct raid_template *r,struct device *raid_dev,
						      raid_dev);
	struct raid_component *rc;
	struct raid_data *rd = class_get_devdata(cdev);
	int err;

	rc = kzalloc(sizeof(*rc), GFP_KERNEL);
	if (!rc)
		return;
		return -ENOMEM;

	INIT_LIST_HEAD(&rc->node);
	class_device_initialize(&rc->cdev);
@@ -239,7 +240,18 @@ void raid_component_add(struct raid_template *r,struct device *raid_dev,
	list_add_tail(&rc->node, &rd->component_list);
	rc->cdev.parent = cdev;
	rc->cdev.class = &raid_class.class;
	class_device_add(&rc->cdev);
	err = class_device_add(&rc->cdev);
	if (err)
		goto err_out;

	return 0;

err_out:
	list_del(&rc->node);
	rd->component_count--;
	put_device(component_dev);
	kfree(rc);
	return err;
}
EXPORT_SYMBOL(raid_component_add);

+3 −2
Original line number Diff line number Diff line
@@ -77,5 +77,6 @@ DEFINE_RAID_ATTRIBUTE(enum raid_state, state)
struct raid_template *raid_class_attach(struct raid_function_template *);
void raid_class_release(struct raid_template *);

void raid_component_add(struct raid_template *, struct device *,
int __must_check raid_component_add(struct raid_template *, struct device *,
				    struct device *);