Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'for-6.15/dm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm

Pull device mapper fixes from Mikulas Patocka:

- always update the array size in realloc_argv on success

- dm-integrity: fix a warning on invalid table line

- dm-bufio: don't schedule in atomic context

- Fix W=1 build with clang

* tag 'for-6.15/dm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
dm: always update the array size in realloc_argv on success
dm-integrity: fix a warning on invalid table line
dm-bufio: don't schedule in atomic context
dm table: Fix W=1 build warning when mempool_needs_integrity is unused

+12 -7
+8 -1
drivers/md/dm-bufio.c
··· 68 68 #define LIST_DIRTY 1 69 69 #define LIST_SIZE 2 70 70 71 + #define SCAN_RESCHED_CYCLE 16 72 + 71 73 /*--------------------------------------------------------------*/ 72 74 73 75 /* ··· 2426 2424 2427 2425 atomic_long_dec(&c->need_shrink); 2428 2426 freed++; 2429 - cond_resched(); 2427 + 2428 + if (unlikely(freed % SCAN_RESCHED_CYCLE == 0)) { 2429 + dm_bufio_unlock(c); 2430 + cond_resched(); 2431 + dm_bufio_lock(c); 2432 + } 2430 2433 } 2431 2434 } 2432 2435 }
+1 -1
drivers/md/dm-integrity.c
··· 5164 5164 BUG_ON(!RB_EMPTY_ROOT(&ic->in_progress)); 5165 5165 BUG_ON(!list_empty(&ic->wait_list)); 5166 5166 5167 - if (ic->mode == 'B') 5167 + if (ic->mode == 'B' && ic->bitmap_flush_work.work.func) 5168 5168 cancel_delayed_work_sync(&ic->bitmap_flush_work); 5169 5169 if (ic->metadata_wq) 5170 5170 destroy_workqueue(ic->metadata_wq);
+3 -5
drivers/md/dm-table.c
··· 523 523 gfp = GFP_NOIO; 524 524 } 525 525 argv = kmalloc_array(new_size, sizeof(*argv), gfp); 526 - if (argv && old_argv) { 527 - memcpy(argv, old_argv, *size * sizeof(*argv)); 526 + if (argv) { 528 527 *size = new_size; 528 + if (old_argv) 529 + memcpy(argv, old_argv, *size * sizeof(*argv)); 529 530 } 530 531 531 532 kfree(old_argv); ··· 1050 1049 unsigned int min_pool_size = 0, pool_size; 1051 1050 struct dm_md_mempools *pools; 1052 1051 unsigned int bioset_flags = 0; 1053 - bool mempool_needs_integrity = t->integrity_supported; 1054 1052 1055 1053 if (unlikely(type == DM_TYPE_NONE)) { 1056 1054 DMERR("no table type is set, can't allocate mempools"); ··· 1074 1074 1075 1075 per_io_data_size = max(per_io_data_size, ti->per_io_data_size); 1076 1076 min_pool_size = max(min_pool_size, ti->num_flush_bios); 1077 - 1078 - mempool_needs_integrity |= ti->mempool_needs_integrity; 1079 1077 } 1080 1078 pool_size = max(dm_get_reserved_bio_based_ios(), min_pool_size); 1081 1079 front_pad = roundup(per_io_data_size,