diff options
author | Stephen Rothwell <sfr@canb.auug.org.au> | 2008-12-01 11:14:22 +1100 |
---|---|---|
committer | Stephen Rothwell <sfr@canb.auug.org.au> | 2008-12-01 11:14:22 +1100 |
commit | fe2c729b903a03f3a1fa448a7ea7c303726c1346 (patch) | |
tree | 20a0d92ea7a5c584ca7fd01e281e62e4fcc9341a /fs/char_dev.c | |
parent | 5ae15180975d9c7bfb5bd7d53a430d047efa0a46 (diff) | |
parent | 3a527f0233de893902300424ec2fd7c09dde6f2a (diff) |
Merge branch 'quilt/driver-core'
Conflicts:
drivers/mtd/maps/integrator-flash.c
Diffstat (limited to 'fs/char_dev.c')
-rw-r--r-- | fs/char_dev.c | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/fs/char_dev.c b/fs/char_dev.c index 700697a72618..5ce907c4364f 100644 --- a/fs/char_dev.c +++ b/fs/char_dev.c @@ -482,26 +482,22 @@ void cdev_del(struct cdev *p) } -static void cdev_default_release(struct kobject *kobj) +static void cdev_release(struct kobject *kobj) { struct cdev *p = container_of(kobj, struct cdev, kobj); cdev_purge(p); + if (p->release) + p->release(p); } -static void cdev_dynamic_release(struct kobject *kobj) -{ - struct cdev *p = container_of(kobj, struct cdev, kobj); - cdev_purge(p); - kfree(p); -} - -static struct kobj_type ktype_cdev_default = { - .release = cdev_default_release, +static struct kobj_type cdev_ktype = { + .release = cdev_release, }; -static struct kobj_type ktype_cdev_dynamic = { - .release = cdev_dynamic_release, -}; +static void cdev_alloc_release(struct cdev *cdev) +{ + kfree(cdev); +} /** * cdev_alloc() - allocate a cdev structure @@ -510,10 +506,10 @@ static struct kobj_type ktype_cdev_dynamic = { */ struct cdev *cdev_alloc(void) { - struct cdev *p = kzalloc(sizeof(struct cdev), GFP_KERNEL); + struct cdev *p = kmalloc(sizeof(struct cdev), GFP_KERNEL); if (p) { - INIT_LIST_HEAD(&p->list); - kobject_init(&p->kobj, &ktype_cdev_dynamic); + cdev_init(p, NULL); + p->release = cdev_alloc_release; } return p; } @@ -530,7 +526,7 @@ void cdev_init(struct cdev *cdev, const struct file_operations *fops) { memset(cdev, 0, sizeof *cdev); INIT_LIST_HEAD(&cdev->list); - kobject_init(&cdev->kobj, &ktype_cdev_default); + kobject_init(&cdev->kobj, &cdev_ktype); cdev->ops = fops; } |