mirror of
https://github.com/torvalds/linux.git
synced 2026-03-13 22:36:17 +01:00
mm: stop passing a writeback_control structure to __swap_writepage
__swap_writepage only needs the swap_iocb cookie from the writeback_control structure, so pass it explicitly and remove the now unused swap_iocb member from struct writeback_control. Link: https://lkml.kernel.org/r/20250610054959.2057526-5-hch@lst.de Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Nhat Pham <nphamcs@gmail.com> Cc: Baolin Wang <baolin.wang@linux.alibaba.com> Cc: Chengming Zhou <chengming.zhou@linux.dev> Cc: Hugh Dickins <hughd@google.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
2d1844cdbe
commit
2ba8ffcefe
3 changed files with 16 additions and 24 deletions
33
mm/page_io.c
33
mm/page_io.c
|
|
@ -281,7 +281,7 @@ int swap_writeout(struct folio *folio, struct writeback_control *wbc)
|
|||
return AOP_WRITEPAGE_ACTIVATE;
|
||||
}
|
||||
|
||||
__swap_writepage(folio, wbc);
|
||||
__swap_writepage(folio, wbc->swap_plug);
|
||||
return 0;
|
||||
out_unlock:
|
||||
folio_unlock(folio);
|
||||
|
|
@ -371,9 +371,9 @@ static void sio_write_complete(struct kiocb *iocb, long ret)
|
|||
mempool_free(sio, sio_pool);
|
||||
}
|
||||
|
||||
static void swap_writepage_fs(struct folio *folio, struct writeback_control *wbc)
|
||||
static void swap_writepage_fs(struct folio *folio, struct swap_iocb **swap_plug)
|
||||
{
|
||||
struct swap_iocb *sio = NULL;
|
||||
struct swap_iocb *sio = swap_plug ? *swap_plug : NULL;
|
||||
struct swap_info_struct *sis = swp_swap_info(folio->swap);
|
||||
struct file *swap_file = sis->swap_file;
|
||||
loff_t pos = swap_dev_pos(folio->swap);
|
||||
|
|
@ -381,8 +381,6 @@ static void swap_writepage_fs(struct folio *folio, struct writeback_control *wbc
|
|||
count_swpout_vm_event(folio);
|
||||
folio_start_writeback(folio);
|
||||
folio_unlock(folio);
|
||||
if (wbc->swap_plug)
|
||||
sio = *wbc->swap_plug;
|
||||
if (sio) {
|
||||
if (sio->iocb.ki_filp != swap_file ||
|
||||
sio->iocb.ki_pos + sio->len != pos) {
|
||||
|
|
@ -401,22 +399,21 @@ static void swap_writepage_fs(struct folio *folio, struct writeback_control *wbc
|
|||
bvec_set_folio(&sio->bvec[sio->pages], folio, folio_size(folio), 0);
|
||||
sio->len += folio_size(folio);
|
||||
sio->pages += 1;
|
||||
if (sio->pages == ARRAY_SIZE(sio->bvec) || !wbc->swap_plug) {
|
||||
if (sio->pages == ARRAY_SIZE(sio->bvec) || !swap_plug) {
|
||||
swap_write_unplug(sio);
|
||||
sio = NULL;
|
||||
}
|
||||
if (wbc->swap_plug)
|
||||
*wbc->swap_plug = sio;
|
||||
if (swap_plug)
|
||||
*swap_plug = sio;
|
||||
}
|
||||
|
||||
static void swap_writepage_bdev_sync(struct folio *folio,
|
||||
struct writeback_control *wbc, struct swap_info_struct *sis)
|
||||
struct swap_info_struct *sis)
|
||||
{
|
||||
struct bio_vec bv;
|
||||
struct bio bio;
|
||||
|
||||
bio_init(&bio, sis->bdev, &bv, 1,
|
||||
REQ_OP_WRITE | REQ_SWAP | wbc_to_write_flags(wbc));
|
||||
bio_init(&bio, sis->bdev, &bv, 1, REQ_OP_WRITE | REQ_SWAP);
|
||||
bio.bi_iter.bi_sector = swap_folio_sector(folio);
|
||||
bio_add_folio_nofail(&bio, folio, folio_size(folio), 0);
|
||||
|
||||
|
|
@ -431,13 +428,11 @@ static void swap_writepage_bdev_sync(struct folio *folio,
|
|||
}
|
||||
|
||||
static void swap_writepage_bdev_async(struct folio *folio,
|
||||
struct writeback_control *wbc, struct swap_info_struct *sis)
|
||||
struct swap_info_struct *sis)
|
||||
{
|
||||
struct bio *bio;
|
||||
|
||||
bio = bio_alloc(sis->bdev, 1,
|
||||
REQ_OP_WRITE | REQ_SWAP | wbc_to_write_flags(wbc),
|
||||
GFP_NOIO);
|
||||
bio = bio_alloc(sis->bdev, 1, REQ_OP_WRITE | REQ_SWAP, GFP_NOIO);
|
||||
bio->bi_iter.bi_sector = swap_folio_sector(folio);
|
||||
bio->bi_end_io = end_swap_bio_write;
|
||||
bio_add_folio_nofail(bio, folio, folio_size(folio), 0);
|
||||
|
|
@ -449,7 +444,7 @@ static void swap_writepage_bdev_async(struct folio *folio,
|
|||
submit_bio(bio);
|
||||
}
|
||||
|
||||
void __swap_writepage(struct folio *folio, struct writeback_control *wbc)
|
||||
void __swap_writepage(struct folio *folio, struct swap_iocb **swap_plug)
|
||||
{
|
||||
struct swap_info_struct *sis = swp_swap_info(folio->swap);
|
||||
|
||||
|
|
@ -460,16 +455,16 @@ void __swap_writepage(struct folio *folio, struct writeback_control *wbc)
|
|||
* is safe.
|
||||
*/
|
||||
if (data_race(sis->flags & SWP_FS_OPS))
|
||||
swap_writepage_fs(folio, wbc);
|
||||
swap_writepage_fs(folio, swap_plug);
|
||||
/*
|
||||
* ->flags can be updated non-atomicially (scan_swap_map_slots),
|
||||
* but that will never affect SWP_SYNCHRONOUS_IO, so the data_race
|
||||
* is safe.
|
||||
*/
|
||||
else if (data_race(sis->flags & SWP_SYNCHRONOUS_IO))
|
||||
swap_writepage_bdev_sync(folio, wbc, sis);
|
||||
swap_writepage_bdev_sync(folio, sis);
|
||||
else
|
||||
swap_writepage_bdev_async(folio, wbc, sis);
|
||||
swap_writepage_bdev_async(folio, sis);
|
||||
}
|
||||
|
||||
void swap_write_unplug(struct swap_iocb *sio)
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ static inline void swap_read_unplug(struct swap_iocb *plug)
|
|||
}
|
||||
void swap_write_unplug(struct swap_iocb *sio);
|
||||
int swap_writeout(struct folio *folio, struct writeback_control *wbc);
|
||||
void __swap_writepage(struct folio *folio, struct writeback_control *wbc);
|
||||
void __swap_writepage(struct folio *folio, struct swap_iocb **swap_plug);
|
||||
|
||||
/* linux/mm/swap_state.c */
|
||||
/* One swap address space for each 64M swap space */
|
||||
|
|
|
|||
|
|
@ -1070,9 +1070,6 @@ static int zswap_writeback_entry(struct zswap_entry *entry,
|
|||
struct mempolicy *mpol;
|
||||
bool folio_was_allocated;
|
||||
struct swap_info_struct *si;
|
||||
struct writeback_control wbc = {
|
||||
.sync_mode = WB_SYNC_NONE,
|
||||
};
|
||||
int ret = 0;
|
||||
|
||||
/* try to allocate swap cache folio */
|
||||
|
|
@ -1134,7 +1131,7 @@ static int zswap_writeback_entry(struct zswap_entry *entry,
|
|||
folio_set_reclaim(folio);
|
||||
|
||||
/* start writeback */
|
||||
__swap_writepage(folio, &wbc);
|
||||
__swap_writepage(folio, NULL);
|
||||
|
||||
out:
|
||||
if (ret && ret != -EEXIST) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue