mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 08:02:27 +02:00
Merge patch series "iomap: make buffered writes work with RWF_DONTCACHE"
Support buffered writes with RWF_DONTCACHE. * patches from https://lore.kernel.org/r/20250204184047.356762-2-axboe@kernel.dk: xfs: flag as supporting FOP_DONTCACHE iomap: make buffered writes work with RWF_DONTCACHE Link: https://lore.kernel.org/r/20250204184047.356762-2-axboe@kernel.dk Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
commit
13368df520
|
|
@ -352,6 +352,11 @@ operations:
|
|||
``IOMAP_NOWAIT`` is often set on behalf of ``IOCB_NOWAIT`` or
|
||||
``RWF_NOWAIT``.
|
||||
|
||||
* ``IOMAP_DONTCACHE`` is set when the caller wishes to perform a
|
||||
buffered file I/O and would like the kernel to drop the pagecache
|
||||
after the I/O completes, if it isn't already being used by another
|
||||
thread.
|
||||
|
||||
If it is necessary to read existing file contents from a `different
|
||||
<https://lore.kernel.org/all/20191008071527.29304-9-hch@lst.de/>`_
|
||||
device or address range on a device, the filesystem should return that
|
||||
|
|
|
|||
|
|
@ -131,6 +131,8 @@ These ``struct kiocb`` flags are significant for buffered I/O with iomap:
|
|||
|
||||
* ``IOCB_NOWAIT``: Turns on ``IOMAP_NOWAIT``.
|
||||
|
||||
* ``IOCB_DONTCACHE``: Turns on ``IOMAP_DONTCACHE``.
|
||||
|
||||
Internal per-Folio State
|
||||
------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -603,6 +603,8 @@ struct folio *iomap_get_folio(struct iomap_iter *iter, loff_t pos, size_t len)
|
|||
|
||||
if (iter->flags & IOMAP_NOWAIT)
|
||||
fgp |= FGP_NOWAIT;
|
||||
if (iter->flags & IOMAP_DONTCACHE)
|
||||
fgp |= FGP_DONTCACHE;
|
||||
fgp |= fgf_set_order(len);
|
||||
|
||||
return __filemap_get_folio(iter->inode->i_mapping, pos >> PAGE_SHIFT,
|
||||
|
|
@ -1034,6 +1036,8 @@ iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *i,
|
|||
|
||||
if (iocb->ki_flags & IOCB_NOWAIT)
|
||||
iter.flags |= IOMAP_NOWAIT;
|
||||
if (iocb->ki_flags & IOCB_DONTCACHE)
|
||||
iter.flags |= IOMAP_DONTCACHE;
|
||||
|
||||
while ((ret = iomap_iter(&iter, ops)) > 0)
|
||||
iter.processed = iomap_write_iter(&iter, i);
|
||||
|
|
|
|||
|
|
@ -1626,7 +1626,8 @@ const struct file_operations xfs_file_operations = {
|
|||
.fadvise = xfs_file_fadvise,
|
||||
.remap_file_range = xfs_file_remap_range,
|
||||
.fop_flags = FOP_MMAP_SYNC | FOP_BUFFER_RASYNC |
|
||||
FOP_BUFFER_WASYNC | FOP_DIO_PARALLEL_WRITE,
|
||||
FOP_BUFFER_WASYNC | FOP_DIO_PARALLEL_WRITE |
|
||||
FOP_DONTCACHE,
|
||||
};
|
||||
|
||||
const struct file_operations xfs_dir_file_operations = {
|
||||
|
|
|
|||
|
|
@ -183,6 +183,7 @@ struct iomap_folio_ops {
|
|||
#define IOMAP_DAX 0
|
||||
#endif /* CONFIG_FS_DAX */
|
||||
#define IOMAP_ATOMIC (1 << 9)
|
||||
#define IOMAP_DONTCACHE (1 << 10)
|
||||
|
||||
struct iomap_ops {
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user