summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2008-08-25 19:30:12 +0900
committerJens Axboe <jens.axboe@oracle.com>2008-10-09 08:56:04 +0200
commitac65ece4eee10b03ac29ee925cadc179dc810bab (patch)
tree529f3a2c212aaa6aa5010c41aa9ec59bd6635c17
parent5a3ceb861663040f9ef0176df4aaa494bba5e352 (diff)
downloadlinux-stable-ac65ece4eee10b03ac29ee925cadc179dc810bab.tar.gz
linux-stable-ac65ece4eee10b03ac29ee925cadc179dc810bab.tar.bz2
linux-stable-ac65ece4eee10b03ac29ee925cadc179dc810bab.zip
block: fix partition info printouts
Recent block_class iteration updates 5c6f35c5..27f3025 broke partition info printouts. * printk_all_partitions(): Partition print out stops when it meets a partition hole. Partition printing inner loop should continue instead of exiting on empty partition slot. * /proc/partitions and /proc/diskstats: If all information can't be read in single read(), the information is truncated. This is because find_start() doesn't actually update the counter containing the initial seek. It runs to the end and ends up always reporting EOF on the second read. This patch fixes both problems. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Greg Kroah-Hartman <gregkh@suse.de> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r--block/genhd.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/block/genhd.c b/block/genhd.c
index c114a43052de..0be95135c404 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -236,7 +236,7 @@ static int printk_partition(struct device *dev, void *data)
int n;
if (dev->type != &disk_type)
- goto exit;
+ return 0;
sgp = dev_to_disk(dev);
/*
@@ -244,7 +244,7 @@ static int printk_partition(struct device *dev, void *data)
*/
if (get_capacity(sgp) == 0 ||
(sgp->flags & GENHD_FL_SUPPRESS_PARTITION_INFO))
- goto exit;
+ return 0;
/*
* Note, unlike /proc/partitions, I am showing the numbers in
@@ -264,15 +264,15 @@ static int printk_partition(struct device *dev, void *data)
/* now show the partitions */
for (n = 0; n < sgp->minors - 1; ++n) {
if (sgp->part[n] == NULL)
- goto exit;
+ continue;
if (sgp->part[n]->nr_sects == 0)
- goto exit;
+ continue;
printk(" %02x%02x %10llu %s\n",
sgp->major, n + 1 + sgp->first_minor,
(unsigned long long)sgp->part[n]->nr_sects >> 1,
disk_name(sgp, n + 1, buf));
}
-exit:
+
return 0;
}