Skip to content

Commit

Permalink
erofs: add manual PSI accounting for the compressed address space
Browse files Browse the repository at this point in the history
erofs uses an additional address space for compressed data read from disk
in addition to the one directly associated with the inode.  Reading into
the lower address space is open coded using add_to_page_cache_lru instead
of using the filemap.c helper for page allocation micro-optimizations,
which means it is not covered by the MM PSI annotations for ->read_folio
and ->readahead, so add manual ones instead.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Acked-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20220915094200.139713-5-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
Christoph Hellwig authored and Jens Axboe committed Sep 20, 2022
1 parent 4088a47 commit 99486c5
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion fs/erofs/zdata.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "zdata.h"
#include "compress.h"
#include <linux/prefetch.h>
#include <linux/psi.h>

#include <trace/events/erofs.h>

Expand Down Expand Up @@ -1365,6 +1366,8 @@ static void z_erofs_submit_queue(struct z_erofs_decompress_frontend *f,
struct block_device *last_bdev;
unsigned int nr_bios = 0;
struct bio *bio = NULL;
/* initialize to 1 to make skip psi_memstall_leave unless needed */
unsigned long pflags = 1;

bi_private = jobqueueset_init(sb, q, fgq, force_fg);
qtail[JQ_BYPASS] = &q[JQ_BYPASS]->head;
Expand Down Expand Up @@ -1414,10 +1417,15 @@ static void z_erofs_submit_queue(struct z_erofs_decompress_frontend *f,
if (bio && (cur != last_index + 1 ||
last_bdev != mdev.m_bdev)) {
submit_bio_retry:
if (!pflags)
psi_memstall_leave(&pflags);
submit_bio(bio);
bio = NULL;
}

if (unlikely(PageWorkingset(page)))
psi_memstall_enter(&pflags);

if (!bio) {
bio = bio_alloc(mdev.m_bdev, BIO_MAX_VECS,
REQ_OP_READ, GFP_NOIO);
Expand Down Expand Up @@ -1445,8 +1453,11 @@ static void z_erofs_submit_queue(struct z_erofs_decompress_frontend *f,
move_to_bypass_jobqueue(pcl, qtail, owned_head);
} while (owned_head != Z_EROFS_PCLUSTER_TAIL);

if (bio)
if (bio) {
if (!pflags)
psi_memstall_leave(&pflags);
submit_bio(bio);
}

/*
* although background is preferred, no one is pending for submission.
Expand Down

0 comments on commit 99486c5

Please sign in to comment.