| .. | .. |
|---|
| 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 | { |
|---|