Skip to content

Commit 0470dd9

Browse files
Christoph Hellwigaxboe
authored andcommitted
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: Christoph Hellwig <hch@lst.de> Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent bc359d0 commit 0470dd9

File tree

2 files changed

+7
-31
lines changed

2 files changed

+7
-31
lines changed

block/genhd.c

Lines changed: 7 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -184,24 +184,13 @@ static struct block_device *__disk_get_part(struct gendisk *disk, int partno)
184184
void disk_part_iter_init(struct disk_part_iter *piter, struct gendisk *disk,
185185
unsigned int flags)
186186
{
187-
struct disk_part_tbl *ptbl;
188-
189-
rcu_read_lock();
190-
ptbl = rcu_dereference(disk->part_tbl);
191-
192187
piter->disk = disk;
193188
piter->part = NULL;
194-
195-
if (flags & DISK_PITER_REVERSE)
196-
piter->idx = ptbl->len - 1;
197-
else if (flags & (DISK_PITER_INCL_PART0 | DISK_PITER_INCL_EMPTY_PART0))
189+
if (flags & (DISK_PITER_INCL_PART0 | DISK_PITER_INCL_EMPTY_PART0))
198190
piter->idx = 0;
199191
else
200192
piter->idx = 1;
201-
202193
piter->flags = flags;
203-
204-
rcu_read_unlock();
205194
}
206195

207196
/**
@@ -216,7 +205,6 @@ void disk_part_iter_init(struct disk_part_iter *piter, struct gendisk *disk,
216205
struct block_device *disk_part_iter_next(struct disk_part_iter *piter)
217206
{
218207
struct disk_part_tbl *ptbl;
219-
int inc, end;
220208

221209
/* put the last partition */
222210
disk_part_iter_exit(piter);
@@ -225,21 +213,8 @@ struct block_device *disk_part_iter_next(struct disk_part_iter *piter)
225213
rcu_read_lock();
226214
ptbl = rcu_dereference(piter->disk->part_tbl);
227215

228-
/* determine iteration parameters */
229-
if (piter->flags & DISK_PITER_REVERSE) {
230-
inc = -1;
231-
if (piter->flags & (DISK_PITER_INCL_PART0 |
232-
DISK_PITER_INCL_EMPTY_PART0))
233-
end = -1;
234-
else
235-
end = 0;
236-
} else {
237-
inc = 1;
238-
end = ptbl->len;
239-
}
240-
241216
/* iterate to the next partition */
242-
for (; piter->idx != end; piter->idx += inc) {
217+
for (; piter->idx != ptbl->len; piter->idx += 1) {
243218
struct block_device *part;
244219

245220
part = rcu_dereference(ptbl->part[piter->idx]);
@@ -257,7 +232,10 @@ struct block_device *disk_part_iter_next(struct disk_part_iter *piter)
257232
continue;
258233
}
259234

260-
piter->idx += inc;
235+
piter->part = bdgrab(part);
236+
if (!piter->part)
237+
continue;
238+
piter->idx += 1;
261239
break;
262240
}
263241

@@ -781,8 +759,7 @@ void del_gendisk(struct gendisk *disk)
781759
down_write(&bdev_lookup_sem);
782760

783761
/* invalidate stuff */
784-
disk_part_iter_init(&piter, disk,
785-
DISK_PITER_INCL_EMPTY | DISK_PITER_REVERSE);
762+
disk_part_iter_init(&piter, disk, DISK_PITER_INCL_EMPTY);
786763
while ((part = disk_part_iter_next(&piter))) {
787764
invalidate_partition(part);
788765
delete_partition(part);

include/linux/genhd.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,6 @@ void disk_uevent(struct gendisk *disk, enum kobject_action action);
218218
/*
219219
* Smarter partition iterator without context limits.
220220
*/
221-
#define DISK_PITER_REVERSE (1 << 0) /* iterate in the reverse direction */
222221
#define DISK_PITER_INCL_EMPTY (1 << 1) /* include 0-sized parts */
223222
#define DISK_PITER_INCL_PART0 (1 << 2) /* include partition 0 */
224223
#define DISK_PITER_INCL_EMPTY_PART0 (1 << 3) /* include empty partition 0 */

0 commit comments

Comments
 (0)