xfs: enable discarding of folios backing an xfile
Create a new xfile function to discard the page cache that's backing part of an xfile. The next patch wil use this to drop parts of an xfile that aren't needed anymore. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
fe6c9f8e48
commit
98339edf07
@ -948,6 +948,7 @@ DEFINE_XFILE_EVENT(xfile_store);
|
||||
DEFINE_XFILE_EVENT(xfile_seek_data);
|
||||
DEFINE_XFILE_EVENT(xfile_get_folio);
|
||||
DEFINE_XFILE_EVENT(xfile_put_folio);
|
||||
DEFINE_XFILE_EVENT(xfile_discard);
|
||||
|
||||
TRACE_EVENT(xfarray_create,
|
||||
TP_PROTO(struct xfarray *xfa, unsigned long long required_capacity),
|
||||
|
@ -310,3 +310,15 @@ xfile_put_folio(
|
||||
folio_unlock(folio);
|
||||
folio_put(folio);
|
||||
}
|
||||
|
||||
/* Discard the page cache that's backing a range of the xfile. */
|
||||
void
|
||||
xfile_discard(
|
||||
struct xfile *xf,
|
||||
loff_t pos,
|
||||
u64 count)
|
||||
{
|
||||
trace_xfile_discard(xf, pos, count);
|
||||
|
||||
shmem_truncate_range(file_inode(xf->file), pos, pos + count - 1);
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ int xfile_load(struct xfile *xf, void *buf, size_t count, loff_t pos);
|
||||
int xfile_store(struct xfile *xf, const void *buf, size_t count,
|
||||
loff_t pos);
|
||||
|
||||
void xfile_discard(struct xfile *xf, loff_t pos, u64 count);
|
||||
loff_t xfile_seek_data(struct xfile *xf, loff_t pos);
|
||||
|
||||
#define XFILE_MAX_FOLIO_SIZE (PAGE_SIZE << MAX_PAGECACHE_ORDER)
|
||||
|
Loading…
x
Reference in New Issue
Block a user