mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
for-7.2-rc6-tag
-----BEGIN PGP SIGNATURE----- iQJPBAABCgA5FiEE8rQSAMVO+zA4DBdWxWXV+ddtWDsFAmp01+cbFIAAAAAABAAO bWFudTIsMi41KzEuMTIsMiwyAAoJEMVl1fnXbVg7/cwQAJeUoeAH/B/0vc8sviP/ 0r0LLrGtULDfnmaxtrZf+63DcGOWzhOjddQ60pJwqBO3fWJbGc9+CokI/Kwd8Sj2 rtsYZshH0qOXYSL4hFOGR3ajtrcYUGfM36ZLYyhs1FUN6txv4qOpuxBTKCkG2Q9F acztMvAw2OkPFjQhnNZdP7Z87/kSF0vu4nh3OEJKr4Ih0TzoI92d8JWxB3NWtYbL yvLuF67La+89USQHrO7NgIIVOQew9CvSgty/OWsxgdBHV1yqOleMM+Tpbo4eZa+I PRrEosXfN/dVuOGbCz+vaPuzGLbl3qEMn60CHAxQ3lXRK5KkI7rW9DYkonjd1QCY 0kw6OGH5Dn4GE3/oJQvb/mJDaBC0mYntoZqtMdZ7F3Dm44RzAUy58FV8wRjCFduv MrDsCOEkwsKp0qbVJxwEnEU6WTVbD0W7tTXnt3rOnGFuFSgcvpZUrL5aZQaI4Zj+ iu1WaxAvkGvMLFIxa/8jlSq8u11PSybmzbSSs6rvtVp2Pf2R1E8vIn63tWsPia36 8cnQazI1D1RvUP/U1Gr2dYMRG29xvVc8qy8mhPXUPEAAdB/OTT1MU+VccLQm6Be+ v3PmUIljjBBKG2YYKrNnu9YJ198miN4LpPxjynnBQ+7O53cd/rFwH4QFL9BdyY+i Bn2/Lm/b3gZMZ7NI243akS4b =Nzlf -----END PGP SIGNATURE----- Merge tag 'for-7.2-rc6-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux Pull btrfs fixes from David Sterba: - fix leak in encoded ioctl write - disable large folios on systems with highmem - disable block size > page size when there's no transparent hugepage support (under experimental config) - reject compressed inline extents without valid LZO headers - properly initialize cached inode mapping (if block size > page size) * tag 'for-7.2-rc6-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: btrfs: initialize inode mapping flags for cached inodes btrfs: disable bs > ps support if no transparent hugepage support btrfs: fix memory leak in btrfs_do_encoded_write() btrfs: lzo: reject inline extents without valid headers btrfs: disable large folios for systems with highmem
This commit is contained in:
commit
6335463488
|
|
@ -106,7 +106,8 @@ config BTRFS_EXPERIMENTAL
|
|||
|
||||
- extent tree v2 - complex rework of extent tracking
|
||||
|
||||
- block size > page size support
|
||||
- block size > page size support - needs transparent huge page and
|
||||
non-HIGHMEM system
|
||||
|
||||
- huge folios for data - folios can be as large as 2MiB now
|
||||
|
||||
|
|
|
|||
|
|
@ -3468,7 +3468,15 @@ int __cold open_ctree(struct super_block *sb, struct btrfs_fs_devices *fs_device
|
|||
fs_info->sectorsize = sectorsize;
|
||||
fs_info->sectorsize_bits = ilog2(sectorsize);
|
||||
fs_info->block_min_order = ilog2(round_up(sectorsize, PAGE_SIZE) >> PAGE_SHIFT);
|
||||
fs_info->block_max_order = calc_block_max_order(fs_info->sectorsize_bits);
|
||||
/*
|
||||
* For HIGHMEM, a large folio cannot be mapped in one go, breaking a lot
|
||||
* of basic assumptions for btrfs IOs.
|
||||
* Disable large folios for such 32-bit systems.
|
||||
*/
|
||||
if (IS_ENABLED(CONFIG_HIGHMEM))
|
||||
fs_info->block_max_order = fs_info->block_min_order;
|
||||
else
|
||||
fs_info->block_max_order = calc_block_max_order(fs_info->sectorsize_bits);
|
||||
fs_info->csums_per_leaf = BTRFS_MAX_ITEM_SIZE(fs_info) / fs_info->csum_size;
|
||||
fs_info->stripesize = stripesize;
|
||||
fs_info->fs_devices->fs_info = fs_info;
|
||||
|
|
|
|||
|
|
@ -166,9 +166,17 @@ bool __attribute_const__ btrfs_supported_blocksize(u32 blocksize)
|
|||
*
|
||||
* Considering HIGHMEM is such a pain to deal with and it's going
|
||||
* to be deprecated eventually, just reject HIGHMEM && bs > ps cases.
|
||||
*
|
||||
* Finally, for bs > ps cases, we need to set the minimal folio order,
|
||||
* which requires transparent hugepage.
|
||||
*/
|
||||
if (IS_ENABLED(CONFIG_HIGHMEM) && blocksize > PAGE_SIZE)
|
||||
return false;
|
||||
if (blocksize > PAGE_SIZE) {
|
||||
if (IS_ENABLED(CONFIG_HIGHMEM))
|
||||
return false;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
#endif
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -3938,10 +3938,11 @@ static int btrfs_read_locked_inode(struct btrfs_inode *inode, struct btrfs_path
|
|||
|
||||
btrfs_inode_split_flags(btrfs_inode_flags(leaf, inode_item),
|
||||
&inode->flags, &inode->ro_flags);
|
||||
|
||||
cache_index:
|
||||
btrfs_update_inode_mapping_flags(inode);
|
||||
btrfs_set_inode_mapping_order(inode);
|
||||
|
||||
cache_index:
|
||||
/*
|
||||
* If we were modified in the current generation and evicted from memory
|
||||
* and then re-read we need to do a full sync since we don't have any
|
||||
|
|
@ -9954,6 +9955,7 @@ ssize_t btrfs_do_encoded_write(struct kiocb *iocb, struct iov_iter *from,
|
|||
if (cb)
|
||||
cleanup_compressed_bio(cb);
|
||||
out:
|
||||
extent_changeset_free(data_reserved);
|
||||
if (ret >= 0)
|
||||
iocb->ki_pos += encoded->len;
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -552,9 +552,10 @@ int lzo_decompress(struct list_head *ws, const u8 *data_in,
|
|||
size_t max_segment_len = workspace_buf_length(fs_info);
|
||||
int ret;
|
||||
|
||||
if (unlikely(srclen < LZO_LEN || srclen > max_segment_len + LZO_LEN * 2)) {
|
||||
if (unlikely(srclen <= LZO_LEN * 2 ||
|
||||
srclen > max_segment_len + LZO_LEN * 2)) {
|
||||
btrfs_err(fs_info, "invalid lzo header length, has %zu expect (%u, %zu)",
|
||||
srclen, LZO_LEN, max_segment_len + LZO_LEN * 2);
|
||||
srclen, LZO_LEN * 2, max_segment_len + LZO_LEN * 2);
|
||||
return -EUCLEAN;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user