diff --git a/dm-compress/compress.c b/dm-compress/compress.c index a69ce65..d30a178 100644 --- a/dm-compress/compress.c +++ b/dm-compress/compress.c @@ -90,14 +90,14 @@ compress_read_header(struct compress* c) pblkbuf = page_address(pblkpage); iopagev[0] = pblkpage; - memset(&header, 0, sizeof(header)); - header.params.priv = c->dev->bdev; - ret = pblk_read_wait(&header.params, 0, 1, iopagev); + ret = pblk_read_wait(c->dev->bdev, 0, 1, iopagev); if (ret) { printk(KERN_ERR "%s: failed to read header\n", __func__); goto out; } + memset(&header, 0, sizeof(header)); cbd_header_get(pblkbuf, &header); + header.params.priv = c->dev->bdev; if (memcmp(header.magic, CBD_MAGIC, sizeof(header.magic)) != 0) { printk(KERN_ERR "%s: bad magic\n", __func__); diff --git a/dm-compress/lbatpage.c b/dm-compress/lbatpage.c index 5ea23dc..eafb99b 100644 --- a/dm-compress/lbatpage.c +++ b/dm-compress/lbatpage.c @@ -88,7 +88,7 @@ lbatpage_flush(struct lbatpage* lp) goto unlock; } iopagev[0] = lp->page; - pblk_write(lp->params, lp->pblk, 1, iopagev); + pblk_write(lp->params->priv, lp->pblk, 1, iopagev); mutex_unlock(&lp->lock); return ret; @@ -107,7 +107,7 @@ lbatpage_read(struct lbatpage* lp) struct page* pagev[1]; pagev[0] = lp->page; - ret = pblk_read_wait(lp->params, lp->pblk, 1, pagev); + ret = pblk_read_wait(lp->params->priv, lp->pblk, 1, pagev); return ret; } diff --git a/dm-compress/lbd.c b/dm-compress/lbd.c index 5b8af7c..b4acfb6 100644 --- a/dm-compress/lbd.c +++ b/dm-compress/lbd.c @@ -397,7 +397,7 @@ lbd_flush(struct lbd* lbd) pblk = lbatview_elem_pblk(lbd->lv, lbd->lblk, n); BUG_ON(pblk == PBLK_NONE); iopagev[0] = lbd->pagev[n]; - pblk_write(lbd->params, pblk, 1, iopagev); + pblk_write(lbd->params->priv, pblk, 1, iopagev); } while (n < lblk_per_pblk(lbd->params)) { unlock_page(lbd->pagev[n]); @@ -451,7 +451,7 @@ lbd_read(struct lbd* lbd) } iopagev[0] = lbd->pagev[n]; /* XXX: Issue non-blocking reads? */ - ret = pblk_read_wait(lbd->params, pblk, 1, iopagev); + ret = pblk_read_wait(lbd->params->priv, pblk, 1, iopagev); if (ret) { goto out; } diff --git a/dm-compress/pbat.c b/dm-compress/pbat.c index 6ad0bb3..9b4ac5f 100644 --- a/dm-compress/pbat.c +++ b/dm-compress/pbat.c @@ -98,7 +98,7 @@ pbat_flush(struct pbat* pbat) for (n = 0; n < count; ++n, p += PBLK_SIZE) { iopagev[n] = virt_to_page(p); } - pblk_write(pbat->params, pblk, count, iopagev); + pblk_write(pbat->params->priv, pblk, count, iopagev); mutex_unlock(&pbat->lock); return ret; @@ -128,7 +128,7 @@ pbat_read(struct pbat* pbat) for (n = 0, p = pbat->buf; n < count; ++n, p += PBLK_SIZE) { iopagev[n] = virt_to_page(p); } - ret = pblk_read_wait(pbat->params, pblk, count, iopagev); + ret = pblk_read_wait(pbat->params->priv, pblk, count, iopagev); return ret; } diff --git a/dm-compress/util.c b/dm-compress/util.c index 5bd4aac..b384ec5 100644 --- a/dm-compress/util.c +++ b/dm-compress/util.c @@ -135,13 +135,13 @@ pblk_io_prepare(struct block_device* bdev, unsigned int op, } int -pblk_read_wait(struct cbd_params* params, +pblk_read_wait(struct block_device* bdev, u64 pblk, u32 count, struct page** pagev) { int ret; struct bio* bio; - bio = pblk_io_prepare(params->priv, REQ_OP_READ, pblk, count, pagev); + bio = pblk_io_prepare(bdev, REQ_OP_READ, pblk, count, pagev); if (!bio) { printk(KERN_ERR "%s: out of memory\n", __func__); return -ENOMEM; @@ -156,14 +156,14 @@ pblk_read_wait(struct cbd_params* params, } int -pblk_read(struct cbd_params* params, +pblk_read(struct block_device* bdev, u64 pblk, u32 count, struct page** pagev, pblk_endio_t endio, void* endio_priv) { int ret; struct bio* bio; - bio = pblk_io_prepare(params->priv, REQ_OP_READ, pblk, count, pagev); + bio = pblk_io_prepare(bdev, REQ_OP_READ, pblk, count, pagev); if (!bio) { printk(KERN_ERR "%s: out of memory\n", __func__); return -ENOMEM; @@ -202,13 +202,13 @@ pblk_write_endio(struct bio* bio) } void -pblk_write(struct cbd_params* params, +pblk_write(struct block_device* bdev, u64 pblk, u32 count, struct page** pagev) { struct bio* bio; u32 n; - bio = pblk_io_prepare(params->priv, REQ_OP_WRITE, pblk, count, pagev); + bio = pblk_io_prepare(bdev, REQ_OP_WRITE, pblk, count, pagev); if (!bio) { printk(KERN_ERR "%s: out of memory\n", __func__); for (n = 0; n < count; ++n) { diff --git a/include/linux/dm-compress.h b/include/linux/dm-compress.h index 77bb5ce..3ca2669 100644 --- a/include/linux/dm-compress.h +++ b/include/linux/dm-compress.h @@ -470,12 +470,12 @@ bool cbd_alloc_pagev(struct page** pagev, size_t len); void cbd_free_pagev(struct page** pagev, size_t len); /* Core low-level I/O */ -int pblk_read_wait(struct cbd_params* params, +int pblk_read_wait(struct block_device* bdev, u64 pblk, u32 count, struct page** pagev); -int pblk_read(struct cbd_params* params, +int pblk_read(struct block_device* bdev, u64 pblk, u32 count, struct page** pagev, pblk_endio_t endio, void* endio_priv); -void pblk_write(struct cbd_params* params, +void pblk_write(struct block_device* bdev, u64 pblk, u32 count, struct page** pagev); struct pbat;