lightnvm: dynamic DMA pool entry size
Currently lightnvm and pblk uses single DMA pool, for which the entry size always is equal to PAGE_SIZE. The contents of each entry allocated from the DMA pool consists of a PPA list (8bytes * 64), leaving 56bytes * 64 space for metadata. Since the metadata field can be bigger, such as 128 bytes, the static size does not cover this use-case. This patch adds support for I/O metadata above 56 bytes by changing DMA pool size based on device meta size and allows pblk to use OOB metadata >=16B. Reviewed-by: Javier González <javier@cnexlabs.com> Signed-off-by: Igor Konopko <igor.j.konopko@intel.com> Signed-off-by: Matias Bjørling <mb@lightnvm.io> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
@@ -1140,7 +1140,7 @@ EXPORT_SYMBOL(nvm_alloc_dev);
|
||||
|
||||
int nvm_register(struct nvm_dev *dev)
|
||||
{
|
||||
int ret;
|
||||
int ret, exp_pool_size;
|
||||
|
||||
if (!dev->q || !dev->ops)
|
||||
return -EINVAL;
|
||||
@@ -1149,7 +1149,12 @@ int nvm_register(struct nvm_dev *dev)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
dev->dma_pool = dev->ops->create_dma_pool(dev, "ppalist");
|
||||
exp_pool_size = max_t(int, PAGE_SIZE,
|
||||
(NVM_MAX_VLBA * (sizeof(u64) + dev->geo.sos)));
|
||||
exp_pool_size = round_up(exp_pool_size, PAGE_SIZE);
|
||||
|
||||
dev->dma_pool = dev->ops->create_dma_pool(dev, "ppalist",
|
||||
exp_pool_size);
|
||||
if (!dev->dma_pool) {
|
||||
pr_err("nvm: could not create dma pool\n");
|
||||
nvm_free(dev);
|
||||
|
Reference in New Issue
Block a user