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>
This commit is contained in:
parent
88e341261c
commit
310a2c1012
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
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,
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
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
|
||||||
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 {
|
||||||
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 {
|
||||||
#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;
|
||||||
|
|
Reference in New Issue