Commit fa31a260 authored by Jonathan Corbet's avatar Jonathan Corbet Committed by Greg Kroah-Hartman

[PATCH] cdev 2/2: hide cdev->kobj

The existing cdev interface requires users to deal with the embedded
kobject in two places:

- The kobject name field must be set before adding the cdev, and
- Should cdev_add() fail, a call to kobject_put() is required.

IMO, this exposure of the embedded kobject makes the interface more brittle
and harder to understand.  It's also unnecessary.  With the removal of
/sys/cdev, a call to cdev_del() will nicely replace kobject_put(), and the
name setting is easily wrapped.

This is against 2.6.4, but depends on the /sys/cdev removal patch.
parent e9e883fe
...@@ -2274,14 +2274,14 @@ int tty_register_driver(struct tty_driver *driver) ...@@ -2274,14 +2274,14 @@ int tty_register_driver(struct tty_driver *driver)
driver->termios_locked = NULL; driver->termios_locked = NULL;
} }
strcpy(driver->cdev.kobj.name, driver->name); cdev_set_name(&driver->cdev, driver->name);
for (s = strchr(driver->cdev.kobj.name, '/'); s; s = strchr(s, '/')) for (s = strchr(driver->cdev.kobj.name, '/'); s; s = strchr(s, '/'))
*s = '!'; *s = '!';
cdev_init(&driver->cdev, &tty_fops); cdev_init(&driver->cdev, &tty_fops);
driver->cdev.owner = driver->owner; driver->cdev.owner = driver->owner;
error = cdev_add(&driver->cdev, dev, driver->num); error = cdev_add(&driver->cdev, dev, driver->num);
if (error) { if (error) {
kobject_del(&driver->cdev.kobj); cdev_del(&driver->cdev);
unregister_chrdev_region(dev, driver->num); unregister_chrdev_region(dev, driver->num);
driver->ttys = NULL; driver->ttys = NULL;
driver->termios = driver->termios_locked = NULL; driver->termios = driver->termios_locked = NULL;
...@@ -2414,7 +2414,7 @@ static struct cdev vc0_cdev; ...@@ -2414,7 +2414,7 @@ static struct cdev vc0_cdev;
*/ */
static int __init tty_init(void) static int __init tty_init(void)
{ {
strcpy(tty_cdev.kobj.name, "dev.tty"); cdev_set_name(&tty_cdev, "dev.tty");
cdev_init(&tty_cdev, &tty_fops); cdev_init(&tty_cdev, &tty_fops);
if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) || if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||
register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0) register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)
...@@ -2422,7 +2422,7 @@ static int __init tty_init(void) ...@@ -2422,7 +2422,7 @@ static int __init tty_init(void)
devfs_mk_cdev(MKDEV(TTYAUX_MAJOR, 0), S_IFCHR|S_IRUGO|S_IWUGO, "tty"); devfs_mk_cdev(MKDEV(TTYAUX_MAJOR, 0), S_IFCHR|S_IRUGO|S_IWUGO, "tty");
class_simple_device_add(tty_class, MKDEV(TTYAUX_MAJOR, 0), NULL, "tty"); class_simple_device_add(tty_class, MKDEV(TTYAUX_MAJOR, 0), NULL, "tty");
strcpy(console_cdev.kobj.name, "dev.console"); cdev_set_name(&console_cdev, "dev.console");
cdev_init(&console_cdev, &console_fops); cdev_init(&console_cdev, &console_fops);
if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) || if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||
register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0) register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)
...@@ -2431,7 +2431,7 @@ static int __init tty_init(void) ...@@ -2431,7 +2431,7 @@ static int __init tty_init(void)
class_simple_device_add(tty_class, MKDEV(TTYAUX_MAJOR, 1), NULL, "console"); class_simple_device_add(tty_class, MKDEV(TTYAUX_MAJOR, 1), NULL, "console");
#ifdef CONFIG_UNIX98_PTYS #ifdef CONFIG_UNIX98_PTYS
strcpy(ptmx_cdev.kobj.name, "dev.ptmx"); cdev_set_name(&ptmx_cdev, "dev.ptmx");
cdev_init(&ptmx_cdev, &tty_fops); cdev_init(&ptmx_cdev, &tty_fops);
if (cdev_add(&ptmx_cdev, MKDEV(TTYAUX_MAJOR, 2), 1) || if (cdev_add(&ptmx_cdev, MKDEV(TTYAUX_MAJOR, 2), 1) ||
register_chrdev_region(MKDEV(TTYAUX_MAJOR, 2), 1, "/dev/ptmx") < 0) register_chrdev_region(MKDEV(TTYAUX_MAJOR, 2), 1, "/dev/ptmx") < 0)
...@@ -2441,7 +2441,7 @@ static int __init tty_init(void) ...@@ -2441,7 +2441,7 @@ static int __init tty_init(void)
#endif #endif
#ifdef CONFIG_VT #ifdef CONFIG_VT
strcpy(vc0_cdev.kobj.name, "dev.vc0"); cdev_set_name(&vc0_cdev, "dev.vc0");
cdev_init(&vc0_cdev, &console_fops); cdev_init(&vc0_cdev, &console_fops);
if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) || if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) ||
register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0") < 0) register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0") < 0)
......
...@@ -1266,7 +1266,7 @@ static int __init amdtp_init_module (void) ...@@ -1266,7 +1266,7 @@ static int __init amdtp_init_module (void)
{ {
cdev_init(&amdtp_cdev, &amdtp_fops); cdev_init(&amdtp_cdev, &amdtp_fops);
amdtp_cdev.owner = THIS_MODULE; amdtp_cdev.owner = THIS_MODULE;
kobject_set_name(&amdtp_cdev.kobj, "amdtp"); cdev_set_name(&amdtp_cdev, "amdtp");
if (cdev_add(&amdtp_cdev, IEEE1394_AMDTP_DEV, 16)) { if (cdev_add(&amdtp_cdev, IEEE1394_AMDTP_DEV, 16)) {
HPSB_ERR("amdtp: unable to add char device"); HPSB_ERR("amdtp: unable to add char device");
return -EIO; return -EIO;
......
...@@ -2616,7 +2616,7 @@ static int __init dv1394_init_module(void) ...@@ -2616,7 +2616,7 @@ static int __init dv1394_init_module(void)
cdev_init(&dv1394_cdev, &dv1394_fops); cdev_init(&dv1394_cdev, &dv1394_fops);
dv1394_cdev.owner = THIS_MODULE; dv1394_cdev.owner = THIS_MODULE;
kobject_set_name(&dv1394_cdev.kobj, "dv1394"); cdev_set_name(&dv1394_cdev, "dv1394");
ret = cdev_add(&dv1394_cdev, IEEE1394_DV1394_DEV, 16); ret = cdev_add(&dv1394_cdev, IEEE1394_DV1394_DEV, 16);
if (ret) { if (ret) {
printk(KERN_ERR "dv1394: unable to register character device\n"); printk(KERN_ERR "dv1394: unable to register character device\n");
......
...@@ -2746,9 +2746,10 @@ static int __init init_raw1394(void) ...@@ -2746,9 +2746,10 @@ static int __init init_raw1394(void)
cdev_init(&raw1394_cdev, &raw1394_fops); cdev_init(&raw1394_cdev, &raw1394_fops);
raw1394_cdev.owner = THIS_MODULE; raw1394_cdev.owner = THIS_MODULE;
kobject_set_name(&raw1394_cdev.kobj, RAW1394_DEVICE_NAME); cdev_set_name(&raw1394_cdev, RAW1394_DEVICE_NAME);
ret = cdev_add(&raw1394_cdev, IEEE1394_RAW1394_DEV, 1); ret = cdev_add(&raw1394_cdev, IEEE1394_RAW1394_DEV, 1);
if (ret) { if (ret) {
/* jmc: leaves reference to (static) raw1394_cdev */
HPSB_ERR("raw1394 failed to register minor device block"); HPSB_ERR("raw1394 failed to register minor device block");
devfs_remove(RAW1394_DEVICE_NAME); devfs_remove(RAW1394_DEVICE_NAME);
hpsb_unregister_highlevel(&raw1394_highlevel); hpsb_unregister_highlevel(&raw1394_highlevel);
......
...@@ -1457,7 +1457,7 @@ static int __init video1394_init_module (void) ...@@ -1457,7 +1457,7 @@ static int __init video1394_init_module (void)
cdev_init(&video1394_cdev, &video1394_fops); cdev_init(&video1394_cdev, &video1394_fops);
video1394_cdev.owner = THIS_MODULE; video1394_cdev.owner = THIS_MODULE;
kobject_set_name(&video1394_cdev.kobj, VIDEO1394_DRIVER_NAME); cdev_set_name(&video1394_cdev, VIDEO1394_DRIVER_NAME);
ret = cdev_add(&video1394_cdev, IEEE1394_VIDEO1394_DEV, 16); ret = cdev_add(&video1394_cdev, IEEE1394_VIDEO1394_DEV, 16);
if (ret) { if (ret) {
PRINT_G(KERN_ERR, "video1394: unable to get minor device block"); PRINT_G(KERN_ERR, "video1394: unable to get minor device block");
......
...@@ -46,13 +46,13 @@ struct cdev *register_tape_dev( ...@@ -46,13 +46,13 @@ struct cdev *register_tape_dev(
cdev->owner = fops->owner; cdev->owner = fops->owner;
cdev->ops = fops; cdev->ops = fops;
cdev->dev = dev; cdev->dev = dev;
strcpy(cdev->kobj.name, devname); cdev_set_name(cdev, devname);
for (s = strchr(cdev->kobj.name, '/'); s; s = strchr(s, '/')) for (s = strchr(cdev->kobj.name, '/'); s; s = strchr(s, '/'))
*s = '!'; *s = '!';
rc = cdev_add(cdev, cdev->dev, 1); rc = cdev_add(cdev, cdev->dev, 1);
if (rc) { if (rc) {
kobject_put(&cdev->kobj); cdev_del(cdev);
return ERR_PTR(rc); return ERR_PTR(rc);
} }
class_simple_device_add(tape_class, cdev->dev, device, "%s", devname); class_simple_device_add(tape_class, cdev->dev, device, "%s", devname);
......
...@@ -1409,7 +1409,7 @@ sg_add(struct class_device *cl_dev) ...@@ -1409,7 +1409,7 @@ sg_add(struct class_device *cl_dev)
SCSI_LOG_TIMEOUT(3, printk("sg_add: dev=%d \n", k)); SCSI_LOG_TIMEOUT(3, printk("sg_add: dev=%d \n", k));
memset(sdp, 0, sizeof(*sdp)); memset(sdp, 0, sizeof(*sdp));
sprintf(disk->disk_name, "sg%d", k); sprintf(disk->disk_name, "sg%d", k);
strncpy(cdev->kobj.name, disk->disk_name, KOBJ_NAME_LEN); cdev_set_name(cdev, disk->disk_name);
cdev->owner = THIS_MODULE; cdev->owner = THIS_MODULE;
cdev->ops = &sg_fops; cdev->ops = &sg_fops;
disk->major = SCSI_GENERIC_MAJOR; disk->major = SCSI_GENERIC_MAJOR;
...@@ -1462,7 +1462,7 @@ sg_add(struct class_device *cl_dev) ...@@ -1462,7 +1462,7 @@ sg_add(struct class_device *cl_dev)
out: out:
put_disk(disk); put_disk(disk);
if (cdev) if (cdev)
kobject_put(&cdev->kobj); cdev_del(cdev);
return error; return error;
} }
......
...@@ -3888,8 +3888,7 @@ static int st_probe(struct device *dev) ...@@ -3888,8 +3888,7 @@ static int st_probe(struct device *dev)
dev_num); dev_num);
goto out_free_tape; goto out_free_tape;
} }
snprintf(cdev->kobj.name, KOBJ_NAME_LEN, "%sm%d%s", disk->disk_name, cdev_set_name(cdev, "%sm%d%s", disk->disk_name, mode, j ? "n" : "");
mode, j ? "n" : "");
cdev->owner = THIS_MODULE; cdev->owner = THIS_MODULE;
cdev->ops = &st_fops; cdev->ops = &st_fops;
...@@ -3944,7 +3943,7 @@ static int st_probe(struct device *dev) ...@@ -3944,7 +3943,7 @@ static int st_probe(struct device *dev)
} }
} }
if (cdev) if (cdev)
kobject_put(&cdev->kobj); cdev_del(cdev);
write_lock(&st_dev_arr_lock); write_lock(&st_dev_arr_lock);
scsi_tapes[dev_num] = NULL; scsi_tapes[dev_num] = NULL;
st_nr_dev--; st_nr_dev--;
......
...@@ -25,5 +25,7 @@ void cdev_del(struct cdev *); ...@@ -25,5 +25,7 @@ void cdev_del(struct cdev *);
void cd_forget(struct inode *); void cd_forget(struct inode *);
#define cdev_set_name(cdev, args...) kobject_set_name(&((cdev)->kobj), ##args)
#endif #endif
#endif #endif
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