aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/md/dm-bufio.c21
1 files changed, 3 insertions, 18 deletions
diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
index 87795a361d09..6dd465fa90a7 100644
--- a/drivers/md/dm-bufio.c
+++ b/drivers/md/dm-bufio.c
@@ -173,7 +173,6 @@ struct dm_buffer {
173/*----------------------------------------------------------------*/ 173/*----------------------------------------------------------------*/
174 174
175static struct kmem_cache *dm_bufio_caches[PAGE_SHIFT - SECTOR_SHIFT]; 175static struct kmem_cache *dm_bufio_caches[PAGE_SHIFT - SECTOR_SHIFT];
176static char *dm_bufio_cache_names[PAGE_SHIFT - SECTOR_SHIFT];
177 176
178static inline int dm_bufio_cache_index(struct dm_bufio_client *c) 177static inline int dm_bufio_cache_index(struct dm_bufio_client *c)
179{ 178{
@@ -185,7 +184,6 @@ static inline int dm_bufio_cache_index(struct dm_bufio_client *c)
185} 184}
186 185
187#define DM_BUFIO_CACHE(c) (dm_bufio_caches[dm_bufio_cache_index(c)]) 186#define DM_BUFIO_CACHE(c) (dm_bufio_caches[dm_bufio_cache_index(c)])
188#define DM_BUFIO_CACHE_NAME(c) (dm_bufio_cache_names[dm_bufio_cache_index(c)])
189 187
190#define dm_bufio_in_request() (!!current->bio_list) 188#define dm_bufio_in_request() (!!current->bio_list)
191 189
@@ -1703,19 +1701,10 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign
1703 1701
1704 mutex_lock(&dm_bufio_clients_lock); 1702 mutex_lock(&dm_bufio_clients_lock);
1705 if (c->blocks_per_page_bits) { 1703 if (c->blocks_per_page_bits) {
1706 if (!DM_BUFIO_CACHE_NAME(c)) {
1707 DM_BUFIO_CACHE_NAME(c) = kasprintf(GFP_KERNEL, "dm_bufio_cache-%u", c->block_size);
1708 if (!DM_BUFIO_CACHE_NAME(c)) {
1709 r = -ENOMEM;
1710 mutex_unlock(&dm_bufio_clients_lock);
1711 goto bad;
1712 }
1713 }
1714
1715 if (!DM_BUFIO_CACHE(c)) { 1704 if (!DM_BUFIO_CACHE(c)) {
1716 DM_BUFIO_CACHE(c) = kmem_cache_create(DM_BUFIO_CACHE_NAME(c), 1705 char name[26];
1717 c->block_size, 1706 snprintf(name, sizeof name, "dm_bufio_cache-%u", c->block_size);
1718 c->block_size, 0, NULL); 1707 DM_BUFIO_CACHE(c) = kmem_cache_create(name, c->block_size, c->block_size, 0, NULL);
1719 if (!DM_BUFIO_CACHE(c)) { 1708 if (!DM_BUFIO_CACHE(c)) {
1720 r = -ENOMEM; 1709 r = -ENOMEM;
1721 mutex_unlock(&dm_bufio_clients_lock); 1710 mutex_unlock(&dm_bufio_clients_lock);
@@ -1908,7 +1897,6 @@ static int __init dm_bufio_init(void)
1908 dm_bufio_current_allocated = 0; 1897 dm_bufio_current_allocated = 0;
1909 1898
1910 memset(&dm_bufio_caches, 0, sizeof dm_bufio_caches); 1899 memset(&dm_bufio_caches, 0, sizeof dm_bufio_caches);
1911 memset(&dm_bufio_cache_names, 0, sizeof dm_bufio_cache_names);
1912 1900
1913 mem = (__u64)mult_frac(totalram_pages - totalhigh_pages, 1901 mem = (__u64)mult_frac(totalram_pages - totalhigh_pages,
1914 DM_BUFIO_MEMORY_PERCENT, 100) << PAGE_SHIFT; 1902 DM_BUFIO_MEMORY_PERCENT, 100) << PAGE_SHIFT;
@@ -1952,9 +1940,6 @@ static void __exit dm_bufio_exit(void)
1952 for (i = 0; i < ARRAY_SIZE(dm_bufio_caches); i++) 1940 for (i = 0; i < ARRAY_SIZE(dm_bufio_caches); i++)
1953 kmem_cache_destroy(dm_bufio_caches[i]); 1941 kmem_cache_destroy(dm_bufio_caches[i]);
1954 1942
1955 for (i = 0; i < ARRAY_SIZE(dm_bufio_cache_names); i++)
1956 kfree(dm_bufio_cache_names[i]);
1957
1958 if (dm_bufio_client_count) { 1943 if (dm_bufio_client_count) {
1959 DMCRIT("%s: dm_bufio_client_count leaked: %d", 1944 DMCRIT("%s: dm_bufio_client_count leaked: %d",
1960 __func__, dm_bufio_client_count); 1945 __func__, dm_bufio_client_count);