diff options
-rw-r--r-- | drivers/lightnvm/pblk-core.c | 3 | ||||
-rw-r--r-- | drivers/lightnvm/pblk-init.c | 9 | ||||
-rw-r--r-- | drivers/lightnvm/pblk-write.c | 3 | ||||
-rw-r--r-- | drivers/lightnvm/pblk.h | 1 |
4 files changed, 8 insertions, 8 deletions
diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c index 29565f89a85e..b5f7f3f19105 100644 --- a/drivers/lightnvm/pblk-core.c +++ b/drivers/lightnvm/pblk-core.c | |||
@@ -665,7 +665,8 @@ next_rq: | |||
665 | } | 665 | } |
666 | reinit_completion(&wait); | 666 | reinit_completion(&wait); |
667 | 667 | ||
668 | bio_put(bio); | 668 | if (likely(pblk->l_mg.emeta_alloc_type == PBLK_VMALLOC_META)) |
669 | bio_put(bio); | ||
669 | 670 | ||
670 | if (rqd.error) { | 671 | if (rqd.error) { |
671 | if (dir == WRITE) | 672 | if (dir == WRITE) |
diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c index cd10f2d74cf9..a9115ff9555f 100644 --- a/drivers/lightnvm/pblk-init.c +++ b/drivers/lightnvm/pblk-init.c | |||
@@ -355,9 +355,9 @@ static void pblk_line_meta_free(struct pblk *pblk) | |||
355 | kfree(l_mg->vsc_list); | 355 | kfree(l_mg->vsc_list); |
356 | 356 | ||
357 | for (i = 0; i < PBLK_DATA_LINES; i++) { | 357 | for (i = 0; i < PBLK_DATA_LINES; i++) { |
358 | pblk_mfree(&l_mg->sline_meta[i], l_mg->smeta_alloc_type); | 358 | kfree(l_mg->sline_meta[i]); |
359 | pblk_mfree(l_mg->eline_meta[i]->buf, l_mg->emeta_alloc_type); | 359 | pblk_mfree(l_mg->eline_meta[i]->buf, l_mg->emeta_alloc_type); |
360 | kfree(&l_mg->eline_meta[i]); | 360 | kfree(l_mg->eline_meta[i]); |
361 | } | 361 | } |
362 | 362 | ||
363 | kfree(pblk->lines); | 363 | kfree(pblk->lines); |
@@ -550,7 +550,6 @@ static int pblk_lines_alloc_metadata(struct pblk *pblk) | |||
550 | /* smeta is always small enough to fit on a kmalloc memory allocation, | 550 | /* smeta is always small enough to fit on a kmalloc memory allocation, |
551 | * emeta depends on the number of LUNs allocated to the pblk instance | 551 | * emeta depends on the number of LUNs allocated to the pblk instance |
552 | */ | 552 | */ |
553 | l_mg->smeta_alloc_type = PBLK_KMALLOC_META; | ||
554 | for (i = 0; i < PBLK_DATA_LINES; i++) { | 553 | for (i = 0; i < PBLK_DATA_LINES; i++) { |
555 | l_mg->sline_meta[i] = kmalloc(lm->smeta_len, GFP_KERNEL); | 554 | l_mg->sline_meta[i] = kmalloc(lm->smeta_len, GFP_KERNEL); |
556 | if (!l_mg->sline_meta[i]) | 555 | if (!l_mg->sline_meta[i]) |
@@ -604,12 +603,12 @@ static int pblk_lines_alloc_metadata(struct pblk *pblk) | |||
604 | fail_free_emeta: | 603 | fail_free_emeta: |
605 | while (--i >= 0) { | 604 | while (--i >= 0) { |
606 | vfree(l_mg->eline_meta[i]->buf); | 605 | vfree(l_mg->eline_meta[i]->buf); |
607 | kfree(&l_mg->eline_meta[i]); | 606 | kfree(l_mg->eline_meta[i]); |
608 | } | 607 | } |
609 | 608 | ||
610 | fail_free_smeta: | 609 | fail_free_smeta: |
611 | for (i = 0; i < PBLK_DATA_LINES; i++) | 610 | for (i = 0; i < PBLK_DATA_LINES; i++) |
612 | pblk_mfree(&l_mg->sline_meta[i], l_mg->smeta_alloc_type); | 611 | kfree(l_mg->sline_meta[i]); |
613 | 612 | ||
614 | return -ENOMEM; | 613 | return -ENOMEM; |
615 | } | 614 | } |
diff --git a/drivers/lightnvm/pblk-write.c b/drivers/lightnvm/pblk-write.c index a29a34786ac5..3db2cbe5b788 100644 --- a/drivers/lightnvm/pblk-write.c +++ b/drivers/lightnvm/pblk-write.c | |||
@@ -442,7 +442,8 @@ fail_rollback: | |||
442 | list_add(&meta_line->list, &meta_line->list); | 442 | list_add(&meta_line->list, &meta_line->list); |
443 | spin_unlock(&l_mg->close_lock); | 443 | spin_unlock(&l_mg->close_lock); |
444 | fail_free_bio: | 444 | fail_free_bio: |
445 | bio_put(bio); | 445 | if (likely(l_mg->emeta_alloc_type == PBLK_VMALLOC_META)) |
446 | bio_put(bio); | ||
446 | fail_free_rqd: | 447 | fail_free_rqd: |
447 | pblk_free_rqd(pblk, rqd, READ); | 448 | pblk_free_rqd(pblk, rqd, READ); |
448 | return ret; | 449 | return ret; |
diff --git a/drivers/lightnvm/pblk.h b/drivers/lightnvm/pblk.h index 6dc58d360077..3fe8b05e3de0 100644 --- a/drivers/lightnvm/pblk.h +++ b/drivers/lightnvm/pblk.h | |||
@@ -446,7 +446,6 @@ struct pblk_line_mgmt { | |||
446 | __le32 *vsc_list; /* Valid sector counts for all lines */ | 446 | __le32 *vsc_list; /* Valid sector counts for all lines */ |
447 | 447 | ||
448 | /* Metadata allocation type: VMALLOC | KMALLOC */ | 448 | /* Metadata allocation type: VMALLOC | KMALLOC */ |
449 | int smeta_alloc_type; | ||
450 | int emeta_alloc_type; | 449 | int emeta_alloc_type; |
451 | 450 | ||
452 | /* Pre-allocated metadata for data lines */ | 451 | /* Pre-allocated metadata for data lines */ |