void register_disk(struct gendisk *disk) { struct device *ddev = disk_to_dev(disk); struct block_device *bdev; struct disk_part_iter piter; struct hd_struct *part; int err; #ifdef MY_ABC_HERE int error; #endif ddev->parent = disk->driverfs_dev; dev_set_name(ddev, disk->disk_name); /* delay uevents, until we scanned partition table */ dev_set_uevent_suppress(ddev, 1); if (device_add(ddev)) return; #ifdef MY_ABC_HERE if (ddev->parent) { char *class_name; class_name = make_class_name(ddev->class->name, &ddev->kobj); if (class_name) { error = sysfs_create_link(&ddev->parent->kobj, &ddev->kobj, class_name); } kfree(class_name); }
int css_register_subchannel(struct subchannel *sch) { int ret; /* Initialize the subchannel structure */ sch->dev.parent = &channel_subsystems[0]->device; sch->dev.bus = &css_bus_type; sch->dev.groups = default_subch_attr_groups; /* * We don't want to generate uevents for I/O subchannels that don't * have a working ccw device behind them since they will be * unregistered before they can be used anyway, so we delay the add * uevent until after device recognition was successful. * Note that we suppress the uevent for all subchannel types; * the subchannel driver can decide itself when it wants to inform * userspace of its existence. */ dev_set_uevent_suppress(&sch->dev, 1); css_update_ssd_info(sch); /* make it known to the system */ ret = css_sch_device_register(sch); if (ret) { CIO_MSG_EVENT(0, "Could not register sch 0.%x.%04x: %d\n", sch->schid.ssid, sch->schid.sch_no, ret); return ret; } if (!sch->driver) { /* * No driver matched. Generate the uevent now so that * a fitting driver module may be loaded based on the * modalias. */ dev_set_uevent_suppress(&sch->dev, 0); kobject_uevent(&sch->dev.kobj, KOBJ_ADD); } return ret; }