Skip to content

Commit 776a853

Browse files
Matthew Wilcox (Oracle)brauner
authored andcommitted
i915: Use writeback_iter()
Convert from an inefficient loop to the standard writeback iterator. Signed-off-by: "Matthew Wilcox (Oracle)" <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Christian Brauner <[email protected]>
1 parent 7b73c12 commit 776a853

File tree

1 file changed

+8
-24
lines changed

1 file changed

+8
-24
lines changed

drivers/gpu/drm/i915/gem/i915_gem_shmem.c

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -305,36 +305,20 @@ void __shmem_writeback(size_t size, struct address_space *mapping)
305305
.range_end = LLONG_MAX,
306306
.for_reclaim = 1,
307307
};
308-
unsigned long i;
308+
struct folio *folio = NULL;
309+
int error = 0;
309310

310311
/*
311312
* Leave mmapings intact (GTT will have been revoked on unbinding,
312-
* leaving only CPU mmapings around) and add those pages to the LRU
313+
* leaving only CPU mmapings around) and add those folios to the LRU
313314
* instead of invoking writeback so they are aged and paged out
314315
* as normal.
315316
*/
316-
317-
/* Begin writeback on each dirty page */
318-
for (i = 0; i < size >> PAGE_SHIFT; i++) {
319-
struct page *page;
320-
321-
page = find_lock_page(mapping, i);
322-
if (!page)
323-
continue;
324-
325-
if (!page_mapped(page) && clear_page_dirty_for_io(page)) {
326-
int ret;
327-
328-
SetPageReclaim(page);
329-
ret = mapping->a_ops->writepage(page, &wbc);
330-
if (!PageWriteback(page))
331-
ClearPageReclaim(page);
332-
if (!ret)
333-
goto put;
334-
}
335-
unlock_page(page);
336-
put:
337-
put_page(page);
317+
while ((folio = writeback_iter(mapping, &wbc, folio, &error))) {
318+
if (folio_mapped(folio))
319+
folio_redirty_for_writepage(&wbc, folio);
320+
else
321+
error = shmem_writeout(folio, &wbc);
338322
}
339323
}
340324

0 commit comments

Comments
 (0)