X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fblock%2Fgenhd.c;h=c68215b35252c546775370b30d42ac978cca28e3;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=a0d7ef607b05c5360af9b9a562568d2595c4c4e1;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/drivers/block/genhd.c b/drivers/block/genhd.c index a0d7ef607..c68215b35 100644 --- a/drivers/block/genhd.c +++ b/drivers/block/genhd.c @@ -90,7 +90,7 @@ int register_blkdev(unsigned int major, const char *name) p->major = major; strlcpy(p->name, name, sizeof(p->name)); - p->next = 0; + p->next = NULL; index = major_to_index(major); spin_lock_irqsave(&major_names_lock, flags); @@ -352,24 +352,22 @@ static ssize_t disk_range_read(struct gendisk * disk, char *page) { return sprintf(page, "%d\n", disk->minors); } +static ssize_t disk_removable_read(struct gendisk * disk, char *page) +{ + return sprintf(page, "%d\n", + (disk->flags & GENHD_FL_REMOVABLE ? 1 : 0)); + +} static ssize_t disk_size_read(struct gendisk * disk, char *page) { return sprintf(page, "%llu\n", (unsigned long long)get_capacity(disk)); } -static inline unsigned jiffies_to_msec(unsigned jif) -{ -#if 1000 % HZ == 0 - return jif * (1000 / HZ); -#elif HZ % 1000 == 0 - return jif / (HZ / 1000); -#else - return (jif / HZ) * 1000 + (jif % HZ) * 1000 / HZ; -#endif -} static ssize_t disk_stats_read(struct gendisk * disk, char *page) { + preempt_disable(); disk_round_stats(disk); + preempt_enable(); return sprintf(page, "%8u %8u %8llu %8u " "%8u %8u %8llu %8u " @@ -377,14 +375,14 @@ static ssize_t disk_stats_read(struct gendisk * disk, char *page) "\n", disk_stat_read(disk, reads), disk_stat_read(disk, read_merges), (unsigned long long)disk_stat_read(disk, read_sectors), - jiffies_to_msec(disk_stat_read(disk, read_ticks)), + jiffies_to_msecs(disk_stat_read(disk, read_ticks)), disk_stat_read(disk, writes), disk_stat_read(disk, write_merges), (unsigned long long)disk_stat_read(disk, write_sectors), - jiffies_to_msec(disk_stat_read(disk, write_ticks)), + jiffies_to_msecs(disk_stat_read(disk, write_ticks)), disk->in_flight, - jiffies_to_msec(disk_stat_read(disk, io_ticks)), - jiffies_to_msec(disk_stat_read(disk, time_in_queue))); + jiffies_to_msecs(disk_stat_read(disk, io_ticks)), + jiffies_to_msecs(disk_stat_read(disk, time_in_queue))); } static struct disk_attribute disk_attr_dev = { .attr = {.name = "dev", .mode = S_IRUGO }, @@ -394,6 +392,10 @@ static struct disk_attribute disk_attr_range = { .attr = {.name = "range", .mode = S_IRUGO }, .show = disk_range_read }; +static struct disk_attribute disk_attr_removable = { + .attr = {.name = "removable", .mode = S_IRUGO }, + .show = disk_removable_read +}; static struct disk_attribute disk_attr_size = { .attr = {.name = "size", .mode = S_IRUGO }, .show = disk_size_read @@ -406,6 +408,7 @@ static struct disk_attribute disk_attr_stat = { static struct attribute * default_attrs[] = { &disk_attr_dev.attr, &disk_attr_range.attr, + &disk_attr_removable.attr, &disk_attr_size.attr, &disk_attr_stat.attr, NULL, @@ -493,18 +496,20 @@ static int diskstats_show(struct seq_file *s, void *v) "\n\n"); */ + preempt_disable(); disk_round_stats(gp); + preempt_enable(); seq_printf(s, "%4d %4d %s %u %u %llu %u %u %u %llu %u %u %u %u\n", gp->major, n + gp->first_minor, disk_name(gp, n, buf), disk_stat_read(gp, reads), disk_stat_read(gp, read_merges), (unsigned long long)disk_stat_read(gp, read_sectors), - jiffies_to_msec(disk_stat_read(gp, read_ticks)), + jiffies_to_msecs(disk_stat_read(gp, read_ticks)), disk_stat_read(gp, writes), disk_stat_read(gp, write_merges), (unsigned long long)disk_stat_read(gp, write_sectors), - jiffies_to_msec(disk_stat_read(gp, write_ticks)), + jiffies_to_msecs(disk_stat_read(gp, write_ticks)), gp->in_flight, - jiffies_to_msec(disk_stat_read(gp, io_ticks)), - jiffies_to_msec(disk_stat_read(gp, time_in_queue))); + jiffies_to_msecs(disk_stat_read(gp, io_ticks)), + jiffies_to_msecs(disk_stat_read(gp, time_in_queue))); /* now show all non-0 size partitions of it */ for (n = 0; n < gp->minors - 1; n++) {