aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm/pblk-init.c
diff options
context:
space:
mode:
authorJavier González <javier@javigon.com>2018-10-09 07:12:10 -0400
committerJens Axboe <axboe@kernel.dk>2018-10-09 10:25:08 -0400
commit9bd1f875c047a8a619a3e5233c1eb23eace02f31 (patch)
tree8037785267158bf0eaa7d1fc7cd1596862ca69f4 /drivers/lightnvm/pblk-init.c
parent40b8657dcc0bbd4a293cac1acd4b0b01c0359416 (diff)
lightnvm: pblk: move ring buffer alloc/free rb init
pblk's read/write buffer currently takes a buffer and its size and uses it to create the metadata around it to use it as a ring buffer. This puts the responsibility of allocating/freeing ring buffer memory on the ring buffer user. Instead, move it inside of the ring buffer helpers (pblk-rb.c). This simplifies creation/destruction routines. Signed-off-by: Javier González <javier@cnexlabs.com> Signed-off-by: Matias Bjørling <mb@lightnvm.io> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/lightnvm/pblk-init.c')
-rw-r--r--drivers/lightnvm/pblk-init.c18
1 files changed, 3 insertions, 15 deletions
diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c
index f84c428a76f1..b2c49fc006c9 100644
--- a/drivers/lightnvm/pblk-init.c
+++ b/drivers/lightnvm/pblk-init.c
@@ -185,17 +185,14 @@ static void pblk_rwb_free(struct pblk *pblk)
185 if (pblk_rb_tear_down_check(&pblk->rwb)) 185 if (pblk_rb_tear_down_check(&pblk->rwb))
186 pblk_err(pblk, "write buffer error on tear down\n"); 186 pblk_err(pblk, "write buffer error on tear down\n");
187 187
188 pblk_rb_data_free(&pblk->rwb); 188 pblk_rb_free(&pblk->rwb);
189 vfree(pblk_rb_entries_ref(&pblk->rwb));
190} 189}
191 190
192static int pblk_rwb_init(struct pblk *pblk) 191static int pblk_rwb_init(struct pblk *pblk)
193{ 192{
194 struct nvm_tgt_dev *dev = pblk->dev; 193 struct nvm_tgt_dev *dev = pblk->dev;
195 struct nvm_geo *geo = &dev->geo; 194 struct nvm_geo *geo = &dev->geo;
196 struct pblk_rb_entry *entries; 195 unsigned long buffer_size;
197 unsigned long nr_entries, buffer_size;
198 unsigned int power_size, power_seg_sz;
199 int pgs_in_buffer; 196 int pgs_in_buffer;
200 197
201 pgs_in_buffer = max(geo->mw_cunits, geo->ws_opt) * geo->all_luns; 198 pgs_in_buffer = max(geo->mw_cunits, geo->ws_opt) * geo->all_luns;
@@ -205,16 +202,7 @@ static int pblk_rwb_init(struct pblk *pblk)
205 else 202 else
206 buffer_size = pgs_in_buffer; 203 buffer_size = pgs_in_buffer;
207 204
208 nr_entries = pblk_rb_calculate_size(buffer_size); 205 return pblk_rb_init(&pblk->rwb, buffer_size, geo->csecs);
209
210 entries = vzalloc(array_size(nr_entries, sizeof(struct pblk_rb_entry)));
211 if (!entries)
212 return -ENOMEM;
213
214 power_size = get_count_order(nr_entries);
215 power_seg_sz = get_count_order(geo->csecs);
216
217 return pblk_rb_init(&pblk->rwb, entries, power_size, power_seg_sz);
218} 206}
219 207
220/* Minimum pages needed within a lun */ 208/* Minimum pages needed within a lun */