Commit 310a2c1012934f590192377f65940cad4aa72b15
Committed by
Jens Axboe
1 parent
88e341261c
Exists in
master
and in
4 other branches
block: misc updates
This patch makes the following misc updates in preparation for disk->part dereference fix and extended block devt support. * implment part_to_disk() * fix comment about gendisk->part indexing * rename get_part() to disk_map_sector() * don't use n which is always zero while printing disk information in diskstats_show() Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Showing 5 changed files with 19 additions and 11 deletions Side-by-side Diff
block/blk-core.c
... | ... | @@ -60,7 +60,7 @@ |
60 | 60 | if (!blk_fs_request(rq) || !rq->rq_disk) |
61 | 61 | return; |
62 | 62 | |
63 | - part = get_part(rq->rq_disk, rq->sector); | |
63 | + part = disk_map_sector(rq->rq_disk, rq->sector); | |
64 | 64 | if (!new_io) |
65 | 65 | __all_stat_inc(rq->rq_disk, part, merges[rw], rq->sector); |
66 | 66 | else { |
... | ... | @@ -1557,7 +1557,8 @@ |
1557 | 1557 | } |
1558 | 1558 | |
1559 | 1559 | if (blk_fs_request(req) && req->rq_disk) { |
1560 | - struct hd_struct *part = get_part(req->rq_disk, req->sector); | |
1560 | + struct hd_struct *part = | |
1561 | + disk_map_sector(req->rq_disk, req->sector); | |
1561 | 1562 | const int rw = rq_data_dir(req); |
1562 | 1563 | |
1563 | 1564 | all_stat_add(req->rq_disk, part, sectors[rw], |
... | ... | @@ -1745,7 +1746,7 @@ |
1745 | 1746 | if (disk && blk_fs_request(req) && req != &req->q->bar_rq) { |
1746 | 1747 | unsigned long duration = jiffies - req->start_time; |
1747 | 1748 | const int rw = rq_data_dir(req); |
1748 | - struct hd_struct *part = get_part(disk, req->sector); | |
1749 | + struct hd_struct *part = disk_map_sector(disk, req->sector); | |
1749 | 1750 | |
1750 | 1751 | __all_stat_inc(disk, part, ios[rw], req->sector); |
1751 | 1752 | __all_stat_add(disk, part, ticks[rw], duration, req->sector); |
block/blk-merge.c
... | ... | @@ -387,8 +387,8 @@ |
387 | 387 | elv_merge_requests(q, req, next); |
388 | 388 | |
389 | 389 | if (req->rq_disk) { |
390 | - struct hd_struct *part | |
391 | - = get_part(req->rq_disk, req->sector); | |
390 | + struct hd_struct *part = | |
391 | + disk_map_sector(req->rq_disk, req->sector); | |
392 | 392 | disk_round_stats(req->rq_disk); |
393 | 393 | req->rq_disk->in_flight--; |
394 | 394 | if (part) { |
block/genhd.c
... | ... | @@ -568,7 +568,7 @@ |
568 | 568 | { |
569 | 569 | struct gendisk *gp = v; |
570 | 570 | char buf[BDEVNAME_SIZE]; |
571 | - int n = 0; | |
571 | + int n; | |
572 | 572 | |
573 | 573 | /* |
574 | 574 | if (&gp->dev.kobj.entry == block_class.devices.next) |
... | ... | @@ -582,7 +582,7 @@ |
582 | 582 | disk_round_stats(gp); |
583 | 583 | preempt_enable(); |
584 | 584 | seq_printf(s, "%4d %4d %s %lu %lu %llu %u %lu %lu %llu %u %u %u %u\n", |
585 | - gp->major, n + gp->first_minor, disk_name(gp, n, buf), | |
585 | + gp->major, gp->first_minor, disk_name(gp, 0, buf), | |
586 | 586 | disk_stat_read(gp, ios[0]), disk_stat_read(gp, merges[0]), |
587 | 587 | (unsigned long long)disk_stat_read(gp, sectors[0]), |
588 | 588 | jiffies_to_msecs(disk_stat_read(gp, ticks[0])), |
drivers/block/aoe/aoecmd.c
... | ... | @@ -757,7 +757,7 @@ |
757 | 757 | const int rw = bio_data_dir(bio); |
758 | 758 | struct hd_struct *part; |
759 | 759 | |
760 | - part = get_part(disk, sector); | |
760 | + part = disk_map_sector(disk, sector); | |
761 | 761 | all_stat_inc(disk, part, ios[rw], sector); |
762 | 762 | all_stat_add(disk, part, ticks[rw], duration, sector); |
763 | 763 | all_stat_add(disk, part, sectors[rw], n_sect, sector); |
include/linux/genhd.h
... | ... | @@ -116,7 +116,7 @@ |
116 | 116 | int minors; /* maximum number of minors, =1 for |
117 | 117 | * disks that can't be partitioned. */ |
118 | 118 | char disk_name[32]; /* name of major driver */ |
119 | - struct hd_struct **part; /* [indexed by minor] */ | |
119 | + struct hd_struct **part; /* [indexed by minor - 1] */ | |
120 | 120 | struct block_device_operations *fops; |
121 | 121 | struct request_queue *queue; |
122 | 122 | void *private_data; |
123 | 123 | |
... | ... | @@ -145,14 +145,21 @@ |
145 | 145 | #endif |
146 | 146 | }; |
147 | 147 | |
148 | +static inline struct gendisk *part_to_disk(struct hd_struct *part) | |
149 | +{ | |
150 | + if (likely(part)) | |
151 | + return dev_to_disk((part)->dev.parent); | |
152 | + return NULL; | |
153 | +} | |
154 | + | |
148 | 155 | /* |
149 | 156 | * Macros to operate on percpu disk statistics: |
150 | 157 | * |
151 | 158 | * The __ variants should only be called in critical sections. The full |
152 | 159 | * variants disable/enable preemption. |
153 | 160 | */ |
154 | -static inline struct hd_struct *get_part(struct gendisk *gendiskp, | |
155 | - sector_t sector) | |
161 | +static inline struct hd_struct *disk_map_sector(struct gendisk *gendiskp, | |
162 | + sector_t sector) | |
156 | 163 | { |
157 | 164 | struct hd_struct *part; |
158 | 165 | int i; |