|
Revision tags: v6.15, v6.15-rc7, v6.15-rc6, v6.15-rc5, v6.15-rc4, v6.15-rc3 |
|
| #
2d900eff |
| 18-Apr-2025 |
Davidlohr Bueso <[email protected]> |
mm/migrate: fix sleep in atomic for large folios and buffer heads
The large folio + buffer head noref migration scenarios are being naughty and blocking while holding a spinlock.
As a consequence o
mm/migrate: fix sleep in atomic for large folios and buffer heads
The large folio + buffer head noref migration scenarios are being naughty and blocking while holding a spinlock.
As a consequence of the pagecache lookup path taking the folio lock this serializes against migration paths, so they can wait for each other. For the private_lock atomic case, a new BH_Migrate flag is introduced which enables the lookup to bail.
This allows the critical region of the private_lock on the migration path to be reduced to the way it was before ebdf4de5642fb6 ("mm: migrate: fix reference check race between __find_get_block() and migration"), that is covering the count checks.
The scope is always noref migration.
Reported-by: kernel test robot <[email protected]> Reported-by: [email protected] Closes: https://lore.kernel.org/oe-lkp/[email protected] Fixes: 3c20917120ce61 ("block/bdev: enable large folio support for large logical block sizes") Reviewed-by: Jan Kara <[email protected]> Co-developed-by: Luis Chamberlain <[email protected]> Signed-off-by: Davidlohr Bueso <[email protected]> Link: https://kdevops.org/ext4/v6.15-rc2.html # [0] Link: https://lore.kernel.org/all/[email protected]/ # [1] Link: https://lore.kernel.org/[email protected] Tested-by: [email protected] # [0] [1] Reviewed-by: Luis Chamberlain <[email protected]> Signed-off-by: Christian Brauner <[email protected]>
show more ...
|
| #
2814a7d3 |
| 18-Apr-2025 |
Davidlohr Bueso <[email protected]> |
fs/buffer: introduce sleeping flavors for pagecache lookups
Add __find_get_block_nonatomic() and sb_find_get_block_nonatomic() calls for which users will be converted where safe. These versions will
fs/buffer: introduce sleeping flavors for pagecache lookups
Add __find_get_block_nonatomic() and sb_find_get_block_nonatomic() calls for which users will be converted where safe. These versions will take the folio lock instead of the mapping's private_lock.
Reviewed-by: Jan Kara <[email protected]> Signed-off-by: Davidlohr Bueso <[email protected]> Link: https://kdevops.org/ext4/v6.15-rc2.html # [0] Link: https://lore.kernel.org/all/[email protected]/ # [1] Link: https://lore.kernel.org/[email protected] Tested-by: [email protected] Reviewed-by: Luis Chamberlain <[email protected]> Signed-off-by: Christian Brauner <[email protected]>
show more ...
|
|
Revision tags: v6.15-rc2, v6.15-rc1, v6.14, v6.14-rc7, v6.14-rc6, v6.14-rc5, v6.14-rc4 |
|
| #
63a23847 |
| 17-Feb-2025 |
Matthew Wilcox (Oracle) <[email protected]> |
fs: convert block_commit_write() to take a folio
All callers now have a folio, so pass it in instead of converting folio->page->folio.
Link: https://lkml.kernel.org/r/20250217192009.437916-1-willy@
fs: convert block_commit_write() to take a folio
All callers now have a folio, so pass it in instead of converting folio->page->folio.
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
|
Revision tags: v6.14-rc3 |
|
| #
536da2a4 |
| 10-Feb-2025 |
Matthew Wilcox (Oracle) <[email protected]> |
gfs2: Convert gfs2_end_log_write_bh() to work on a folio
gfs2_end_log_write() has to handle bios which consist of both pages which belong to folios and pages which were allocated from a mempool and
gfs2: Convert gfs2_end_log_write_bh() to work on a folio
gfs2_end_log_write() has to handle bios which consist of both pages which belong to folios and pages which were allocated from a mempool and do not belong to a folio. It would be cleaner to have separate endio handlers which handle each type, but it's not clear to me whether that's even possible.
This patch is slightly forward-looking in that page_folio() cannot currently return NULL, but it will return NULL in the future for pages which do not belong to a folio.
This was the last user of page_has_buffers(), so remove it.
Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Signed-off-by: Andreas Gruenbacher <[email protected]>
show more ...
|
|
Revision tags: v6.14-rc2, v6.14-rc1, v6.13, v6.13-rc7, v6.13-rc6, v6.13-rc5, v6.13-rc4, v6.13-rc3, v6.13-rc2, v6.13-rc1, v6.12, v6.12-rc7, v6.12-rc6, v6.12-rc5, v6.12-rc4, v6.12-rc3, v6.12-rc2, v6.12-rc1, v6.11, v6.11-rc7, v6.11-rc6 |
|
| #
5c40e050 |
| 29-Aug-2024 |
Michal Hocko <[email protected]> |
fs: drop GFP_NOFAIL mode from alloc_page_buffers
There is only one called of alloc_page_buffers and it doesn't require __GFP_NOFAIL so drop this allocation mode.
Signed-off-by: Michal Hocko <mhocko
fs: drop GFP_NOFAIL mode from alloc_page_buffers
There is only one called of alloc_page_buffers and it doesn't require __GFP_NOFAIL so drop this allocation mode.
Signed-off-by: Michal Hocko <[email protected]> Link: https://lore.kernel.org/r/[email protected] Acked-by: Song Liu <[email protected]> Reviewed-by: Jan Kara <[email protected]> Signed-off-by: Christian Brauner <[email protected]>
show more ...
|
|
Revision tags: v6.11-rc5, v6.11-rc4, v6.11-rc3, v6.11-rc2, v6.11-rc1, v6.10 |
|
| #
9f04609f |
| 11-Jul-2024 |
Matthew Wilcox (Oracle) <[email protected]> |
buffer: Convert __block_write_begin() to take a folio
Almost all callers have a folio now, so change __block_write_begin() to take a folio and remove a call to compound_head().
Reviewed-by: Josef B
buffer: Convert __block_write_begin() to take a folio
Almost all callers have a folio now, so change __block_write_begin() to take a folio and remove a call to compound_head().
Reviewed-by: Josef Bacik <[email protected]> Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Signed-off-by: Christian Brauner <[email protected]>
show more ...
|
| #
1da86618 |
| 15-Jul-2024 |
Matthew Wilcox (Oracle) <[email protected]> |
fs: Convert aops->write_begin to take a folio
Convert all callers from working on a page to working on one page of a folio (support for working on an entire folio can come later). Removes a lot of f
fs: Convert aops->write_begin to take a folio
Convert all callers from working on a page to working on one page of a folio (support for working on an entire folio can come later). Removes a lot of folio->page->folio conversions.
Reviewed-by: Josef Bacik <[email protected]> Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Signed-off-by: Christian Brauner <[email protected]>
show more ...
|
| #
a225800f |
| 10-Jul-2024 |
Matthew Wilcox (Oracle) <[email protected]> |
fs: Convert aops->write_end to take a folio
Most callers have a folio, and most implementations operate on a folio, so remove the conversion from folio->page->folio to fit through this interface.
R
fs: Convert aops->write_end to take a folio
Most callers have a folio, and most implementations operate on a folio, so remove the conversion from folio->page->folio to fit through this interface.
Reviewed-by: Josef Bacik <[email protected]> Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Signed-off-by: Christian Brauner <[email protected]>
show more ...
|
| #
97edbc02 |
| 10-Jul-2024 |
Matthew Wilcox (Oracle) <[email protected]> |
buffer: Convert block_write_end() to take a folio
All callers now have a folio, so pass it in instead of converting from a folio to a page and back to a folio again. Saves a call to compound_head()
buffer: Convert block_write_end() to take a folio
All callers now have a folio, so pass it in instead of converting from a folio to a page and back to a folio again. Saves a call to compound_head().
Reviewed-by: Josef Bacik <[email protected]> Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Signed-off-by: Christian Brauner <[email protected]>
show more ...
|
|
Revision tags: v6.10-rc7, v6.10-rc6, v6.10-rc5, v6.10-rc4, v6.10-rc3, v6.10-rc2, v6.10-rc1 |
|
| #
06668257 |
| 24-May-2024 |
Matthew Wilcox (Oracle) <[email protected]> |
mm: remove page_mapping()
All callers are now converted, delete this compatibility wrapper. Also fix up some comments which referred to page_mapping.
Link: https://lkml.kernel.org/r/20240423225552
mm: remove page_mapping()
All callers are now converted, delete this compatibility wrapper. Also fix up some comments which referred to page_mapping.
Link: https://lkml.kernel.org/r/[email protected] Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Reviewed-by: David Hildenbrand <[email protected]> Cc: Eric Biggers <[email protected]> Cc: Sidhartha Kumar <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
|
Revision tags: v6.9, v6.9-rc7, v6.9-rc6, v6.9-rc5 |
|
| #
b73a936f |
| 16-Apr-2024 |
Matthew Wilcox (Oracle) <[email protected]> |
buffer: add kernel-doc for bforget() and __bforget()
Distinguish these functions from brelse() and __brelse().
Link: https://lkml.kernel.org/r/[email protected] Signed-of
buffer: add kernel-doc for bforget() and __bforget()
Distinguish these functions from brelse() and __brelse().
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Tested-by: Randy Dunlap <[email protected]> Cc: Pankaj Raghav <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
| #
66924fda |
| 16-Apr-2024 |
Matthew Wilcox (Oracle) <[email protected]> |
buffer: add kernel-doc for brelse() and __brelse()
Move the documentation for __brelse() to brelse(), format it as kernel-doc and update it from talking about pages to folios.
Link: https://lkml.ke
buffer: add kernel-doc for brelse() and __brelse()
Move the documentation for __brelse() to brelse(), format it as kernel-doc and update it from talking about pages to folios.
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Tested-by: Randy Dunlap <[email protected]> Cc: Pankaj Raghav <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
| #
324ecaee |
| 16-Apr-2024 |
Matthew Wilcox (Oracle) <[email protected]> |
buffer: fix __bread and __bread_gfp kernel-doc
The extra indentation confused the kernel-doc parser, so remove it. Fix some other wording while I'm here, and advise the user they need to call brels
buffer: fix __bread and __bread_gfp kernel-doc
The extra indentation confused the kernel-doc parser, so remove it. Fix some other wording while I'm here, and advise the user they need to call brelse() on this buffer.
__bread_gfp() isn't used directly by filesystems, but the other wrappers for it don't have documentation, so document it accordingly.
Link: https://lkml.kernel.org/r/[email protected] Co-developed-by: Pankaj Raghav <[email protected]> Signed-off-by: Pankaj Raghav <[email protected]> Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Tested-by: Randy Dunlap <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
|
Revision tags: v6.9-rc4 |
|
| #
224941e8 |
| 11-Apr-2024 |
Al Viro <[email protected]> |
use ->bd_mapping instead of ->bd_inode->i_mapping
Just the low-hanging fruit...
Signed-off-by: Al Viro <[email protected]> Link: https://lore.kernel.org/r/20240411145346.2516848-2-viro@zeniv.
use ->bd_mapping instead of ->bd_inode->i_mapping
Just the low-hanging fruit...
Signed-off-by: Al Viro <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Christian Brauner <[email protected]>
show more ...
|
|
Revision tags: v6.9-rc3, v6.9-rc2, v6.9-rc1, v6.8, v6.8-rc7, v6.8-rc6, v6.8-rc5, v6.8-rc4, v6.8-rc3, v6.8-rc2, v6.8-rc1, v6.7, v6.7-rc8, v6.7-rc7, v6.7-rc6 |
|
| #
14059f66 |
| 15-Dec-2023 |
Matthew Wilcox (Oracle) <[email protected]> |
fs: remove the bh_end_io argument from __block_write_full_folio
All callers are passing end_buffer_async_write as this argument, so we can hardcode references to it within __block_write_full_folio()
fs: remove the bh_end_io argument from __block_write_full_folio
All callers are passing end_buffer_async_write as this argument, so we can hardcode references to it within __block_write_full_folio(). That lets us make end_buffer_async_write() static.
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Reviewed-by: Jens Axboe <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
| #
17bf23a9 |
| 15-Dec-2023 |
Matthew Wilcox (Oracle) <[email protected]> |
fs: convert block_write_full_page to block_write_full_folio
Convert the function to be compatible with writepage_t so that it can be passed to write_cache_pages() by blkdev. This removes a call to
fs: convert block_write_full_page to block_write_full_folio
Convert the function to be compatible with writepage_t so that it can be passed to write_cache_pages() by blkdev. This removes a call to compound_head(). We can also remove the function export as both callers are built-in.
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Reviewed-by: Jens Axboe <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
| #
f099c961 |
| 15-Dec-2023 |
Matthew Wilcox (Oracle) <[email protected]> |
fs: remove clean_page_buffers()
Patch series "Clean up the writeback paths".
Most of these patches verge on the trivial, converting filesystems that just use block_write_full_page() to use mpage_wr
fs: remove clean_page_buffers()
Patch series "Clean up the writeback paths".
Most of these patches verge on the trivial, converting filesystems that just use block_write_full_page() to use mpage_writepages(). But as we saw with Christoph's earlier patchset, there can be some "interesting" gotchas, and I clearly haven't tested the majority of filesystems I've touched here.
Patches 3 & 4 get rid of a lot of stack usage on architectures with larger page sizes; 1024 bytes on 64-bit systems with 64KiB pages. It starts to open the door to larger folio sizes on all architectures, but it's certainly not enough yet.
Patch 14 is kind of trivial, but it's nice to get that simplification in.
This patch (of 14):
This function has been unused since the removal of bdev_write_page().
Link: https://lkml.kernel.org/r/[email protected] Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Reviewed-by: Jens Axboe <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
|
Revision tags: v6.7-rc5, v6.7-rc4, v6.7-rc3, v6.7-rc2, v6.7-rc1, v6.6, v6.6-rc7 |
|
| #
0a88810d |
| 16-Oct-2023 |
Matthew Wilcox (Oracle) <[email protected]> |
buffer: remove folio_create_empty_buffers()
With all users converted, remove the old create_empty_buffers() and rename folio_create_empty_buffers() to create_empty_buffers().
Link: https://lkml.ker
buffer: remove folio_create_empty_buffers()
With all users converted, remove the old create_empty_buffers() and rename folio_create_empty_buffers() to create_empty_buffers().
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Cc: Andreas Gruenbacher <[email protected]> Cc: Pankaj Raghav <[email protected]> Cc: Ryusuke Konishi <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
| #
0217fbb0 |
| 16-Oct-2023 |
Matthew Wilcox (Oracle) <[email protected]> |
buffer: add get_nth_bh()
Extract this useful helper from nilfs_page_get_nth_block()
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracl
buffer: add get_nth_bh()
Extract this useful helper from nilfs_page_get_nth_block()
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Acked-by: Ryusuke Konishi <[email protected]> Cc: Andreas Gruenbacher <[email protected]> Cc: Pankaj Raghav <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
| #
3decb856 |
| 16-Oct-2023 |
Matthew Wilcox (Oracle) <[email protected]> |
buffer: make folio_create_empty_buffers() return a buffer_head
Patch series "Finish the create_empty_buffers() transition", v2.
Pankaj recently added folio_create_empty_buffers() as the folio equiv
buffer: make folio_create_empty_buffers() return a buffer_head
Patch series "Finish the create_empty_buffers() transition", v2.
Pankaj recently added folio_create_empty_buffers() as the folio equivalent to create_empty_buffers(). This patch set finishes the conversion by first converting all remaining filesystems to call folio_create_empty_buffers(), then renaming it back to create_empty_buffers(). I took the opportunity to make a few simplifications like making folio_create_empty_buffers() return the head buffer and extracting get_nth_bh() from nilfs2.
A few of the patches in this series aren't directly related to create_empty_buffers(), but I saw them while I was working on this and thought they'd be easy enough to add to this series. Compile-tested only, other than ext4.
This patch (of 26):
Almost all callers want to know the first BH that was allocated for this folio. We already have that handy, so return it.
Link: https://lkml.kernel.org/r/[email protected] Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Reviewed-by: Pankaj Raghav <[email protected]> Cc: Andreas Gruenbacher <[email protected]> Cc: Ryusuke Konishi <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
|
Revision tags: v6.6-rc6, v6.6-rc5, v6.6-rc4, v6.6-rc3, v6.6-rc2 |
|
| #
93b13eca |
| 14-Sep-2023 |
Matthew Wilcox (Oracle) <[email protected]> |
buffer: remove __getblk_gfp()
Inline it into __bread_gfp().
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]>
buffer: remove __getblk_gfp()
Inline it into __bread_gfp().
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Cc: Hui Zhu <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
| #
8a83ac54 |
| 14-Sep-2023 |
Matthew Wilcox (Oracle) <[email protected]> |
ext4: call bdev_getblk() from sb_getblk_gfp()
Most of the callers of sb_getblk_gfp() already assumed that they were passing the entire GFP flags to use. Fix up the two callers that didn't, and remo
ext4: call bdev_getblk() from sb_getblk_gfp()
Most of the callers of sb_getblk_gfp() already assumed that they were passing the entire GFP flags to use. Fix up the two callers that didn't, and remove the __GFP_NOFAIL from them since they both appear to correctly handle failure.
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Cc: Hui Zhu <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
| #
4b9c8b19 |
| 14-Sep-2023 |
Matthew Wilcox (Oracle) <[email protected]> |
buffer: convert sb_getblk() to call __getblk()
Now that __getblk() is in the right place in the file, it is trivial to call it from sb_getblk().
Link: https://lkml.kernel.org/r/20230914150011.84333
buffer: convert sb_getblk() to call __getblk()
Now that __getblk() is in the right place in the file, it is trivial to call it from sb_getblk().
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Cc: Hui Zhu <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
| #
c645e65c |
| 14-Sep-2023 |
Matthew Wilcox (Oracle) <[email protected]> |
buffer: convert getblk_unmovable() and __getblk() to use bdev_getblk()
Move these two functions up in the file for the benefit of the next patch, and pass in all of the GFP flags to use instead of t
buffer: convert getblk_unmovable() and __getblk() to use bdev_getblk()
Move these two functions up in the file for the benefit of the next patch, and pass in all of the GFP flags to use instead of the partial GFP flags used by __getblk_gfp().
Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Cc: Hui Zhu <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|
| #
3ed65f04 |
| 14-Sep-2023 |
Matthew Wilcox (Oracle) <[email protected]> |
buffer: hoist GFP flags from grow_dev_page() to __getblk_gfp()
grow_dev_page() is only called by grow_buffers(). grow_buffers() is only called by __getblk_slow() and __getblk_slow() is only called
buffer: hoist GFP flags from grow_dev_page() to __getblk_gfp()
grow_dev_page() is only called by grow_buffers(). grow_buffers() is only called by __getblk_slow() and __getblk_slow() is only called from __getblk_gfp(), so it is safe to move the GFP flags setting all the way up. With that done, add a new bdev_getblk() entry point that leaves the GFP flags the way the caller specified them.
[[email protected]: fix grow_dev_page() error handling] Link: https://lkml.kernel.org/r/[email protected] Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Cc: Hui Zhu <[email protected]> Cc: Dan Carpenter <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
show more ...
|