aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block/genhd.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/block/genhd.c b/block/genhd.c
index 70f1d7075783..c13cc77291af 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -317,17 +317,21 @@ static void *part_start(struct seq_file *part, loff_t *pos)
317 return NULL; 317 return NULL;
318} 318}
319 319
320static int find_next(struct device *dev, void *data)
321{
322 if (dev->type == &disk_type)
323 return 1;
324 return 0;
325}
326
320static void *part_next(struct seq_file *part, void *v, loff_t *pos) 327static void *part_next(struct seq_file *part, void *v, loff_t *pos)
321{ 328{
322 struct gendisk *gp = v; 329 struct gendisk *gp = v;
323 struct device *dev; 330 struct device *dev;
324 ++*pos; 331 ++*pos;
325 list_for_each_entry(dev, &gp->dev.node, node) { 332 dev = class_find_device(&block_class, &gp->dev, NULL, find_next);
326 if (&dev->node == &block_class.devices) 333 if (dev)
327 return NULL; 334 return dev_to_disk(dev);
328 if (dev->type == &disk_type)
329 return dev_to_disk(dev);
330 }
331 return NULL; 335 return NULL;
332} 336}
333 337
@@ -578,12 +582,9 @@ static void *diskstats_next(struct seq_file *part, void *v, loff_t *pos)
578 struct device *dev; 582 struct device *dev;
579 583
580 ++*pos; 584 ++*pos;
581 list_for_each_entry(dev, &gp->dev.node, node) { 585 dev = class_find_device(&block_class, &gp->dev, NULL, find_next);
582 if (&dev->node == &block_class.devices) 586 if (dev)
583 return NULL; 587 return dev_to_disk(dev);
584 if (dev->type == &disk_type)
585 return dev_to_disk(dev);
586 }
587 return NULL; 588 return NULL;
588} 589}
589 590