mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
for-6.11-rc2-tag
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE8rQSAMVO+zA4DBdWxWXV+ddtWDsFAmazbGYACgkQxWXV+ddt WDsQAw//Z3XjjylTZPuHNk/AiMe5oochxB5T9ZracQOzG0o70gj1w/UQIZBkSzp1 66g8I4YdbwvEXKDg9Oi/GPDSON3GuhAiLXp+0Y/reeD/totgvrhROuJ3mIk5CZ0H B4fIKH3xCKLQan26Opgju4qjum7+AR7ekFveM6GicxXXb3eAYALgoEFt63eZjZVu 7myak78gmBuK5QdGHH+onEhn+HfC57UTGBqu1bJsSOQC7dANkU+WzmgbH6FeOHqx 2T/lN/tu2tBBoF4zMvC472Zjmj4PnubNQnwwv0oJ8Z2Y0yIY95joZV0uXIXO72oz BMQC6s0cltiTn1Tfe4iIWn+ZNjcfGAZO7aoD5NcJb2F/Mz5mZuMhtq3BND0wJ8/+ SuYk7PxX7tcOaFrDAn3Ne7XHsD7r5lLkFICXkzcNG4dqkBUxR3dN4Oi8KKMFrgCP kTpf0/lAkYKYSrU86Yn1zhwRLaH8jm3fulVUY8i/p0tJnpsW8AmeME1Sk97Bhxbb y6zt8+MPscPuQi3jPsBevaYd8Q8BIT34vVtU/jNmGAyqEv1wVYQRRK2Ma4sJJfNk EEQV9i4VqXWLc17dcWVZrG6lEsVRIIBE/2Adhth6Myq73bkunpB9ZNNNZApf1T2j Wn5gPzkuQd6FWrXe8V7oSN9rT1OPn9uHL6BmSUWhHUCuFeATgoc= =03Gf -----END PGP SIGNATURE----- Merge tag 'for-6.11-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux Pull btrfs fixes from David Sterba: - fix double inode unlock for direct IO sync writes (reported by syzbot) - fix root tree id/name map definitions, don't use fixed size buffers for name (reported by -Werror=unterminated-string-initialization) - fix qgroup reserve leaks in bufferd write path - update scrub status structure more often so it can be reported in user space more accurately and let 'resume' not repeat work - in preparation to remove space cache v1 in the future print a warning if it's detected * tag 'for-6.11-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: btrfs: avoid using fixed char array size for tree names btrfs: fix double inode unlock for direct IO sync writes btrfs: emit a warning about space cache v1 being deprecated btrfs: fix qgroup reserve leaks in cow_file_range btrfs: implement launder_folio for clearing dirty page reserve btrfs: scrub: update last_physical after scrubbing one stripe btrfs: factor out stripe length calculation into a helper
This commit is contained in:
commit
6a0e382640
@ -1868,7 +1868,10 @@ out:
|
||||
|
||||
out_release_extents:
|
||||
btrfs_release_log_ctx_extents(&ctx);
|
||||
btrfs_inode_unlock(inode, BTRFS_ILOCK_MMAP);
|
||||
if (skip_ilock)
|
||||
up_write(&inode->i_mmap_lock);
|
||||
else
|
||||
btrfs_inode_unlock(inode, BTRFS_ILOCK_MMAP);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -1585,6 +1585,7 @@ out_unlock:
|
||||
locked_page, &cached,
|
||||
clear_bits,
|
||||
page_ops);
|
||||
btrfs_qgroup_free_data(inode, NULL, start, cur_alloc_size, NULL);
|
||||
start += cur_alloc_size;
|
||||
}
|
||||
|
||||
@ -1598,6 +1599,7 @@ out_unlock:
|
||||
clear_bits |= EXTENT_CLEAR_DATA_RESV;
|
||||
extent_clear_unlock_delalloc(inode, start, end, locked_page,
|
||||
&cached, clear_bits, page_ops);
|
||||
btrfs_qgroup_free_data(inode, NULL, start, cur_alloc_size, NULL);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -2259,6 +2261,7 @@ error:
|
||||
EXTENT_DO_ACCOUNTING, PAGE_UNLOCK |
|
||||
PAGE_START_WRITEBACK |
|
||||
PAGE_END_WRITEBACK);
|
||||
btrfs_qgroup_free_data(inode, NULL, cur_offset, end - cur_offset + 1, NULL);
|
||||
}
|
||||
btrfs_free_path(path);
|
||||
return ret;
|
||||
@ -7202,6 +7205,12 @@ static void wait_subpage_spinlock(struct page *page)
|
||||
spin_unlock_irq(&subpage->lock);
|
||||
}
|
||||
|
||||
static int btrfs_launder_folio(struct folio *folio)
|
||||
{
|
||||
return btrfs_qgroup_free_data(folio_to_inode(folio), NULL, folio_pos(folio),
|
||||
PAGE_SIZE, NULL);
|
||||
}
|
||||
|
||||
static bool __btrfs_release_folio(struct folio *folio, gfp_t gfp_flags)
|
||||
{
|
||||
if (try_release_extent_mapping(&folio->page, gfp_flags)) {
|
||||
@ -10137,6 +10146,7 @@ static const struct address_space_operations btrfs_aops = {
|
||||
.writepages = btrfs_writepages,
|
||||
.readahead = btrfs_readahead,
|
||||
.invalidate_folio = btrfs_invalidate_folio,
|
||||
.launder_folio = btrfs_launder_folio,
|
||||
.release_folio = btrfs_release_folio,
|
||||
.migrate_folio = btrfs_migrate_folio,
|
||||
.dirty_folio = filemap_dirty_folio,
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
struct root_name_map {
|
||||
u64 id;
|
||||
char name[16];
|
||||
const char *name;
|
||||
};
|
||||
|
||||
static const struct root_name_map root_map[] = {
|
||||
|
@ -1648,14 +1648,20 @@ static void scrub_reset_stripe(struct scrub_stripe *stripe)
|
||||
}
|
||||
}
|
||||
|
||||
static u32 stripe_length(const struct scrub_stripe *stripe)
|
||||
{
|
||||
ASSERT(stripe->bg);
|
||||
|
||||
return min(BTRFS_STRIPE_LEN,
|
||||
stripe->bg->start + stripe->bg->length - stripe->logical);
|
||||
}
|
||||
|
||||
static void scrub_submit_extent_sector_read(struct scrub_ctx *sctx,
|
||||
struct scrub_stripe *stripe)
|
||||
{
|
||||
struct btrfs_fs_info *fs_info = stripe->bg->fs_info;
|
||||
struct btrfs_bio *bbio = NULL;
|
||||
unsigned int nr_sectors = min(BTRFS_STRIPE_LEN, stripe->bg->start +
|
||||
stripe->bg->length - stripe->logical) >>
|
||||
fs_info->sectorsize_bits;
|
||||
unsigned int nr_sectors = stripe_length(stripe) >> fs_info->sectorsize_bits;
|
||||
u64 stripe_len = BTRFS_STRIPE_LEN;
|
||||
int mirror = stripe->mirror_num;
|
||||
int i;
|
||||
@ -1729,9 +1735,7 @@ static void scrub_submit_initial_read(struct scrub_ctx *sctx,
|
||||
{
|
||||
struct btrfs_fs_info *fs_info = sctx->fs_info;
|
||||
struct btrfs_bio *bbio;
|
||||
unsigned int nr_sectors = min(BTRFS_STRIPE_LEN, stripe->bg->start +
|
||||
stripe->bg->length - stripe->logical) >>
|
||||
fs_info->sectorsize_bits;
|
||||
unsigned int nr_sectors = stripe_length(stripe) >> fs_info->sectorsize_bits;
|
||||
int mirror = stripe->mirror_num;
|
||||
|
||||
ASSERT(stripe->bg);
|
||||
@ -1871,6 +1875,9 @@ static int flush_scrub_stripes(struct scrub_ctx *sctx)
|
||||
stripe = &sctx->stripes[i];
|
||||
|
||||
wait_scrub_stripe_io(stripe);
|
||||
spin_lock(&sctx->stat_lock);
|
||||
sctx->stat.last_physical = stripe->physical + stripe_length(stripe);
|
||||
spin_unlock(&sctx->stat_lock);
|
||||
scrub_reset_stripe(stripe);
|
||||
}
|
||||
out:
|
||||
@ -2139,7 +2146,9 @@ static int scrub_simple_mirror(struct scrub_ctx *sctx,
|
||||
cur_physical, &found_logical);
|
||||
if (ret > 0) {
|
||||
/* No more extent, just update the accounting */
|
||||
spin_lock(&sctx->stat_lock);
|
||||
sctx->stat.last_physical = physical + logical_length;
|
||||
spin_unlock(&sctx->stat_lock);
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
@ -2336,6 +2345,10 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,
|
||||
stripe_logical += chunk_logical;
|
||||
ret = scrub_raid56_parity_stripe(sctx, scrub_dev, bg,
|
||||
map, stripe_logical);
|
||||
spin_lock(&sctx->stat_lock);
|
||||
sctx->stat.last_physical = min(physical + BTRFS_STRIPE_LEN,
|
||||
physical_end);
|
||||
spin_unlock(&sctx->stat_lock);
|
||||
if (ret)
|
||||
goto out;
|
||||
goto next;
|
||||
|
@ -683,8 +683,11 @@ bool btrfs_check_options(const struct btrfs_fs_info *info,
|
||||
ret = false;
|
||||
|
||||
if (!test_bit(BTRFS_FS_STATE_REMOUNTING, &info->fs_state)) {
|
||||
if (btrfs_raw_test_opt(*mount_opt, SPACE_CACHE))
|
||||
if (btrfs_raw_test_opt(*mount_opt, SPACE_CACHE)) {
|
||||
btrfs_info(info, "disk space caching is enabled");
|
||||
btrfs_warn(info,
|
||||
"space cache v1 is being deprecated and will be removed in a future release, please use -o space_cache=v2");
|
||||
}
|
||||
if (btrfs_raw_test_opt(*mount_opt, FREE_SPACE_TREE))
|
||||
btrfs_info(info, "using free-space-tree");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user