summaryrefslogtreecommitdiffstats
path: root/src/kernel/xloop_file_fmt_raw.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/xloop_file_fmt_raw.c')
-rw-r--r--src/kernel/xloop_file_fmt_raw.c108
1 files changed, 2 insertions, 106 deletions
diff --git a/src/kernel/xloop_file_fmt_raw.c b/src/kernel/xloop_file_fmt_raw.c
index f77476f..5f8d453 100644
--- a/src/kernel/xloop_file_fmt_raw.c
+++ b/src/kernel/xloop_file_fmt_raw.c
@@ -34,68 +34,6 @@ static inline loff_t __raw_file_fmt_rq_get_pos(struct xloop_file_fmt *xlo_fmt, s
return ((loff_t)blk_rq_pos(rq) << 9) + xlo->xlo_offset;
}
-/* transfer function for DEPRECATED cryptoxloop support */
-static inline int __raw_file_fmt_do_transfer(struct xloop_device *xlo, int cmd, struct page *rpage, unsigned int roffs,
- struct page *lpage, unsigned int loffs, int size, sector_t rblock)
-{
- int ret;
-
- ret = xlo->transfer(xlo, cmd, rpage, roffs, lpage, loffs, size, rblock);
- if (likely(!ret))
- return 0;
-
- pr_err_ratelimited("transfer error at byte offset %llu, length %i.\n", (unsigned long long)rblock << 9, size);
- return ret;
-}
-
-static int __raw_file_fmt_read_transfer(struct xloop_device *xlo, struct request *rq, loff_t pos)
-{
- struct bio_vec bvec, b;
- struct req_iterator iter;
- struct iov_iter i;
- struct page *page;
- ssize_t len;
- int ret = 0;
-
- page = alloc_page(GFP_NOIO);
- if (unlikely(!page))
- return -ENOMEM;
-
- rq_for_each_segment(bvec, rq, iter) {
- loff_t offset = pos;
-
- b.bv_page = page;
- b.bv_offset = 0;
- b.bv_len = bvec.bv_len;
-
- iov_iter_bvec(&i, READ, &b, 1, b.bv_len);
- len = vfs_iter_read(xlo->xlo_backing_file, &i, &pos, 0);
- if (len < 0) {
- ret = len;
- goto out_free_page;
- }
-
- ret = __raw_file_fmt_do_transfer(xlo, READ, page, 0, bvec.bv_page, bvec.bv_offset, len, offset >> 9);
- if (ret)
- goto out_free_page;
-
- flush_dcache_page(bvec.bv_page);
-
- if (len != bvec.bv_len) {
- struct bio *bio;
-
- __rq_for_each_bio(bio, rq)
- zero_fill_bio(bio);
- break;
- }
- }
-
- ret = 0;
-out_free_page:
- __free_page(page);
- return ret;
-}
-
static int raw_file_fmt_read(struct xloop_file_fmt *xlo_fmt, struct request *rq)
{
struct bio_vec bvec;
@@ -108,11 +46,8 @@ static int raw_file_fmt_read(struct xloop_file_fmt *xlo_fmt, struct request *rq)
xlo = xloop_file_fmt_get_xlo(xlo_fmt);
pos = __raw_file_fmt_rq_get_pos(xlo_fmt, rq);
- if (xlo->transfer)
- return __raw_file_fmt_read_transfer(xlo, rq, pos);
-
rq_for_each_segment(bvec, rq, iter) {
- iov_iter_bvec(&i, READ, &bvec, 1, bvec.bv_len);
+ iov_iter_bvec(&i, READ, &bvec, 1, bvec.bv_len); // READ -> ITER_DEST at some point
len = vfs_iter_read(xlo->xlo_backing_file, &i, &pos, 0);
if (len < 0)
return len;
@@ -286,40 +221,6 @@ static int __raw_file_fmt_write_bvec(struct file *file, struct bio_vec *bvec, lo
return bw;
}
-/*
- * This is the slow, transforming version that needs to double buffer the
- * data as it cannot do the transformations in place without having direct
- * access to the destination pages of the backing file.
- */
-static int __raw_file_fmt_write_transfer(struct xloop_device *xlo, struct request *rq, loff_t pos)
-{
- struct bio_vec bvec, b;
- struct req_iterator iter;
- struct page *page;
- int ret = 0;
-
- page = alloc_page(GFP_NOIO);
- if (unlikely(!page))
- return -ENOMEM;
-
- rq_for_each_segment(bvec, rq, iter) {
- ret = __raw_file_fmt_do_transfer(xlo, WRITE, page, 0, bvec.bv_page, bvec.bv_offset, bvec.bv_len,
- pos >> 9);
- if (unlikely(ret))
- break;
-
- b.bv_page = page;
- b.bv_offset = 0;
- b.bv_len = bvec.bv_len;
- ret = __raw_file_fmt_write_bvec(xlo->xlo_backing_file, &b, &pos);
- if (ret < 0)
- break;
- }
-
- __free_page(page);
- return ret;
-}
-
static int raw_file_fmt_write(struct xloop_file_fmt *xlo_fmt, struct request *rq)
{
struct bio_vec bvec;
@@ -331,9 +232,6 @@ static int raw_file_fmt_write(struct xloop_file_fmt *xlo_fmt, struct request *rq
xlo = xloop_file_fmt_get_xlo(xlo_fmt);
pos = __raw_file_fmt_rq_get_pos(xlo_fmt, rq);
- if (xlo->transfer)
- return __raw_file_fmt_write_transfer(xlo, rq, pos);
-
rq_for_each_segment(bvec, rq, iter) {
ret = __raw_file_fmt_write_bvec(xlo->xlo_backing_file, &bvec, &pos);
if (ret < 0)
@@ -357,9 +255,7 @@ static int __raw_file_fmt_fallocate(struct xloop_device *xlo, struct request *rq
{
/*
* We use fallocate to manipulate the space mappings used by the image
- * a.k.a. discard/zerorange. However we do not support this if
- * encryption is enabled, because it may give an attacker useful
- * information.
+ * a.k.a. discard/zerorange.
*/
struct file *file = xlo->xlo_backing_file;
int ret;