Fix writeback for lbatpage
This commit is contained in:
parent
abdb25d31c
commit
9a543670aa
|
@ -80,7 +80,7 @@ lbatpage_flush_endio(struct bio* bio)
|
||||||
printk(KERN_ERR "%s: I/O failed\n", __func__);
|
printk(KERN_ERR "%s: I/O failed\n", __func__);
|
||||||
lp->state = CACHE_STATE_ERROR;
|
lp->state = CACHE_STATE_ERROR;
|
||||||
}
|
}
|
||||||
cbd_free_page(bio->bi_io_vec[0].bv_page);
|
unlock_page(lp->page);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -94,15 +94,10 @@ lbatpage_flush(struct lbatpage* lp)
|
||||||
if (lp->state == CACHE_STATE_ERROR) {
|
if (lp->state == CACHE_STATE_ERROR) {
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
}
|
}
|
||||||
|
unlock_page(lp->page);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
iopagev[0] = cbd_alloc_page();
|
iopagev[0] = lp->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);
|
|
||||||
pblk_write(lp->params, lp->pblk, 1, iopagev, lbatpage_flush_endio, lp);
|
pblk_write(lp->params, lp->pblk, 1, iopagev, lbatpage_flush_endio, lp);
|
||||||
lp->state = CACHE_STATE_CLEAN;
|
lp->state = CACHE_STATE_CLEAN;
|
||||||
|
|
||||||
|
@ -114,6 +109,7 @@ out:
|
||||||
void
|
void
|
||||||
lbatpage_reset(struct lbatpage* lp, u64 pblk)
|
lbatpage_reset(struct lbatpage* lp, u64 pblk)
|
||||||
{
|
{
|
||||||
|
lock_page(lp->page);
|
||||||
if (lp->pblk != pblk) {
|
if (lp->pblk != pblk) {
|
||||||
lp->pblk = pblk;
|
lp->pblk = pblk;
|
||||||
lp->state = CACHE_STATE_UNCACHED;
|
lp->state = CACHE_STATE_UNCACHED;
|
||||||
|
|
Loading…
Reference in New Issue