aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm/pblk-init.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/lightnvm/pblk-init.c')
-rw-r--r--drivers/lightnvm/pblk-init.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c
index 783887b891b7..ce561f5d48ce 100644
--- a/drivers/lightnvm/pblk-init.c
+++ b/drivers/lightnvm/pblk-init.c
@@ -20,6 +20,11 @@
20 20
21#include "pblk.h" 21#include "pblk.h"
22 22
23unsigned int write_buffer_size;
24
25module_param(write_buffer_size, uint, 0644);
26MODULE_PARM_DESC(write_buffer_size, "number of entries in a write buffer");
27
23static struct kmem_cache *pblk_ws_cache, *pblk_rec_cache, *pblk_g_rq_cache, 28static struct kmem_cache *pblk_ws_cache, *pblk_rec_cache, *pblk_g_rq_cache,
24 *pblk_w_rq_cache; 29 *pblk_w_rq_cache;
25static DECLARE_RWSEM(pblk_lock); 30static DECLARE_RWSEM(pblk_lock);
@@ -172,10 +177,15 @@ static int pblk_rwb_init(struct pblk *pblk)
172 struct nvm_tgt_dev *dev = pblk->dev; 177 struct nvm_tgt_dev *dev = pblk->dev;
173 struct nvm_geo *geo = &dev->geo; 178 struct nvm_geo *geo = &dev->geo;
174 struct pblk_rb_entry *entries; 179 struct pblk_rb_entry *entries;
175 unsigned long nr_entries; 180 unsigned long nr_entries, buffer_size;
176 unsigned int power_size, power_seg_sz; 181 unsigned int power_size, power_seg_sz;
177 182
178 nr_entries = pblk_rb_calculate_size(pblk->pgs_in_buffer); 183 if (write_buffer_size && (write_buffer_size > pblk->pgs_in_buffer))
184 buffer_size = write_buffer_size;
185 else
186 buffer_size = pblk->pgs_in_buffer;
187
188 nr_entries = pblk_rb_calculate_size(buffer_size);
179 189
180 entries = vzalloc(nr_entries * sizeof(struct pblk_rb_entry)); 190 entries = vzalloc(nr_entries * sizeof(struct pblk_rb_entry));
181 if (!entries) 191 if (!entries)