mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-01 08:04:22 +08:00
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>
This commit is contained in:
parent
5a3ceb8616
commit
ac65ece4ee
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user