mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:38:03 +00:00
dm-bufio: fix warnings about duplicate slab caches
The commit4c39529663
adds a warning about duplicate cache names if CONFIG_DEBUG_VM is selected. These warnings are triggered by the dm-bufio code. The dm-bufio code allocates a slab cache with each client. It is not possible to preallocate the caches in the module init function because the size of auxiliary per-buffer data is not known at this point. So, this commit changes dm-bufio so that it appends a unique atomic value to the cache name, to avoid the warnings. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Fixes:4c39529663
("slab: Warn on duplicate cache names when DEBUG_VM=y")
This commit is contained in:
parent
2d5404caa8
commit
42964e4b5e
@ -2471,7 +2471,8 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign
|
||||
int r;
|
||||
unsigned int num_locks;
|
||||
struct dm_bufio_client *c;
|
||||
char slab_name[27];
|
||||
char slab_name[64];
|
||||
static atomic_t seqno = ATOMIC_INIT(0);
|
||||
|
||||
if (!block_size || block_size & ((1 << SECTOR_SHIFT) - 1)) {
|
||||
DMERR("%s: block size not specified or is not multiple of 512b", __func__);
|
||||
@ -2522,7 +2523,8 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign
|
||||
(block_size < PAGE_SIZE || !is_power_of_2(block_size))) {
|
||||
unsigned int align = min(1U << __ffs(block_size), (unsigned int)PAGE_SIZE);
|
||||
|
||||
snprintf(slab_name, sizeof(slab_name), "dm_bufio_cache-%u", block_size);
|
||||
snprintf(slab_name, sizeof(slab_name), "dm_bufio_cache-%u-%u",
|
||||
block_size, atomic_inc_return(&seqno));
|
||||
c->slab_cache = kmem_cache_create(slab_name, block_size, align,
|
||||
SLAB_RECLAIM_ACCOUNT, NULL);
|
||||
if (!c->slab_cache) {
|
||||
@ -2531,9 +2533,11 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign
|
||||
}
|
||||
}
|
||||
if (aux_size)
|
||||
snprintf(slab_name, sizeof(slab_name), "dm_bufio_buffer-%u", aux_size);
|
||||
snprintf(slab_name, sizeof(slab_name), "dm_bufio_buffer-%u-%u",
|
||||
aux_size, atomic_inc_return(&seqno));
|
||||
else
|
||||
snprintf(slab_name, sizeof(slab_name), "dm_bufio_buffer");
|
||||
snprintf(slab_name, sizeof(slab_name), "dm_bufio_buffer-%u",
|
||||
atomic_inc_return(&seqno));
|
||||
c->slab_buffer = kmem_cache_create(slab_name, sizeof(struct dm_buffer) + aux_size,
|
||||
0, SLAB_RECLAIM_ACCOUNT, NULL);
|
||||
if (!c->slab_buffer) {
|
||||
|
Loading…
Reference in New Issue
Block a user