Commit 310a2c10 authored by Tejun Heo's avatar Tejun Heo Committed by Jens Axboe

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: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 88e34126
...@@ -60,7 +60,7 @@ static void drive_stat_acct(struct request *rq, int new_io) ...@@ -60,7 +60,7 @@ static void drive_stat_acct(struct request *rq, int new_io)
if (!blk_fs_request(rq) || !rq->rq_disk) if (!blk_fs_request(rq) || !rq->rq_disk)
return; return;
part = get_part(rq->rq_disk, rq->sector); part = disk_map_sector(rq->rq_disk, rq->sector);
if (!new_io) if (!new_io)
__all_stat_inc(rq->rq_disk, part, merges[rw], rq->sector); __all_stat_inc(rq->rq_disk, part, merges[rw], rq->sector);
else { else {
...@@ -1557,7 +1557,8 @@ static int __end_that_request_first(struct request *req, int error, ...@@ -1557,7 +1557,8 @@ static int __end_that_request_first(struct request *req, int error,
} }
if (blk_fs_request(req) && req->rq_disk) { if (blk_fs_request(req) && req->rq_disk) {
struct hd_struct *part = get_part(req->rq_disk, req->sector); struct hd_struct *part =
disk_map_sector(req->rq_disk, req->sector);
const int rw = rq_data_dir(req); const int rw = rq_data_dir(req);
all_stat_add(req->rq_disk, part, sectors[rw], all_stat_add(req->rq_disk, part, sectors[rw],
...@@ -1745,7 +1746,7 @@ static void end_that_request_last(struct request *req, int error) ...@@ -1745,7 +1746,7 @@ static void end_that_request_last(struct request *req, int error)
if (disk && blk_fs_request(req) && req != &req->q->bar_rq) { if (disk && blk_fs_request(req) && req != &req->q->bar_rq) {
unsigned long duration = jiffies - req->start_time; unsigned long duration = jiffies - req->start_time;
const int rw = rq_data_dir(req); const int rw = rq_data_dir(req);
struct hd_struct *part = get_part(disk, req->sector); struct hd_struct *part = disk_map_sector(disk, req->sector);
__all_stat_inc(disk, part, ios[rw], req->sector); __all_stat_inc(disk, part, ios[rw], req->sector);
__all_stat_add(disk, part, ticks[rw], duration, req->sector); __all_stat_add(disk, part, ticks[rw], duration, req->sector);
......
...@@ -387,8 +387,8 @@ static int attempt_merge(struct request_queue *q, struct request *req, ...@@ -387,8 +387,8 @@ static int attempt_merge(struct request_queue *q, struct request *req,
elv_merge_requests(q, req, next); elv_merge_requests(q, req, next);
if (req->rq_disk) { if (req->rq_disk) {
struct hd_struct *part struct hd_struct *part =
= get_part(req->rq_disk, req->sector); disk_map_sector(req->rq_disk, req->sector);
disk_round_stats(req->rq_disk); disk_round_stats(req->rq_disk);
req->rq_disk->in_flight--; req->rq_disk->in_flight--;
if (part) { if (part) {
......
...@@ -568,7 +568,7 @@ static int diskstats_show(struct seq_file *s, void *v) ...@@ -568,7 +568,7 @@ static int diskstats_show(struct seq_file *s, void *v)
{ {
struct gendisk *gp = v; struct gendisk *gp = v;
char buf[BDEVNAME_SIZE]; char buf[BDEVNAME_SIZE];
int n = 0; int n;
/* /*
if (&gp->dev.kobj.entry == block_class.devices.next) if (&gp->dev.kobj.entry == block_class.devices.next)
...@@ -582,7 +582,7 @@ static int diskstats_show(struct seq_file *s, void *v) ...@@ -582,7 +582,7 @@ static int diskstats_show(struct seq_file *s, void *v)
disk_round_stats(gp); disk_round_stats(gp);
preempt_enable(); preempt_enable();
seq_printf(s, "%4d %4d %s %lu %lu %llu %u %lu %lu %llu %u %u %u %u\n", seq_printf(s, "%4d %4d %s %lu %lu %llu %u %lu %lu %llu %u %u %u %u\n",
gp->major, n + gp->first_minor, disk_name(gp, n, buf), gp->major, gp->first_minor, disk_name(gp, 0, buf),
disk_stat_read(gp, ios[0]), disk_stat_read(gp, merges[0]), disk_stat_read(gp, ios[0]), disk_stat_read(gp, merges[0]),
(unsigned long long)disk_stat_read(gp, sectors[0]), (unsigned long long)disk_stat_read(gp, sectors[0]),
jiffies_to_msecs(disk_stat_read(gp, ticks[0])), jiffies_to_msecs(disk_stat_read(gp, ticks[0])),
......
...@@ -757,7 +757,7 @@ diskstats(struct gendisk *disk, struct bio *bio, ulong duration, sector_t sector ...@@ -757,7 +757,7 @@ diskstats(struct gendisk *disk, struct bio *bio, ulong duration, sector_t sector
const int rw = bio_data_dir(bio); const int rw = bio_data_dir(bio);
struct hd_struct *part; struct hd_struct *part;
part = get_part(disk, sector); part = disk_map_sector(disk, sector);
all_stat_inc(disk, part, ios[rw], sector); all_stat_inc(disk, part, ios[rw], sector);
all_stat_add(disk, part, ticks[rw], duration, sector); all_stat_add(disk, part, ticks[rw], duration, sector);
all_stat_add(disk, part, sectors[rw], n_sect, sector); all_stat_add(disk, part, sectors[rw], n_sect, sector);
......
...@@ -116,7 +116,7 @@ struct gendisk { ...@@ -116,7 +116,7 @@ struct gendisk {
int minors; /* maximum number of minors, =1 for int minors; /* maximum number of minors, =1 for
* disks that can't be partitioned. */ * disks that can't be partitioned. */
char disk_name[32]; /* name of major driver */ char disk_name[32]; /* name of major driver */
struct hd_struct **part; /* [indexed by minor] */ struct hd_struct **part; /* [indexed by minor - 1] */
struct block_device_operations *fops; struct block_device_operations *fops;
struct request_queue *queue; struct request_queue *queue;
void *private_data; void *private_data;
...@@ -145,14 +145,21 @@ struct gendisk { ...@@ -145,14 +145,21 @@ struct gendisk {
#endif #endif
}; };
static inline struct gendisk *part_to_disk(struct hd_struct *part)
{
if (likely(part))
return dev_to_disk((part)->dev.parent);
return NULL;
}
/* /*
* Macros to operate on percpu disk statistics: * Macros to operate on percpu disk statistics:
* *
* The __ variants should only be called in critical sections. The full * The __ variants should only be called in critical sections. The full
* variants disable/enable preemption. * variants disable/enable preemption.
*/ */
static inline struct hd_struct *get_part(struct gendisk *gendiskp, static inline struct hd_struct *disk_map_sector(struct gendisk *gendiskp,
sector_t sector) sector_t sector)
{ {
struct hd_struct *part; struct hd_struct *part;
int i; int i;
......
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