mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 15:29:16 +00:00
for-6.2-rc7-tag
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE8rQSAMVO+zA4DBdWxWXV+ddtWDsFAmPhSm8ACgkQxWXV+ddt WDtucA/+MYsOjRZtG76NFUzDVaWpgPJ0/M7lJlzQkhMpRZwjVheDBDCGDSlu/Xzq wLdvc4VR/o0xZD90KtnQNDPwq1jknBHynVUiWAUzt0FKWu81Jd5TvfRMmGKGQ5B2 CxSdfB2iatL/1L+DZ3q4uUXg8L+MDKTtjk2xOb648pXrT2MIy3u3j9ZhlDiYhvWx 6YlPyUehq7a9gLXq6TGmZjC4FUboqlI6hdf3iu3rHlCeFFXTPT4QKR9G8FpVRikc C7lH8X3qV2Sg6rGaFT3BIsamS/rQZHh3zOuj4EbI/n6ZXiSsr0Bo/2JAxgyGYoH0 u5LkIRIpry7E4Pn2vc9mj9T7C+tpN7BP+rQ9wL6r9KIbDB/c1hOsfOp+uZikukpY Lg9EvHksHyp0Fcrro3FxswRlK1Q5Q7Vx/+VUoYB93WCl8iQtEiVOH2LSoR+ZtSiD /Iitx8i1qcNO5DiFPcZgVC0WbrEfDoVqnwPrvY77BsBMA7i4l6Pe/n5Kw/vzRGmY ywo08fri7Daqv3HulBk3QrVGw4lHFPOuUpN9DkI3WfUoXTNeclzTPFS+27XnaXZn bP3OLf7hU7zTRC8FukWk9X4nPSTLT0xJ8LllGdMp1Wi9ntavqIDiJAviGsyqvneC FTgTKHFuvXvzgnji66Lo61wMEPRbac49diAKcmSiQwua/I7aPRY= =5fdr -----END PGP SIGNATURE----- Merge tag 'for-6.2-rc7-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux Pull btrfs fixes from David Sterba: - explicitly initialize zlib work memory to fix a KCSAN warning - limit number of send clones by maximum memory allocated - limit device size extent in case it device shrink races with chunk allocation - raid56 fixes: - fix copy&paste error in RAID6 stripe recovery - make error bitmap update atomic * tag 'for-6.2-rc7-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: btrfs: raid56: make error_bitmap update atomic btrfs: send: limit number of clones and allocated memory size btrfs: zlib: zero-initialize zlib workspace btrfs: limit device extents to the device size btrfs: raid56: fix stripes if vertical errors are found
This commit is contained in:
commit
66fcf74e5c
@ -1426,12 +1426,20 @@ static void rbio_update_error_bitmap(struct btrfs_raid_bio *rbio, struct bio *bi
|
||||
u32 bio_size = 0;
|
||||
struct bio_vec *bvec;
|
||||
struct bvec_iter_all iter_all;
|
||||
int i;
|
||||
|
||||
bio_for_each_segment_all(bvec, bio, iter_all)
|
||||
bio_size += bvec->bv_len;
|
||||
|
||||
bitmap_set(rbio->error_bitmap, total_sector_nr,
|
||||
bio_size >> rbio->bioc->fs_info->sectorsize_bits);
|
||||
/*
|
||||
* Since we can have multiple bios touching the error_bitmap, we cannot
|
||||
* call bitmap_set() without protection.
|
||||
*
|
||||
* Instead use set_bit() for each bit, as set_bit() itself is atomic.
|
||||
*/
|
||||
for (i = total_sector_nr; i < total_sector_nr +
|
||||
(bio_size >> rbio->bioc->fs_info->sectorsize_bits); i++)
|
||||
set_bit(i, rbio->error_bitmap);
|
||||
}
|
||||
|
||||
/* Verify the data sectors at read time. */
|
||||
@ -1886,7 +1894,7 @@ pstripe:
|
||||
sector->uptodate = 1;
|
||||
}
|
||||
if (failb >= 0) {
|
||||
ret = verify_one_sector(rbio, faila, sector_nr);
|
||||
ret = verify_one_sector(rbio, failb, sector_nr);
|
||||
if (ret < 0)
|
||||
goto cleanup;
|
||||
|
||||
|
@ -8073,10 +8073,10 @@ long btrfs_ioctl_send(struct inode *inode, struct btrfs_ioctl_send_args *arg)
|
||||
/*
|
||||
* Check that we don't overflow at later allocations, we request
|
||||
* clone_sources_count + 1 items, and compare to unsigned long inside
|
||||
* access_ok.
|
||||
* access_ok. Also set an upper limit for allocation size so this can't
|
||||
* easily exhaust memory. Max number of clone sources is about 200K.
|
||||
*/
|
||||
if (arg->clone_sources_count >
|
||||
ULONG_MAX / sizeof(struct clone_root) - 1) {
|
||||
if (arg->clone_sources_count > SZ_8M / sizeof(struct clone_root)) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
@ -1600,7 +1600,7 @@ again:
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
while (1) {
|
||||
while (search_start < search_end) {
|
||||
l = path->nodes[0];
|
||||
slot = path->slots[0];
|
||||
if (slot >= btrfs_header_nritems(l)) {
|
||||
@ -1623,6 +1623,9 @@ again:
|
||||
if (key.type != BTRFS_DEV_EXTENT_KEY)
|
||||
goto next;
|
||||
|
||||
if (key.offset > search_end)
|
||||
break;
|
||||
|
||||
if (key.offset > search_start) {
|
||||
hole_size = key.offset - search_start;
|
||||
dev_extent_hole_check(device, &search_start, &hole_size,
|
||||
@ -1683,6 +1686,7 @@ next:
|
||||
else
|
||||
ret = 0;
|
||||
|
||||
ASSERT(max_hole_start + max_hole_size <= search_end);
|
||||
out:
|
||||
btrfs_free_path(path);
|
||||
*start = max_hole_start;
|
||||
|
@ -63,7 +63,7 @@ struct list_head *zlib_alloc_workspace(unsigned int level)
|
||||
|
||||
workspacesize = max(zlib_deflate_workspacesize(MAX_WBITS, MAX_MEM_LEVEL),
|
||||
zlib_inflate_workspacesize());
|
||||
workspace->strm.workspace = kvmalloc(workspacesize, GFP_KERNEL);
|
||||
workspace->strm.workspace = kvzalloc(workspacesize, GFP_KERNEL);
|
||||
workspace->level = level;
|
||||
workspace->buf = NULL;
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user