Skip to content
Permalink
Matthew-Wilcox…
Switch branches/tags

Commits on Dec 16, 2021

  1. xfs: Support large folios

    Now that iomap has been converted, XFS is large folio safe.
    Indicate to the VFS that it can now create large folios for XFS.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  2. iomap: Support large folios in invalidatepage

    If we're punching a hole in a large folio, we need to remove the
    per-folio iomap data as the folio is about to be split and each page will
    need its own.  If a dirty folio is only partially-uptodate, the iomap
    data contains the information about which blocks cannot be written back,
    so assert that a dirty folio is fully uptodate.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  3. iomap: Convert iomap_migrate_page() to use folios

    The arguments are still pages for now, but we can use folios internally
    and cut out a lot of calls to compound_head().
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  4. iomap: Convert iomap_add_to_ioend() to take a folio

    We still iterate one block at a time, but now we call compound_head()
    less often.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  5. iomap: Simplify iomap_do_writepage()

    Rename end_offset to end_pos and offset_into_page to poff to match the
    rest of the file.  Simplify the handling of the last page straddling
    i_size by doing the EOF check based on the byte granularity i_size
    instead of converting to a pgoff prematurely.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  6. iomap: Simplify iomap_writepage_map()

    Rename end_offset to end_pos and file_offset to pos to match the rest
    of the file.  Simplify the loop by calculating nblocks up front instead
    of each time around the loop.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  7. iomap,xfs: Convert ->discard_page to ->discard_folio

    XFS has the only implementation of ->discard_page today, so convert it
    to use folios in the same patch as converting the API.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  8. iomap: Convert iomap_write_end_inline to take a folio

    This conversion is only safe because iomap only supports writes to inline
    data which starts at the beginning of the file.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  9. iomap: Convert iomap_write_begin() and iomap_write_end() to folios

    These functions still only work in PAGE_SIZE chunks, but there are
    fewer conversions from tail to head pages as a result of this patch.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  10. iomap: Convert __iomap_zero_iter to use a folio

    The zero iterator can work in folio-sized chunks instead of page-sized
    chunks.  This will save a lot of page cache lookups if the file is cached
    in large folios.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  11. iomap: Allow iomap_write_begin() to be called with the full length

    In the future, we want write_begin to know the entire length of the
    write so that it can choose to allocate large folios.  Pass the full
    length in from __iomap_zero_iter() and limit it where necessary.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  12. iomap: Convert iomap_page_mkwrite to use a folio

    If we write to any page in a folio, we have to mark the entire
    folio as dirty, and potentially COW the entire folio, because it'll
    all get written back as one unit.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  13. iomap: Convert readahead and readpage to use a folio

    Handle folios of arbitrary size instead of working in PAGE_SIZE units.
    readahead_folio() decreases the page refcount for you, so this is not
    quite a mechanical change.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  14. iomap: Convert iomap_read_inline_data to take a folio

    We still only support up to a single page of inline data (at least,
    per call to iomap_read_inline_data()), but it can now be written into
    the middle of a folio in case we decide to allocate a 16KiB page for
    a file that's 8.1KiB in size.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  15. iomap: Use folio offsets instead of page offsets

    Pass a folio around instead of the page, and make sure the offset
    is relative to the start of the folio instead of the start of a page.
    Also use size_t for offset & length to make it clear that these are byte
    counts, and to support >2GB folios in the future.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  16. iomap: Convert bio completions to use folios

    Use bio_for_each_folio() to iterate over each folio in the bio
    instead of iterating over each page.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  17. iomap: Pass the iomap_page into iomap_set_range_uptodate

    All but one caller already has the iomap_page, so we can avoid getting
    it again.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  18. iomap: Add iomap_invalidate_folio

    Keep iomap_invalidatepage around as a wrapper for use in address_space
    operations.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  19. iomap: Convert iomap_releasepage to use a folio

    This is an address_space operation, so its argument must remain as a
    struct page, but we can use a folio internally.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  20. iomap: Convert iomap_page_release to take a folio

    iomap_page_release() was also assuming that it was being passed a
    head page.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  21. iomap: Convert iomap_page_create to take a folio

    This function already assumed it was being passed a head page, so
    just formalise that.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  22. iomap: Convert to_iomap_page to take a folio

    The big comment about only using a head page can go away now that
    it takes a folio argument.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  23. fs/buffer: Convert __block_write_begin_int() to take a folio

    There are no plans to convert buffer_head infrastructure to use large
    folios, but __block_write_begin_int() is called from iomap, and it's
    more convenient and less error-prone if we pass in a folio from iomap.
    It also has a nice saving of almost 200 bytes of code from removing
    repeated calls to compound_head().
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  24. block: Add bio_for_each_folio_all()

    Allow callers to iterate over each folio instead of each page.  The
    bio need not have been constructed using folios originally.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Jens Axboe <axboe@kernel.dk>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  25. block: Add bio_add_folio()

    This is a thin wrapper around bio_add_page().  The main advantage here
    is the documentation that folios larger than 2GiB are not supported.
    It's not currently possible to allocate folios that large, but if it
    ever becomes possible, this function will fail gracefully instead of
    doing I/O to the wrong bytes.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Jens Axboe <axboe@kernel.dk>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Matthew Wilcox (Oracle) authored and intel-lab-lkp committed Dec 16, 2021
  26. Merge branch 'for-5.17/block' into for-next

    * for-5.17/block:
      block: only build the icq tracking code when needed
      block: fold create_task_io_context into ioc_find_get_icq
      block: open code create_task_io_context in set_task_ioprio
      block: fold get_task_io_context into set_task_ioprio
      block: move set_task_ioprio to blk-ioc.c
      block: cleanup ioc_clear_queue
      block: refactor put_io_context
      block: remove the NULL ioc check in put_io_context
      block: refactor put_iocontext_active
      block: simplify struct io_context refcounting
      block: remove the nr_task field from struct io_context
    axboe committed Dec 16, 2021
  27. block: only build the icq tracking code when needed

    Only bfq needs to code to track icq, so make it conditional.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20211209063131.18537-12-hch@lst.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Christoph Hellwig authored and axboe committed Dec 16, 2021
  28. block: fold create_task_io_context into ioc_find_get_icq

    Fold create_task_io_context into the only remaining caller.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20211209063131.18537-11-hch@lst.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Christoph Hellwig authored and axboe committed Dec 16, 2021
  29. block: open code create_task_io_context in set_task_ioprio

    The flow in set_task_ioprio can be simplified by simply open coding
    create_task_io_context, which removes a refcount roundtrip on the I/O
    context.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20211209063131.18537-10-hch@lst.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Christoph Hellwig authored and axboe committed Dec 16, 2021
  30. block: fold get_task_io_context into set_task_ioprio

    Fold get_task_io_context into its only caller, and simplify the code
    as no reference to the I/O context is required to just set the ioprio
    field.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20211209063131.18537-9-hch@lst.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Christoph Hellwig authored and axboe committed Dec 16, 2021
  31. block: move set_task_ioprio to blk-ioc.c

    Keep set_task_ioprio with the other low-level code that accesses the
    io_context structure.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20211209063131.18537-8-hch@lst.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Christoph Hellwig authored and axboe committed Dec 16, 2021
  32. block: cleanup ioc_clear_queue

    Fold __ioc_clear_queue into ioc_clear_queue and switch to always
    use plain _irq locking instead of the more expensive _irqsave that
    is not needed here.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20211209063131.18537-7-hch@lst.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Christoph Hellwig authored and axboe committed Dec 16, 2021
  33. block: refactor put_io_context

    Move the code to delay freeing the icqs into a separate helper.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20211209063131.18537-6-hch@lst.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Christoph Hellwig authored and axboe committed Dec 16, 2021
  34. block: remove the NULL ioc check in put_io_context

    No caller passes in a NULL pointer, so remove the check.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20211209063131.18537-5-hch@lst.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Christoph Hellwig authored and axboe committed Dec 16, 2021
  35. block: refactor put_iocontext_active

    Factor out a ioc_exit_icqs helper to tear down the icqs and the fold
    the rest of put_iocontext_active into exit_io_context.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20211209063131.18537-4-hch@lst.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Christoph Hellwig authored and axboe committed Dec 16, 2021
Older