From 9a543670aa0dcd858f16f9fa3c00ca1ce837564b Mon Sep 17 00:00:00 2001 From: Tom Marshall Date: Thu, 31 Oct 2019 14:48:12 -0700 Subject: [PATCH] Fix writeback for lbatpage --- dm-compress/lbatpage.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/dm-compress/lbatpage.c b/dm-compress/lbatpage.c index ac7029c..390aa7c 100644 --- a/dm-compress/lbatpage.c +++ b/dm-compress/lbatpage.c @@ -80,7 +80,7 @@ lbatpage_flush_endio(struct bio* bio) printk(KERN_ERR "%s: I/O failed\n", __func__); lp->state = CACHE_STATE_ERROR; } - cbd_free_page(bio->bi_io_vec[0].bv_page); + unlock_page(lp->page); } static int @@ -94,15 +94,10 @@ lbatpage_flush(struct lbatpage* lp) if (lp->state == CACHE_STATE_ERROR) { ret = -EIO; } + unlock_page(lp->page); goto out; } - iopagev[0] = cbd_alloc_page(); - if (!iopagev[0]) { - printk(KERN_ERR "%s: out of memory\n", __func__); - ret = -ENOMEM; - goto out; - } - memcpy(page_address(iopagev[0]), lp->buf, PAGE_SIZE); + iopagev[0] = lp->page; pblk_write(lp->params, lp->pblk, 1, iopagev, lbatpage_flush_endio, lp); lp->state = CACHE_STATE_CLEAN; @@ -114,6 +109,7 @@ out: void lbatpage_reset(struct lbatpage* lp, u64 pblk) { + lock_page(lp->page); if (lp->pblk != pblk) { lp->pblk = pblk; lp->state = CACHE_STATE_UNCACHED;