diff options
Diffstat (limited to 'drivers/lightnvm/pblk-init.c')
-rw-r--r-- | drivers/lightnvm/pblk-init.c | 14 |
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 | ||
23 | unsigned int write_buffer_size; | ||
24 | |||
25 | module_param(write_buffer_size, uint, 0644); | ||
26 | MODULE_PARM_DESC(write_buffer_size, "number of entries in a write buffer"); | ||
27 | |||
23 | static struct kmem_cache *pblk_ws_cache, *pblk_rec_cache, *pblk_g_rq_cache, | 28 | static struct kmem_cache *pblk_ws_cache, *pblk_rec_cache, *pblk_g_rq_cache, |
24 | *pblk_w_rq_cache; | 29 | *pblk_w_rq_cache; |
25 | static DECLARE_RWSEM(pblk_lock); | 30 | static 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) |