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;
                        /*
                }
                pagevec_release(&pvec);
                cond_resched();
+               /* End of range already reached? */
+               if (index > end || !index)
+                       break;
        }
 }
 EXPORT_SYMBOL(clean_bdev_aliases);