struct pblk_line_meta *lm = &pblk->lm;
        int blk_in_line = atomic_read(&line->blk_in_line);
 
-       line->map_bitmap = mempool_alloc(pblk->line_meta_pool, GFP_ATOMIC);
+       line->map_bitmap = kzalloc(lm->sec_bitmap_len, GFP_ATOMIC);
        if (!line->map_bitmap)
                return -ENOMEM;
-       memset(line->map_bitmap, 0, lm->sec_bitmap_len);
 
-       /* invalid_bitmap is special since it is used when line is closed. No
-        * need to zeroized; it will be initialized using bb info form
-        * map_bitmap
-        */
-       line->invalid_bitmap = mempool_alloc(pblk->line_meta_pool, GFP_ATOMIC);
+       /* will be initialized using bb info from map_bitmap */
+       line->invalid_bitmap = kmalloc(lm->sec_bitmap_len, GFP_ATOMIC);
        if (!line->invalid_bitmap) {
-               mempool_free(line->map_bitmap, pblk->line_meta_pool);
+               kfree(line->map_bitmap);
                return -ENOMEM;
        }
 
        spin_lock(&line->lock);
        if (line->state != PBLK_LINESTATE_FREE) {
-               mempool_free(line->invalid_bitmap, pblk->line_meta_pool);
-               mempool_free(line->map_bitmap, pblk->line_meta_pool);
+               kfree(line->map_bitmap);
+               kfree(line->invalid_bitmap);
                spin_unlock(&line->lock);
                WARN(1, "pblk: corrupted line %d, state %d\n",
                                                        line->id, line->state);
 
 void pblk_line_recov_close(struct pblk *pblk, struct pblk_line *line)
 {
-       mempool_free(line->map_bitmap, pblk->line_meta_pool);
+       kfree(line->map_bitmap);
        line->map_bitmap = NULL;
        line->smeta = NULL;
        line->emeta = NULL;
 
 void pblk_line_free(struct pblk *pblk, struct pblk_line *line)
 {
-       if (line->map_bitmap)
-               mempool_free(line->map_bitmap, pblk->line_meta_pool);
-       if (line->invalid_bitmap)
-               mempool_free(line->invalid_bitmap, pblk->line_meta_pool);
+       kfree(line->map_bitmap);
+       kfree(line->invalid_bitmap);
 
        *line->vsc = cpu_to_le32(EMPTY_ENTRY);
 
 
        list_add_tail(&line->list, move_list);
 
-       mempool_free(line->map_bitmap, pblk->line_meta_pool);
+       kfree(line->map_bitmap);
        line->map_bitmap = NULL;
        line->smeta = NULL;
        line->emeta = NULL;
 
 #include "pblk.h"
 
 static struct kmem_cache *pblk_ws_cache, *pblk_rec_cache, *pblk_g_rq_cache,
-                               *pblk_w_rq_cache, *pblk_line_meta_cache;
+                               *pblk_w_rq_cache;
 static DECLARE_RWSEM(pblk_lock);
 struct bio_set *pblk_bio_set;
 
 
 static int pblk_init_global_caches(struct pblk *pblk)
 {
-       char cache_name[PBLK_CACHE_NAME_LEN];
-
        down_write(&pblk_lock);
        pblk_ws_cache = kmem_cache_create("pblk_blk_ws",
                                sizeof(struct pblk_line_ws), 0, 0, NULL);
                up_write(&pblk_lock);
                return -ENOMEM;
        }
-
-       snprintf(cache_name, sizeof(cache_name), "pblk_line_m_%s",
-                                                       pblk->disk->disk_name);
-       pblk_line_meta_cache = kmem_cache_create(cache_name,
-                               pblk->lm.sec_bitmap_len, 0, 0, NULL);
-       if (!pblk_line_meta_cache) {
-               kmem_cache_destroy(pblk_ws_cache);
-               kmem_cache_destroy(pblk_rec_cache);
-               kmem_cache_destroy(pblk_g_rq_cache);
-               kmem_cache_destroy(pblk_w_rq_cache);
-               up_write(&pblk_lock);
-               return -ENOMEM;
-       }
        up_write(&pblk_lock);
 
        return 0;
        if (!pblk->w_rq_pool)
                goto free_e_rq_pool;
 
-       pblk->line_meta_pool =
-                       mempool_create_slab_pool(PBLK_META_POOL_SIZE,
-                                                       pblk_line_meta_cache);
-       if (!pblk->line_meta_pool)
-               goto free_w_rq_pool;
-
        pblk->close_wq = alloc_workqueue("pblk-close-wq",
                        WQ_MEM_RECLAIM | WQ_UNBOUND, PBLK_NR_CLOSE_JOBS);
        if (!pblk->close_wq)
-               goto free_line_meta_pool;
+               goto free_w_rq_pool;
 
        pblk->bb_wq = alloc_workqueue("pblk-bb-wq",
                        WQ_MEM_RECLAIM | WQ_UNBOUND, 0);
        destroy_workqueue(pblk->bb_wq);
 free_close_wq:
        destroy_workqueue(pblk->close_wq);
-free_line_meta_pool:
-       mempool_destroy(pblk->line_meta_pool);
 free_w_rq_pool:
        mempool_destroy(pblk->w_rq_pool);
 free_e_rq_pool:
        mempool_destroy(pblk->r_rq_pool);
        mempool_destroy(pblk->e_rq_pool);
        mempool_destroy(pblk->w_rq_pool);
-       mempool_destroy(pblk->line_meta_pool);
 
        kmem_cache_destroy(pblk_ws_cache);
        kmem_cache_destroy(pblk_rec_cache);
        kmem_cache_destroy(pblk_g_rq_cache);
        kmem_cache_destroy(pblk_w_rq_cache);
-       kmem_cache_destroy(pblk_line_meta_cache);
 }
 
 static void pblk_luns_free(struct pblk *pblk)
 
                        list_move_tail(&line->list, move_list);
                        spin_unlock(&l_mg->gc_lock);
 
-                       mempool_free(line->map_bitmap, pblk->line_meta_pool);
+                       kfree(line->map_bitmap);
                        line->map_bitmap = NULL;
                        line->smeta = NULL;
                        line->emeta = NULL;
 
        if (emeta->mem >= lm->emeta_len[0]) {
                spin_lock(&l_mg->close_lock);
                list_del(&meta_line->list);
-               WARN(!bitmap_full(meta_line->map_bitmap, lm->sec_per_line),
-                               "pblk: corrupt meta line %d\n", meta_line->id);
                spin_unlock(&l_mg->close_lock);
        }
 
                return 0;
        }
        meta_line = list_first_entry(&l_mg->emeta_list, struct pblk_line, list);
-       if (bitmap_full(meta_line->map_bitmap, lm->sec_per_line))
+       if (meta_line->emeta->mem >= lm->emeta_len[0])
                goto retry;
        spin_unlock(&l_mg->close_lock);
 
 
 #define PBLK_MAX_REQ_ADDRS (64)
 #define PBLK_MAX_REQ_ADDRS_PW (6)
 
-#define PBLK_META_POOL_SIZE (128)
-
 #define PBLK_NR_CLOSE_JOBS (4)
 
 #define PBLK_CACHE_NAME_LEN (DISK_NAME_LEN + 16)
        mempool_t *r_rq_pool;
        mempool_t *w_rq_pool;
        mempool_t *e_rq_pool;
-       mempool_t *line_meta_pool;
 
        struct workqueue_struct *close_wq;
        struct workqueue_struct *bb_wq;