.. | .. |
---|
209 | 209 | raid_attr_ro_fn(resync); |
---|
210 | 210 | raid_attr_ro_state_fn(state); |
---|
211 | 211 | |
---|
212 | | -static void raid_component_release(struct device *dev) |
---|
213 | | -{ |
---|
214 | | - struct raid_component *rc = |
---|
215 | | - container_of(dev, struct raid_component, dev); |
---|
216 | | - dev_printk(KERN_ERR, rc->dev.parent, "COMPONENT RELEASE\n"); |
---|
217 | | - put_device(rc->dev.parent); |
---|
218 | | - kfree(rc); |
---|
219 | | -} |
---|
220 | | - |
---|
221 | | -int raid_component_add(struct raid_template *r,struct device *raid_dev, |
---|
222 | | - struct device *component_dev) |
---|
223 | | -{ |
---|
224 | | - struct device *cdev = |
---|
225 | | - attribute_container_find_class_device(&r->raid_attrs.ac, |
---|
226 | | - raid_dev); |
---|
227 | | - struct raid_component *rc; |
---|
228 | | - struct raid_data *rd = dev_get_drvdata(cdev); |
---|
229 | | - int err; |
---|
230 | | - |
---|
231 | | - rc = kzalloc(sizeof(*rc), GFP_KERNEL); |
---|
232 | | - if (!rc) |
---|
233 | | - return -ENOMEM; |
---|
234 | | - |
---|
235 | | - INIT_LIST_HEAD(&rc->node); |
---|
236 | | - device_initialize(&rc->dev); |
---|
237 | | - rc->dev.release = raid_component_release; |
---|
238 | | - rc->dev.parent = get_device(component_dev); |
---|
239 | | - rc->num = rd->component_count++; |
---|
240 | | - |
---|
241 | | - dev_set_name(&rc->dev, "component-%d", rc->num); |
---|
242 | | - list_add_tail(&rc->node, &rd->component_list); |
---|
243 | | - rc->dev.class = &raid_class.class; |
---|
244 | | - err = device_add(&rc->dev); |
---|
245 | | - if (err) |
---|
246 | | - goto err_out; |
---|
247 | | - |
---|
248 | | - return 0; |
---|
249 | | - |
---|
250 | | -err_out: |
---|
251 | | - list_del(&rc->node); |
---|
252 | | - rd->component_count--; |
---|
253 | | - put_device(component_dev); |
---|
254 | | - kfree(rc); |
---|
255 | | - return err; |
---|
256 | | -} |
---|
257 | | -EXPORT_SYMBOL(raid_component_add); |
---|
258 | | - |
---|
259 | 212 | struct raid_template * |
---|
260 | 213 | raid_class_attach(struct raid_function_template *ft) |
---|
261 | 214 | { |
---|