mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
for-6.4-rc3-tag
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE8rQSAMVO+zA4DBdWxWXV+ddtWDsFAmRwqRsACgkQxWXV+ddt WDuCPQ//T8JVY6usnGF/Fw/3zbtDNvrdQLDfp3HovIg7gmLIBda0bT05w4Q46FUU l4BV0bHyTUNWPlXUmrrSmt8HipRe2z4Wjwc16azdLmSs5zf0FO1LbsCKDmM8Ncid LTi2jzyyb3E44ZzC/i7RCaBt+vYRb2ZmtZ/glh3K4H0GgTAYl1GxZoAoYgBnvmlG nvmlWWDaM2cRKaUREm75il37LKLIlW5jvdUFQrqwWNgUH72ay5/7SZxHywlk8x6b qwhhp+s6bMUNzi6CqE2SLnESjI9yl0l/0gLebhDXVulo0BiCrti+YLpueP4eQs1B yYXX3PvHOXhoN4tUQ4yDF9G57To4Gw1aiQOnWOOLcbyGG1ZgyekpoRRXh6r74LKt FDyWT+u/xd78by1km3VzqmvKtqHnRFNMYfP+MMDIhyhy5prKCWeVo7bC+2FP+89o kv9+0Z0w0lkLycFfLaewZkEv0/WY8GMuT7kptHQ2Ao6ulAvG+j97sgVBFGXJjeCr B1OAGdeTF79IV139bCxPA62cat87Zrh15mZN+y7U32Vs2JkOqbT0LTQGKoVs/TCI AyHCDb8oOfGiebibnEDrDNtubz7NFCq4ntZRmuv5FJ+l2d1wl6ZvsI+DoYP7Zide DLR7ZtPs1Yvm27xDjs+fVmMx4nuNGikEbPZPxJro1CjLVzCEt7k= =elHB -----END PGP SIGNATURE----- Merge tag 'for-6.4-rc3-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux Pull btrfs fixes from David Sterba: - handle memory allocation error in checksumming helper (reported by syzbot) - fix lockdep splat when aborting a transaction, add NOFS protection around invalidate_inode_pages2 that could allocate with GFP_KERNEL - reduce chances to hit an ENOSPC during scrub with RAID56 profiles * tag 'for-6.4-rc3-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: btrfs: use nofs when cleaning up aborted transactions btrfs: handle memory allocation failure in btrfs_csum_one_bio btrfs: scrub: try harder to mark RAID56 block groups read-only
This commit is contained in:
commit
b158dd941b
@ -2818,10 +2818,20 @@ int btrfs_inc_block_group_ro(struct btrfs_block_group *cache,
|
||||
}
|
||||
|
||||
ret = inc_block_group_ro(cache, 0);
|
||||
if (!do_chunk_alloc || ret == -ETXTBSY)
|
||||
goto unlock_out;
|
||||
if (!ret)
|
||||
goto out;
|
||||
if (ret == -ETXTBSY)
|
||||
goto unlock_out;
|
||||
|
||||
/*
|
||||
* Skip chunk alloction if the bg is SYSTEM, this is to avoid system
|
||||
* chunk allocation storm to exhaust the system chunk array. Otherwise
|
||||
* we still want to try our best to mark the block group read-only.
|
||||
*/
|
||||
if (!do_chunk_alloc && ret == -ENOSPC &&
|
||||
(cache->flags & BTRFS_BLOCK_GROUP_SYSTEM))
|
||||
goto unlock_out;
|
||||
|
||||
alloc_flags = btrfs_get_alloc_profile(fs_info, cache->space_info->flags);
|
||||
ret = btrfs_chunk_alloc(trans, alloc_flags, CHUNK_ALLOC_FORCE);
|
||||
if (ret < 0)
|
||||
|
@ -4936,7 +4936,11 @@ static void btrfs_destroy_delalloc_inodes(struct btrfs_root *root)
|
||||
*/
|
||||
inode = igrab(&btrfs_inode->vfs_inode);
|
||||
if (inode) {
|
||||
unsigned int nofs_flag;
|
||||
|
||||
nofs_flag = memalloc_nofs_save();
|
||||
invalidate_inode_pages2(inode->i_mapping);
|
||||
memalloc_nofs_restore(nofs_flag);
|
||||
iput(inode);
|
||||
}
|
||||
spin_lock(&root->delalloc_lock);
|
||||
@ -5042,7 +5046,12 @@ static void btrfs_cleanup_bg_io(struct btrfs_block_group *cache)
|
||||
|
||||
inode = cache->io_ctl.inode;
|
||||
if (inode) {
|
||||
unsigned int nofs_flag;
|
||||
|
||||
nofs_flag = memalloc_nofs_save();
|
||||
invalidate_inode_pages2(inode->i_mapping);
|
||||
memalloc_nofs_restore(nofs_flag);
|
||||
|
||||
BTRFS_I(inode)->generation = 0;
|
||||
cache->io_ctl.inode = NULL;
|
||||
iput(inode);
|
||||
|
@ -792,7 +792,9 @@ blk_status_t btrfs_csum_one_bio(struct btrfs_bio *bbio)
|
||||
sums = kvzalloc(btrfs_ordered_sum_size(fs_info,
|
||||
bytes_left), GFP_KERNEL);
|
||||
memalloc_nofs_restore(nofs_flag);
|
||||
BUG_ON(!sums); /* -ENOMEM */
|
||||
if (!sums)
|
||||
return BLK_STS_RESOURCE;
|
||||
|
||||
sums->len = bytes_left;
|
||||
ordered = btrfs_lookup_ordered_extent(inode,
|
||||
offset);
|
||||
|
@ -2518,13 +2518,20 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx,
|
||||
|
||||
if (ret == 0) {
|
||||
ro_set = 1;
|
||||
} else if (ret == -ENOSPC && !sctx->is_dev_replace) {
|
||||
} else if (ret == -ENOSPC && !sctx->is_dev_replace &&
|
||||
!(cache->flags & BTRFS_BLOCK_GROUP_RAID56_MASK)) {
|
||||
/*
|
||||
* btrfs_inc_block_group_ro return -ENOSPC when it
|
||||
* failed in creating new chunk for metadata.
|
||||
* It is not a problem for scrub, because
|
||||
* metadata are always cowed, and our scrub paused
|
||||
* commit_transactions.
|
||||
*
|
||||
* For RAID56 chunks, we have to mark them read-only
|
||||
* for scrub, as later we would use our own cache
|
||||
* out of RAID56 realm.
|
||||
* Thus we want the RAID56 bg to be marked RO to
|
||||
* prevent RMW from screwing up out cache.
|
||||
*/
|
||||
ro_set = 0;
|
||||
} else if (ret == -ETXTBSY) {
|
||||
|
Loading…
Reference in New Issue
Block a user