Commit ed9e1982347b36573cd622ee5f4e2a7ccd79b3fd
Committed by
Jens Axboe
1 parent
870d665612
Exists in
master
and in
4 other branches
block: implement and use {disk|part}_to_dev()
Implement {disk|part}_to_dev() and use them to access generic device instead of directly dereferencing {disk|part}->dev. To make sure no user is left behind, rename generic devices fields to __dev. This is in preparation of unifying partition 0 handling with other partitions. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Showing 11 changed files with 86 additions and 77 deletions Side-by-side Diff
block/blk-integrity.c
... | ... | @@ -331,7 +331,8 @@ |
331 | 331 | return -1; |
332 | 332 | |
333 | 333 | if (kobject_init_and_add(&bi->kobj, &integrity_ktype, |
334 | - &disk->dev.kobj, "%s", "integrity")) { | |
334 | + &disk_to_dev(disk)->kobj, | |
335 | + "%s", "integrity")) { | |
335 | 336 | kmem_cache_free(integrity_cachep, bi); |
336 | 337 | return -1; |
337 | 338 | } |
... | ... | @@ -375,7 +376,7 @@ |
375 | 376 | |
376 | 377 | kobject_uevent(&bi->kobj, KOBJ_REMOVE); |
377 | 378 | kobject_del(&bi->kobj); |
378 | - kobject_put(&disk->dev.kobj); | |
379 | + kobject_put(&disk_to_dev(disk)->kobj); | |
379 | 380 | kmem_cache_free(integrity_cachep, bi); |
380 | 381 | } |
381 | 382 | EXPORT_SYMBOL(blk_integrity_unregister); |
block/blk-sysfs.c
... | ... | @@ -310,7 +310,7 @@ |
310 | 310 | if (!q->request_fn) |
311 | 311 | return 0; |
312 | 312 | |
313 | - ret = kobject_add(&q->kobj, kobject_get(&disk->dev.kobj), | |
313 | + ret = kobject_add(&q->kobj, kobject_get(&disk_to_dev(disk)->kobj), | |
314 | 314 | "%s", "queue"); |
315 | 315 | if (ret < 0) |
316 | 316 | return ret; |
... | ... | @@ -339,7 +339,7 @@ |
339 | 339 | |
340 | 340 | kobject_uevent(&q->kobj, KOBJ_REMOVE); |
341 | 341 | kobject_del(&q->kobj); |
342 | - kobject_put(&disk->dev.kobj); | |
342 | + kobject_put(&disk_to_dev(disk)->kobj); | |
343 | 343 | } |
344 | 344 | } |
block/genhd.c
... | ... | @@ -59,7 +59,7 @@ |
59 | 59 | rcu_read_lock(); |
60 | 60 | part = rcu_dereference(disk->__part[partno - 1]); |
61 | 61 | if (part) |
62 | - get_device(&part->dev); | |
62 | + get_device(part_to_dev(part)); | |
63 | 63 | rcu_read_unlock(); |
64 | 64 | |
65 | 65 | return part; |
... | ... | @@ -130,7 +130,7 @@ |
130 | 130 | if (!(piter->flags & DISK_PITER_INCL_EMPTY) && !part->nr_sects) |
131 | 131 | continue; |
132 | 132 | |
133 | - get_device(&part->dev); | |
133 | + get_device(part_to_dev(part)); | |
134 | 134 | piter->part = part; |
135 | 135 | piter->idx += inc; |
136 | 136 | break; |
... | ... | @@ -435,7 +435,7 @@ |
435 | 435 | { |
436 | 436 | struct gendisk *p = data; |
437 | 437 | |
438 | - return &p->dev.kobj; | |
438 | + return &disk_to_dev(p)->kobj; | |
439 | 439 | } |
440 | 440 | |
441 | 441 | static int exact_lock(dev_t devt, void *data) |
... | ... | @@ -460,7 +460,7 @@ |
460 | 460 | int retval; |
461 | 461 | |
462 | 462 | disk->flags |= GENHD_FL_UP; |
463 | - disk->dev.devt = MKDEV(disk->major, disk->first_minor); | |
463 | + disk_to_dev(disk)->devt = MKDEV(disk->major, disk->first_minor); | |
464 | 464 | blk_register_region(disk_devt(disk), disk->minors, NULL, |
465 | 465 | exact_match, exact_lock, disk); |
466 | 466 | register_disk(disk); |
... | ... | @@ -468,7 +468,8 @@ |
468 | 468 | |
469 | 469 | bdi = &disk->queue->backing_dev_info; |
470 | 470 | bdi_register_dev(bdi, disk_devt(disk)); |
471 | - retval = sysfs_create_link(&disk->dev.kobj, &bdi->dev->kobj, "bdi"); | |
471 | + retval = sysfs_create_link(&disk_to_dev(disk)->kobj, &bdi->dev->kobj, | |
472 | + "bdi"); | |
472 | 473 | WARN_ON(retval); |
473 | 474 | } |
474 | 475 | |
... | ... | @@ -477,7 +478,7 @@ |
477 | 478 | |
478 | 479 | void unlink_gendisk(struct gendisk *disk) |
479 | 480 | { |
480 | - sysfs_remove_link(&disk->dev.kobj, "bdi"); | |
481 | + sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi"); | |
481 | 482 | bdi_unregister(&disk->queue->backing_dev_info); |
482 | 483 | blk_unregister_queue(disk); |
483 | 484 | blk_unregister_region(disk_devt(disk), disk->minors); |
... | ... | @@ -903,7 +904,7 @@ |
903 | 904 | int cpu; |
904 | 905 | |
905 | 906 | /* |
906 | - if (&gp->dev.kobj.entry == block_class.devices.next) | |
907 | + if (&disk_to_dev(gp)->kobj.entry == block_class.devices.next) | |
907 | 908 | seq_puts(seqf, "major minor name" |
908 | 909 | " rio rmerge rsect ruse wio wmerge " |
909 | 910 | "wsect wuse running use aveq" |
... | ... | @@ -972,7 +973,7 @@ |
972 | 973 | * set enviroment vars to indicate which event this is for |
973 | 974 | * so that user space will know to go check the media status. |
974 | 975 | */ |
975 | - kobject_uevent_env(&gd->dev.kobj, KOBJ_CHANGE, envp); | |
976 | + kobject_uevent_env(&disk_to_dev(gd)->kobj, KOBJ_CHANGE, envp); | |
976 | 977 | put_device(gd->driverfs_dev); |
977 | 978 | } |
978 | 979 | |
... | ... | @@ -1062,9 +1063,9 @@ |
1062 | 1063 | disk->minors = minors; |
1063 | 1064 | disk->ext_minors = ext_minors; |
1064 | 1065 | rand_initialize_disk(disk); |
1065 | - disk->dev.class = &block_class; | |
1066 | - disk->dev.type = &disk_type; | |
1067 | - device_initialize(&disk->dev); | |
1066 | + disk_to_dev(disk)->class = &block_class; | |
1067 | + disk_to_dev(disk)->type = &disk_type; | |
1068 | + device_initialize(disk_to_dev(disk)); | |
1068 | 1069 | INIT_WORK(&disk->async_notify, |
1069 | 1070 | media_change_notify_thread); |
1070 | 1071 | } |
... | ... | @@ -1086,7 +1087,7 @@ |
1086 | 1087 | owner = disk->fops->owner; |
1087 | 1088 | if (owner && !try_module_get(owner)) |
1088 | 1089 | return NULL; |
1089 | - kobj = kobject_get(&disk->dev.kobj); | |
1090 | + kobj = kobject_get(&disk_to_dev(disk)->kobj); | |
1090 | 1091 | if (kobj == NULL) { |
1091 | 1092 | module_put(owner); |
1092 | 1093 | return NULL; |
... | ... | @@ -1100,7 +1101,7 @@ |
1100 | 1101 | void put_disk(struct gendisk *disk) |
1101 | 1102 | { |
1102 | 1103 | if (disk) |
1103 | - kobject_put(&disk->dev.kobj); | |
1104 | + kobject_put(&disk_to_dev(disk)->kobj); | |
1104 | 1105 | } |
1105 | 1106 | |
1106 | 1107 | EXPORT_SYMBOL(put_disk); |
drivers/block/aoe/aoeblk.c
... | ... | @@ -109,12 +109,12 @@ |
109 | 109 | static int |
110 | 110 | aoedisk_add_sysfs(struct aoedev *d) |
111 | 111 | { |
112 | - return sysfs_create_group(&d->gd->dev.kobj, &attr_group); | |
112 | + return sysfs_create_group(&disk_to_dev(d->gd)->kobj, &attr_group); | |
113 | 113 | } |
114 | 114 | void |
115 | 115 | aoedisk_rm_sysfs(struct aoedev *d) |
116 | 116 | { |
117 | - sysfs_remove_group(&d->gd->dev.kobj, &attr_group); | |
117 | + sysfs_remove_group(&disk_to_dev(d->gd)->kobj, &attr_group); | |
118 | 118 | } |
119 | 119 | |
120 | 120 | static int |
drivers/block/nbd.c
... | ... | @@ -403,7 +403,7 @@ |
403 | 403 | BUG_ON(lo->magic != LO_MAGIC); |
404 | 404 | |
405 | 405 | lo->pid = current->pid; |
406 | - ret = sysfs_create_file(&lo->disk->dev.kobj, &pid_attr.attr); | |
406 | + ret = sysfs_create_file(&disk_to_dev(lo->disk)->kobj, &pid_attr.attr); | |
407 | 407 | if (ret) { |
408 | 408 | printk(KERN_ERR "nbd: sysfs_create_file failed!"); |
409 | 409 | return ret; |
... | ... | @@ -412,7 +412,7 @@ |
412 | 412 | while ((req = nbd_read_stat(lo)) != NULL) |
413 | 413 | nbd_end_request(req); |
414 | 414 | |
415 | - sysfs_remove_file(&lo->disk->dev.kobj, &pid_attr.attr); | |
415 | + sysfs_remove_file(&disk_to_dev(lo->disk)->kobj, &pid_attr.attr); | |
416 | 416 | return 0; |
417 | 417 | } |
418 | 418 |
drivers/ide/ide-probe.c
drivers/md/dm.c
... | ... | @@ -1186,7 +1186,7 @@ |
1186 | 1186 | list_splice_init(&md->uevent_list, &uevents); |
1187 | 1187 | spin_unlock_irqrestore(&md->uevent_lock, flags); |
1188 | 1188 | |
1189 | - dm_send_uevents(&uevents, &md->disk->dev.kobj); | |
1189 | + dm_send_uevents(&uevents, &disk_to_dev(md->disk)->kobj); | |
1190 | 1190 | |
1191 | 1191 | atomic_inc(&md->event_nr); |
1192 | 1192 | wake_up(&md->eventq); |
... | ... | @@ -1643,7 +1643,7 @@ |
1643 | 1643 | *---------------------------------------------------------------*/ |
1644 | 1644 | void dm_kobject_uevent(struct mapped_device *md) |
1645 | 1645 | { |
1646 | - kobject_uevent(&md->disk->dev.kobj, KOBJ_CHANGE); | |
1646 | + kobject_uevent(&disk_to_dev(md->disk)->kobj, KOBJ_CHANGE); | |
1647 | 1647 | } |
1648 | 1648 | |
1649 | 1649 | uint32_t dm_next_uevent_seq(struct mapped_device *md) |
drivers/md/md.c
... | ... | @@ -1465,9 +1465,9 @@ |
1465 | 1465 | goto fail; |
1466 | 1466 | |
1467 | 1467 | if (rdev->bdev->bd_part) |
1468 | - ko = &rdev->bdev->bd_part->dev.kobj; | |
1468 | + ko = &part_to_dev(rdev->bdev->bd_part)->kobj; | |
1469 | 1469 | else |
1470 | - ko = &rdev->bdev->bd_disk->dev.kobj; | |
1470 | + ko = &disk_to_dev(rdev->bdev->bd_disk)->kobj; | |
1471 | 1471 | if ((err = sysfs_create_link(&rdev->kobj, ko, "block"))) { |
1472 | 1472 | kobject_del(&rdev->kobj); |
1473 | 1473 | goto fail; |
... | ... | @@ -3470,8 +3470,8 @@ |
3470 | 3470 | disk->queue = mddev->queue; |
3471 | 3471 | add_disk(disk); |
3472 | 3472 | mddev->gendisk = disk; |
3473 | - error = kobject_init_and_add(&mddev->kobj, &md_ktype, &disk->dev.kobj, | |
3474 | - "%s", "md"); | |
3473 | + error = kobject_init_and_add(&mddev->kobj, &md_ktype, | |
3474 | + &disk_to_dev(disk)->kobj, "%s", "md"); | |
3475 | 3475 | mutex_unlock(&disks_mutex); |
3476 | 3476 | if (error) |
3477 | 3477 | printk(KERN_WARNING "md: cannot register %s/md - name in use\n", |
... | ... | @@ -3761,7 +3761,7 @@ |
3761 | 3761 | sysfs_notify(&mddev->kobj, NULL, "array_state"); |
3762 | 3762 | sysfs_notify(&mddev->kobj, NULL, "sync_action"); |
3763 | 3763 | sysfs_notify(&mddev->kobj, NULL, "degraded"); |
3764 | - kobject_uevent(&mddev->gendisk->dev.kobj, KOBJ_CHANGE); | |
3764 | + kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE); | |
3765 | 3765 | return 0; |
3766 | 3766 | } |
3767 | 3767 |
fs/block_dev.c
... | ... | @@ -543,9 +543,9 @@ |
543 | 543 | static struct kobject *bdev_get_kobj(struct block_device *bdev) |
544 | 544 | { |
545 | 545 | if (bdev->bd_contains != bdev) |
546 | - return kobject_get(&bdev->bd_part->dev.kobj); | |
546 | + return kobject_get(&part_to_dev(bdev->bd_part)->kobj); | |
547 | 547 | else |
548 | - return kobject_get(&bdev->bd_disk->dev.kobj); | |
548 | + return kobject_get(&disk_to_dev(bdev->bd_disk)->kobj); | |
549 | 549 | } |
550 | 550 | |
551 | 551 | static struct kobject *bdev_get_holder(struct block_device *bdev) |
fs/partitions/check.c
... | ... | @@ -309,7 +309,7 @@ |
309 | 309 | { |
310 | 310 | struct kobject *k; |
311 | 311 | |
312 | - k = kobject_get(&disk->dev.kobj); | |
312 | + k = kobject_get(&disk_to_dev(disk)->kobj); | |
313 | 313 | disk->holder_dir = kobject_create_and_add("holders", k); |
314 | 314 | disk->slave_dir = kobject_create_and_add("slaves", k); |
315 | 315 | kobject_put(k); |
... | ... | @@ -322,7 +322,7 @@ |
322 | 322 | part->start_sect = 0; |
323 | 323 | part->nr_sects = 0; |
324 | 324 | part_stat_set_all(part, 0); |
325 | - put_device(&part->dev); | |
325 | + put_device(part_to_dev(part)); | |
326 | 326 | } |
327 | 327 | |
328 | 328 | void delete_partition(struct gendisk *disk, int partno) |
... | ... | @@ -336,7 +336,7 @@ |
336 | 336 | blk_free_devt(part_devt(part)); |
337 | 337 | rcu_assign_pointer(disk->__part[partno-1], NULL); |
338 | 338 | kobject_put(part->holder_dir); |
339 | - device_del(&part->dev); | |
339 | + device_del(part_to_dev(part)); | |
340 | 340 | |
341 | 341 | call_rcu(&part->rcu_head, delete_partition_rcu_cb); |
342 | 342 | } |
... | ... | @@ -354,6 +354,9 @@ |
354 | 354 | { |
355 | 355 | struct hd_struct *p; |
356 | 356 | dev_t devt = MKDEV(0, 0); |
357 | + struct device *ddev = disk_to_dev(disk); | |
358 | + struct device *pdev; | |
359 | + const char *dname; | |
357 | 360 | int err; |
358 | 361 | |
359 | 362 | if (disk->__part[partno - 1]) |
360 | 363 | |
361 | 364 | |
362 | 365 | |
363 | 366 | |
364 | 367 | |
365 | 368 | |
366 | 369 | |
367 | 370 | |
... | ... | @@ -367,42 +370,43 @@ |
367 | 370 | err = -ENOMEM; |
368 | 371 | goto out_free; |
369 | 372 | } |
373 | + pdev = part_to_dev(p); | |
374 | + | |
370 | 375 | p->start_sect = start; |
371 | 376 | p->nr_sects = len; |
372 | 377 | p->partno = partno; |
373 | 378 | p->policy = disk->policy; |
374 | 379 | |
375 | - if (isdigit(disk->dev.bus_id[strlen(disk->dev.bus_id)-1])) | |
376 | - snprintf(p->dev.bus_id, BUS_ID_SIZE, | |
377 | - "%sp%d", disk->dev.bus_id, partno); | |
380 | + dname = dev_name(ddev); | |
381 | + if (isdigit(dname[strlen(dname) - 1])) | |
382 | + snprintf(pdev->bus_id, BUS_ID_SIZE, "%sp%d", dname, partno); | |
378 | 383 | else |
379 | - snprintf(p->dev.bus_id, BUS_ID_SIZE, | |
380 | - "%s%d", disk->dev.bus_id, partno); | |
384 | + snprintf(pdev->bus_id, BUS_ID_SIZE, "%s%d", dname, partno); | |
381 | 385 | |
382 | - device_initialize(&p->dev); | |
383 | - p->dev.class = &block_class; | |
384 | - p->dev.type = &part_type; | |
385 | - p->dev.parent = &disk->dev; | |
386 | + device_initialize(pdev); | |
387 | + pdev->class = &block_class; | |
388 | + pdev->type = &part_type; | |
389 | + pdev->parent = ddev; | |
386 | 390 | |
387 | 391 | err = blk_alloc_devt(p, &devt); |
388 | 392 | if (err) |
389 | - goto out_put; | |
390 | - p->dev.devt = devt; | |
393 | + goto out_free; | |
394 | + pdev->devt = devt; | |
391 | 395 | |
392 | 396 | /* delay uevent until 'holders' subdir is created */ |
393 | - p->dev.uevent_suppress = 1; | |
394 | - err = device_add(&p->dev); | |
397 | + pdev->uevent_suppress = 1; | |
398 | + err = device_add(pdev); | |
395 | 399 | if (err) |
396 | 400 | goto out_put; |
397 | 401 | |
398 | 402 | err = -ENOMEM; |
399 | - p->holder_dir = kobject_create_and_add("holders", &p->dev.kobj); | |
403 | + p->holder_dir = kobject_create_and_add("holders", &pdev->kobj); | |
400 | 404 | if (!p->holder_dir) |
401 | 405 | goto out_del; |
402 | 406 | |
403 | - p->dev.uevent_suppress = 0; | |
407 | + pdev->uevent_suppress = 0; | |
404 | 408 | if (flags & ADDPART_FLAG_WHOLEDISK) { |
405 | - err = device_create_file(&p->dev, &dev_attr_whole_disk); | |
409 | + err = device_create_file(pdev, &dev_attr_whole_disk); | |
406 | 410 | if (err) |
407 | 411 | goto out_del; |
408 | 412 | } |
... | ... | @@ -412,8 +416,8 @@ |
412 | 416 | rcu_assign_pointer(disk->__part[partno - 1], p); |
413 | 417 | |
414 | 418 | /* suppress uevent if the disk supresses it */ |
415 | - if (!disk->dev.uevent_suppress) | |
416 | - kobject_uevent(&p->dev.kobj, KOBJ_ADD); | |
419 | + if (!ddev->uevent_suppress) | |
420 | + kobject_uevent(&pdev->kobj, KOBJ_ADD); | |
417 | 421 | |
418 | 422 | return 0; |
419 | 423 | |
420 | 424 | |
... | ... | @@ -422,9 +426,9 @@ |
422 | 426 | return err; |
423 | 427 | out_del: |
424 | 428 | kobject_put(p->holder_dir); |
425 | - device_del(&p->dev); | |
429 | + device_del(pdev); | |
426 | 430 | out_put: |
427 | - put_device(&p->dev); | |
431 | + put_device(pdev); | |
428 | 432 | blk_free_devt(devt); |
429 | 433 | return err; |
430 | 434 | } |
431 | 435 | |
432 | 436 | |
433 | 437 | |
434 | 438 | |
435 | 439 | |
436 | 440 | |
437 | 441 | |
... | ... | @@ -432,30 +436,31 @@ |
432 | 436 | /* Not exported, helper to add_disk(). */ |
433 | 437 | void register_disk(struct gendisk *disk) |
434 | 438 | { |
439 | + struct device *ddev = disk_to_dev(disk); | |
435 | 440 | struct block_device *bdev; |
436 | 441 | struct disk_part_iter piter; |
437 | 442 | struct hd_struct *part; |
438 | 443 | char *s; |
439 | 444 | int err; |
440 | 445 | |
441 | - disk->dev.parent = disk->driverfs_dev; | |
446 | + ddev->parent = disk->driverfs_dev; | |
442 | 447 | |
443 | - strlcpy(disk->dev.bus_id, disk->disk_name, BUS_ID_SIZE); | |
448 | + strlcpy(ddev->bus_id, disk->disk_name, BUS_ID_SIZE); | |
444 | 449 | /* ewww... some of these buggers have / in the name... */ |
445 | - s = strchr(disk->dev.bus_id, '/'); | |
450 | + s = strchr(ddev->bus_id, '/'); | |
446 | 451 | if (s) |
447 | 452 | *s = '!'; |
448 | 453 | |
449 | 454 | /* delay uevents, until we scanned partition table */ |
450 | - disk->dev.uevent_suppress = 1; | |
455 | + ddev->uevent_suppress = 1; | |
451 | 456 | |
452 | - if (device_add(&disk->dev)) | |
457 | + if (device_add(ddev)) | |
453 | 458 | return; |
454 | 459 | #ifndef CONFIG_SYSFS_DEPRECATED |
455 | - err = sysfs_create_link(block_depr, &disk->dev.kobj, | |
456 | - kobject_name(&disk->dev.kobj)); | |
460 | + err = sysfs_create_link(block_depr, &ddev->kobj, | |
461 | + kobject_name(&ddev->kobj)); | |
457 | 462 | if (err) { |
458 | - device_del(&disk->dev); | |
463 | + device_del(ddev); | |
459 | 464 | return; |
460 | 465 | } |
461 | 466 | #endif |
462 | 467 | |
... | ... | @@ -481,13 +486,13 @@ |
481 | 486 | |
482 | 487 | exit: |
483 | 488 | /* announce disk after possible partitions are created */ |
484 | - disk->dev.uevent_suppress = 0; | |
485 | - kobject_uevent(&disk->dev.kobj, KOBJ_ADD); | |
489 | + ddev->uevent_suppress = 0; | |
490 | + kobject_uevent(&ddev->kobj, KOBJ_ADD); | |
486 | 491 | |
487 | 492 | /* announce possible partitions */ |
488 | 493 | disk_part_iter_init(&piter, disk, 0); |
489 | 494 | while ((part = disk_part_iter_next(&piter))) |
490 | - kobject_uevent(&part->dev.kobj, KOBJ_ADD); | |
495 | + kobject_uevent(&part_to_dev(part)->kobj, KOBJ_ADD); | |
491 | 496 | disk_part_iter_exit(&piter); |
492 | 497 | } |
493 | 498 | |
... | ... | @@ -518,7 +523,7 @@ |
518 | 523 | return -EIO; |
519 | 524 | |
520 | 525 | /* tell userspace that the media / partition table may have changed */ |
521 | - kobject_uevent(&disk->dev.kobj, KOBJ_CHANGE); | |
526 | + kobject_uevent(&disk_to_dev(disk)->kobj, KOBJ_CHANGE); | |
522 | 527 | |
523 | 528 | for (p = 1; p < state->limit; p++) { |
524 | 529 | sector_t size = state->parts[p].size; |
525 | 530 | |
... | ... | @@ -591,8 +596,8 @@ |
591 | 596 | kobject_put(disk->slave_dir); |
592 | 597 | disk->driverfs_dev = NULL; |
593 | 598 | #ifndef CONFIG_SYSFS_DEPRECATED |
594 | - sysfs_remove_link(block_depr, disk->dev.bus_id); | |
599 | + sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk))); | |
595 | 600 | #endif |
596 | - device_del(&disk->dev); | |
601 | + device_del(disk_to_dev(disk)); | |
597 | 602 | } |
include/linux/genhd.h
... | ... | @@ -15,9 +15,11 @@ |
15 | 15 | |
16 | 16 | #ifdef CONFIG_BLOCK |
17 | 17 | |
18 | -#define kobj_to_dev(k) container_of(k, struct device, kobj) | |
19 | -#define dev_to_disk(device) container_of(device, struct gendisk, dev) | |
20 | -#define dev_to_part(device) container_of(device, struct hd_struct, dev) | |
18 | +#define kobj_to_dev(k) container_of((k), struct device, kobj) | |
19 | +#define dev_to_disk(device) container_of((device), struct gendisk, __dev) | |
20 | +#define dev_to_part(device) container_of((device), struct hd_struct, __dev) | |
21 | +#define disk_to_dev(disk) (&((disk)->__dev)) | |
22 | +#define part_to_dev(part) (&((part)->__dev)) | |
21 | 23 | |
22 | 24 | extern struct device_type part_type; |
23 | 25 | extern struct kobject *block_depr; |
... | ... | @@ -88,7 +90,7 @@ |
88 | 90 | struct hd_struct { |
89 | 91 | sector_t start_sect; |
90 | 92 | sector_t nr_sects; |
91 | - struct device dev; | |
93 | + struct device __dev; | |
92 | 94 | struct kobject *holder_dir; |
93 | 95 | int policy, partno; |
94 | 96 | #ifdef CONFIG_FAIL_MAKE_REQUEST |
... | ... | @@ -139,7 +141,7 @@ |
139 | 141 | |
140 | 142 | int flags; |
141 | 143 | struct device *driverfs_dev; // FIXME: remove |
142 | - struct device dev; | |
144 | + struct device __dev; | |
143 | 145 | struct kobject *holder_dir; |
144 | 146 | struct kobject *slave_dir; |
145 | 147 | |
... | ... | @@ -163,7 +165,7 @@ |
163 | 165 | static inline struct gendisk *part_to_disk(struct hd_struct *part) |
164 | 166 | { |
165 | 167 | if (likely(part)) |
166 | - return dev_to_disk((part)->dev.parent); | |
168 | + return dev_to_disk(part_to_dev(part)->parent); | |
167 | 169 | return NULL; |
168 | 170 | } |
169 | 171 | |
170 | 172 | |
... | ... | @@ -174,12 +176,12 @@ |
174 | 176 | |
175 | 177 | static inline dev_t disk_devt(struct gendisk *disk) |
176 | 178 | { |
177 | - return disk->dev.devt; | |
179 | + return disk_to_dev(disk)->devt; | |
178 | 180 | } |
179 | 181 | |
180 | 182 | static inline dev_t part_devt(struct hd_struct *part) |
181 | 183 | { |
182 | - return part->dev.devt; | |
184 | + return part_to_dev(part)->devt; | |
183 | 185 | } |
184 | 186 | |
185 | 187 | extern struct hd_struct *disk_get_part(struct gendisk *disk, int partno); |
... | ... | @@ -187,7 +189,7 @@ |
187 | 189 | static inline void disk_put_part(struct hd_struct *part) |
188 | 190 | { |
189 | 191 | if (likely(part)) |
190 | - put_device(&part->dev); | |
192 | + put_device(part_to_dev(part)); | |
191 | 193 | } |
192 | 194 | |
193 | 195 | /* |