Commit 0470dd9d authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

block: remove DISK_PITER_REVERSE

There is good reason to iterate backwards when deleting all partitions in
del_gendisk, just like we don't in blk_drop_partitions.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Acked-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent bc359d03
...@@ -184,24 +184,13 @@ static struct block_device *__disk_get_part(struct gendisk *disk, int partno) ...@@ -184,24 +184,13 @@ static struct block_device *__disk_get_part(struct gendisk *disk, int partno)
void disk_part_iter_init(struct disk_part_iter *piter, struct gendisk *disk, void disk_part_iter_init(struct disk_part_iter *piter, struct gendisk *disk,
unsigned int flags) unsigned int flags)
{ {
struct disk_part_tbl *ptbl;
rcu_read_lock();
ptbl = rcu_dereference(disk->part_tbl);
piter->disk = disk; piter->disk = disk;
piter->part = NULL; piter->part = NULL;
if (flags & (DISK_PITER_INCL_PART0 | DISK_PITER_INCL_EMPTY_PART0))
if (flags & DISK_PITER_REVERSE)
piter->idx = ptbl->len - 1;
else if (flags & (DISK_PITER_INCL_PART0 | DISK_PITER_INCL_EMPTY_PART0))
piter->idx = 0; piter->idx = 0;
else else
piter->idx = 1; piter->idx = 1;
piter->flags = flags; piter->flags = flags;
rcu_read_unlock();
} }
/** /**
...@@ -216,7 +205,6 @@ void disk_part_iter_init(struct disk_part_iter *piter, struct gendisk *disk, ...@@ -216,7 +205,6 @@ void disk_part_iter_init(struct disk_part_iter *piter, struct gendisk *disk,
struct block_device *disk_part_iter_next(struct disk_part_iter *piter) struct block_device *disk_part_iter_next(struct disk_part_iter *piter)
{ {
struct disk_part_tbl *ptbl; struct disk_part_tbl *ptbl;
int inc, end;
/* put the last partition */ /* put the last partition */
disk_part_iter_exit(piter); disk_part_iter_exit(piter);
...@@ -225,21 +213,8 @@ struct block_device *disk_part_iter_next(struct disk_part_iter *piter) ...@@ -225,21 +213,8 @@ struct block_device *disk_part_iter_next(struct disk_part_iter *piter)
rcu_read_lock(); rcu_read_lock();
ptbl = rcu_dereference(piter->disk->part_tbl); ptbl = rcu_dereference(piter->disk->part_tbl);
/* determine iteration parameters */
if (piter->flags & DISK_PITER_REVERSE) {
inc = -1;
if (piter->flags & (DISK_PITER_INCL_PART0 |
DISK_PITER_INCL_EMPTY_PART0))
end = -1;
else
end = 0;
} else {
inc = 1;
end = ptbl->len;
}
/* iterate to the next partition */ /* iterate to the next partition */
for (; piter->idx != end; piter->idx += inc) { for (; piter->idx != ptbl->len; piter->idx += 1) {
struct block_device *part; struct block_device *part;
part = rcu_dereference(ptbl->part[piter->idx]); part = rcu_dereference(ptbl->part[piter->idx]);
...@@ -257,7 +232,10 @@ struct block_device *disk_part_iter_next(struct disk_part_iter *piter) ...@@ -257,7 +232,10 @@ struct block_device *disk_part_iter_next(struct disk_part_iter *piter)
continue; continue;
} }
piter->idx += inc; piter->part = bdgrab(part);
if (!piter->part)
continue;
piter->idx += 1;
break; break;
} }
...@@ -781,8 +759,7 @@ void del_gendisk(struct gendisk *disk) ...@@ -781,8 +759,7 @@ void del_gendisk(struct gendisk *disk)
down_write(&bdev_lookup_sem); down_write(&bdev_lookup_sem);
/* invalidate stuff */ /* invalidate stuff */
disk_part_iter_init(&piter, disk, disk_part_iter_init(&piter, disk, DISK_PITER_INCL_EMPTY);
DISK_PITER_INCL_EMPTY | DISK_PITER_REVERSE);
while ((part = disk_part_iter_next(&piter))) { while ((part = disk_part_iter_next(&piter))) {
invalidate_partition(part); invalidate_partition(part);
delete_partition(part); delete_partition(part);
......
...@@ -218,7 +218,6 @@ void disk_uevent(struct gendisk *disk, enum kobject_action action); ...@@ -218,7 +218,6 @@ void disk_uevent(struct gendisk *disk, enum kobject_action action);
/* /*
* Smarter partition iterator without context limits. * Smarter partition iterator without context limits.
*/ */
#define DISK_PITER_REVERSE (1 << 0) /* iterate in the reverse direction */
#define DISK_PITER_INCL_EMPTY (1 << 1) /* include 0-sized parts */ #define DISK_PITER_INCL_EMPTY (1 << 1) /* include 0-sized parts */
#define DISK_PITER_INCL_PART0 (1 << 2) /* include partition 0 */ #define DISK_PITER_INCL_PART0 (1 << 2) /* include partition 0 */
#define DISK_PITER_INCL_EMPTY_PART0 (1 << 3) /* include empty partition 0 */ #define DISK_PITER_INCL_EMPTY_PART0 (1 << 3) /* include empty partition 0 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment