int found_extent = 0;
 
        while (nr_pages) {
-               struct list_head *lh;
-
                if (se->start_page <= start_page &&
                    start_page < se->start_page + se->nr_pages) {
                        pgoff_t offset = start_page - se->start_page;
                                break;
                }
 
-               lh = se->list.next;
-               se = list_entry(lh, struct swap_extent, list);
+               se = list_next_entry(se, list);
        }
 }
 
        VM_BUG_ON(page_private(page) != SWP_CONTINUED);
 
        do {
-               page = list_entry(page->lru.next, struct page, lru);
+               page = list_next_entry(page, lru);
                map = kmap_atomic(page);
                tmp_count = map[offset];
                kunmap_atomic(map);
        se = start_se;
 
        for ( ; ; ) {
-               struct list_head *lh;
-
                if (se->start_page <= offset &&
                                offset < (se->start_page + se->nr_pages)) {
                        return se->start_block + (offset - se->start_page);
                }
-               lh = se->list.next;
-               se = list_entry(lh, struct swap_extent, list);
+               se = list_next_entry(se, list);
                sis->curr_swap_extent = se;
                BUG_ON(se == start_se);         /* It *must* be present */
        }
        while (!list_empty(&sis->first_swap_extent.list)) {
                struct swap_extent *se;
 
-               se = list_entry(sis->first_swap_extent.list.next,
+               se = list_first_entry(&sis->first_swap_extent.list,
                                struct swap_extent, list);
                list_del(&se->list);
                kfree(se);