|
@@ -1627,19 +1627,18 @@ void clean_bdev_aliases(struct block_device *bdev, sector_t block, sector_t len)
|
|
|
struct pagevec pvec;
|
|
|
pgoff_t index = block >> (PAGE_SHIFT - bd_inode->i_blkbits);
|
|
|
pgoff_t end;
|
|
|
- int i;
|
|
|
+ int i, count;
|
|
|
struct buffer_head *bh;
|
|
|
struct buffer_head *head;
|
|
|
|
|
|
end = (block + len - 1) >> (PAGE_SHIFT - bd_inode->i_blkbits);
|
|
|
pagevec_init(&pvec, 0);
|
|
|
- while (index <= end && pagevec_lookup(&pvec, bd_mapping, &index,
|
|
|
- min(end - index, (pgoff_t)PAGEVEC_SIZE - 1) + 1)) {
|
|
|
- for (i = 0; i < pagevec_count(&pvec); i++) {
|
|
|
+ while (pagevec_lookup_range(&pvec, bd_mapping, &index, end,
|
|
|
+ PAGEVEC_SIZE)) {
|
|
|
+ count = pagevec_count(&pvec);
|
|
|
+ for (i = 0; i < count; i++) {
|
|
|
struct page *page = pvec.pages[i];
|
|
|
|
|
|
- if (page->index > end)
|
|
|
- break;
|
|
|
if (!page_has_buffers(page))
|
|
|
continue;
|
|
|
/*
|
|
@@ -1669,6 +1668,9 @@ unlock_page:
|
|
|
}
|
|
|
pagevec_release(&pvec);
|
|
|
cond_resched();
|
|
|
+ /* End of range already reached? */
|
|
|
+ if (index > end || !index)
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
EXPORT_SYMBOL(clean_bdev_aliases);
|