iomap: move the PF_MEMALLOC check to iomap_writepages
The iomap writepage implementation has been removed in commit
478af190cb
("iomap: remove iomap_writepage") and this code is now only
called through ->writepages which never happens from memory reclaim.
Nove the check from iomap_do_writepage to iomap_writepages so that is
only called once per ->writepage invocation.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20231207072710.176093-5-hch@lst.de
Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
432acd550e
commit
c2dc7e5589
|
@ -1902,20 +1902,6 @@ static int iomap_do_writepage(struct folio *folio,
|
|||
|
||||
trace_iomap_writepage(inode, folio_pos(folio), folio_size(folio));
|
||||
|
||||
/*
|
||||
* Refuse to write the folio out if we're called from reclaim context.
|
||||
*
|
||||
* This avoids stack overflows when called from deeply used stacks in
|
||||
* random callers for direct reclaim or memcg reclaim. We explicitly
|
||||
* allow reclaim from kswapd as the stack usage there is relatively low.
|
||||
*
|
||||
* This should never happen except in the case of a VM regression so
|
||||
* warn about it.
|
||||
*/
|
||||
if (WARN_ON_ONCE((current->flags & (PF_MEMALLOC|PF_KSWAPD)) ==
|
||||
PF_MEMALLOC))
|
||||
goto redirty;
|
||||
|
||||
/*
|
||||
* Is this folio beyond the end of the file?
|
||||
*
|
||||
|
@ -1981,8 +1967,6 @@ static int iomap_do_writepage(struct folio *folio,
|
|||
|
||||
return iomap_writepage_map(wpc, wbc, inode, folio, end_pos);
|
||||
|
||||
redirty:
|
||||
folio_redirty_for_writepage(wbc, folio);
|
||||
unlock:
|
||||
folio_unlock(folio);
|
||||
return 0;
|
||||
|
@ -1995,6 +1979,14 @@ iomap_writepages(struct address_space *mapping, struct writeback_control *wbc,
|
|||
{
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* Writeback from reclaim context should never happen except in the case
|
||||
* of a VM regression so warn about it and refuse to write the data.
|
||||
*/
|
||||
if (WARN_ON_ONCE((current->flags & (PF_MEMALLOC | PF_KSWAPD)) ==
|
||||
PF_MEMALLOC))
|
||||
return -EIO;
|
||||
|
||||
wpc->ops = ops;
|
||||
ret = write_cache_pages(mapping, wbc, iomap_do_writepage, wpc);
|
||||
if (!wpc->ioend)
|
||||
|
|
Loading…
Reference in New Issue