Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f680f19a authored by Javier González's avatar Javier González Committed by Jens Axboe
Browse files

lightnvm: pblk: simplify meta. memory allocation



smeta size will always be suitable for a kmalloc allocation. Simplify
the code and leave the vmalloc fallback only for emeta, where the pblk
configuration has an impact.

Signed-off-by: default avatarJavier González <javier@cnexlabs.com>
Signed-off-by: default avatarMatias Bjørling <matias@cnexlabs.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent f9c10152
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -665,6 +665,7 @@ static int pblk_line_submit_emeta_io(struct pblk *pblk, struct pblk_line *line,
	}
	reinit_completion(&wait);

	if (likely(pblk->l_mg.emeta_alloc_type == PBLK_VMALLOC_META))
		bio_put(bio);

	if (rqd.error) {
+4 −5
Original line number Diff line number Diff line
@@ -355,9 +355,9 @@ static void pblk_line_meta_free(struct pblk *pblk)
	kfree(l_mg->vsc_list);

	for (i = 0; i < PBLK_DATA_LINES; i++) {
		pblk_mfree(&l_mg->sline_meta[i], l_mg->smeta_alloc_type);
		kfree(l_mg->sline_meta[i]);
		pblk_mfree(l_mg->eline_meta[i]->buf, l_mg->emeta_alloc_type);
		kfree(&l_mg->eline_meta[i]);
		kfree(l_mg->eline_meta[i]);
	}

	kfree(pblk->lines);
@@ -550,7 +550,6 @@ static int pblk_lines_alloc_metadata(struct pblk *pblk)
	/* smeta is always small enough to fit on a kmalloc memory allocation,
	 * emeta depends on the number of LUNs allocated to the pblk instance
	 */
	l_mg->smeta_alloc_type = PBLK_KMALLOC_META;
	for (i = 0; i < PBLK_DATA_LINES; i++) {
		l_mg->sline_meta[i] = kmalloc(lm->smeta_len, GFP_KERNEL);
		if (!l_mg->sline_meta[i])
@@ -604,12 +603,12 @@ static int pblk_lines_alloc_metadata(struct pblk *pblk)
fail_free_emeta:
	while (--i >= 0) {
		vfree(l_mg->eline_meta[i]->buf);
		kfree(&l_mg->eline_meta[i]);
		kfree(l_mg->eline_meta[i]);
	}

fail_free_smeta:
	for (i = 0; i < PBLK_DATA_LINES; i++)
		pblk_mfree(&l_mg->sline_meta[i], l_mg->smeta_alloc_type);
		kfree(l_mg->sline_meta[i]);

	return -ENOMEM;
}
+2 −1
Original line number Diff line number Diff line
@@ -442,6 +442,7 @@ int pblk_submit_meta_io(struct pblk *pblk, struct pblk_line *meta_line)
	list_add(&meta_line->list, &meta_line->list);
	spin_unlock(&l_mg->close_lock);
fail_free_bio:
	if (likely(l_mg->emeta_alloc_type == PBLK_VMALLOC_META))
		bio_put(bio);
fail_free_rqd:
	pblk_free_rqd(pblk, rqd, READ);
+0 −1
Original line number Diff line number Diff line
@@ -446,7 +446,6 @@ struct pblk_line_mgmt {
	__le32 *vsc_list;		/* Valid sector counts for all lines */

	/* Metadata allocation type: VMALLOC | KMALLOC */
	int smeta_alloc_type;
	int emeta_alloc_type;

	/* Pre-allocated metadata for data lines */