ANDROID: dm-bow: Backport to 4.9
Change-Id: I6f3b1ec3a98eca8a1d5a89919408b18c4f9b6f4a
Signed-off-by: Paul Lawrence <paullawrence@google.com>
diff --git a/drivers/md/dm-bow.c b/drivers/md/dm-bow.c
index fa0675d..c3c1003 100644
--- a/drivers/md/dm-bow.c
+++ b/drivers/md/dm-bow.c
@@ -176,7 +176,7 @@
if (bi_iter->bi_sector < (*br)->sector) {
WARN_ON(true);
- return BLK_STS_IOERR;
+ return -EIO;
}
if (bi_iter->bi_sector > (*br)->sector) {
@@ -184,7 +184,7 @@
kzalloc(sizeof(*leading_br), GFP_KERNEL);
if (!leading_br)
- return BLK_STS_RESOURCE;
+ return -ENOMEM;
*leading_br = **br;
if (leading_br->type == TRIMMED)
@@ -197,20 +197,20 @@
if (bvec_top(bi_iter) >= range_top(*br)) {
bi_iter->bi_size = (range_top(*br) - (*br)->sector)
* SECTOR_SIZE;
- return BLK_STS_OK;
+ return 0;
}
/* new_br will be the beginning, existing br will be the tail */
new_br = kzalloc(sizeof(*new_br), GFP_KERNEL);
if (!new_br)
- return BLK_STS_RESOURCE;
+ return -ENOMEM;
new_br->sector = (*br)->sector;
(*br)->sector = bvec_top(bi_iter);
add_before(&bc->ranges, new_br, *br);
*br = new_br;
- return BLK_STS_OK;
+ return 0;
}
/*
@@ -279,7 +279,7 @@
if (range_size(source) != range_size(dest)) {
WARN_ON(1);
- return BLK_STS_IOERR;
+ return -EIO;
}
if (checksum)
@@ -316,7 +316,7 @@
}
dm_bufio_write_dirty_buffers(bc->bufio);
- return BLK_STS_OK;
+ return 0;
}
/****** logging functions ******/
@@ -335,18 +335,18 @@
if (first_br->type != SECTOR0) {
WARN_ON(1);
- return BLK_STS_IOERR;
+ return -EIO;
}
if (range_size(first_br) != bc->block_size) {
WARN_ON(1);
- return BLK_STS_IOERR;
+ return -EIO;
}
free_br = find_free_range(bc);
/* No space left - return this error to userspace */
if (!free_br)
- return BLK_STS_NOSPC;
+ return -ENOSPC;
bi_iter.bi_sector = free_br->sector;
bi_iter.bi_size = bc->block_size;
ret = split_range(bc, &free_br, &bi_iter);
@@ -354,7 +354,7 @@
return ret;
if (bi_iter.bi_size != bc->block_size) {
WARN_ON(1);
- return BLK_STS_IOERR;
+ return -EIO;
}
ret = copy_data(bc, first_br, free_br, &checksum);
@@ -369,7 +369,7 @@
return ret;
set_type(bc, &free_br, BACKUP);
- return BLK_STS_OK;
+ return 0;
}
static int add_log_entry(struct bow_context *bc, sector_t source, sector_t dest,
@@ -391,7 +391,7 @@
if (IS_ERR(sector)) {
DMERR("Cannot write boot sector");
dm_bufio_release(sector_buffer);
- return BLK_STS_NOSPC;
+ return -ENOSPC;
}
bc->log_sector->entries[bc->log_sector->count].source = source;
@@ -404,7 +404,7 @@
dm_bufio_mark_buffer_dirty(sector_buffer);
dm_bufio_release(sector_buffer);
dm_bufio_write_dirty_buffers(bc->bufio);
- return BLK_STS_OK;
+ return 0;
}
static int prepare_log(struct bow_context *bc)
@@ -418,12 +418,12 @@
first_br = container_of(rb_first(&bc->ranges), struct bow_range, node);
if (first_br->type != UNCHANGED) {
WARN_ON(1);
- return BLK_STS_IOERR;
+ return -EIO;
}
if (range_size(first_br) < bc->block_size) {
WARN_ON(1);
- return BLK_STS_IOERR;
+ return -EIO;
}
bi_iter.bi_sector = 0;
bi_iter.bi_size = bc->block_size;
@@ -433,13 +433,13 @@
first_br->type = SECTOR0;
if (range_size(first_br) != bc->block_size) {
WARN_ON(1);
- return BLK_STS_IOERR;
+ return -EIO;
}
/* Find free sector for active sector0 reads/writes */
free_br = find_free_range(bc);
if (!free_br)
- return BLK_STS_NOSPC;
+ return -ENOSPC;
bi_iter.bi_sector = free_br->sector;
bi_iter.bi_size = bc->block_size;
ret = split_range(bc, &free_br, &bi_iter);
@@ -457,7 +457,7 @@
/* Find free sector to back up original sector zero */
free_br = find_free_range(bc);
if (!free_br)
- return BLK_STS_NOSPC;
+ return -ENOSPC;
bi_iter.bi_sector = free_br->sector;
bi_iter.bi_size = bc->block_size;
ret = split_range(bc, &free_br, &bi_iter);
@@ -487,7 +487,7 @@
return ret;
set_type(bc, &free_br, BACKUP);
- return BLK_STS_OK;
+ return 0;
}
static struct bow_range *find_sector0_current(struct bow_context *bc)
@@ -750,7 +750,7 @@
/* Find a free range */
backup_br = find_free_range(bc);
if (!backup_br)
- return BLK_STS_NOSPC;
+ return -ENOSPC;
/* Carve out a backup range. This may be smaller than the br given */
backup_bi.bi_sector = backup_br->sector;
@@ -769,7 +769,7 @@
return ret;
if (range_size(br) != range_size(backup_br)) {
WARN_ON(1);
- return BLK_STS_IOERR;
+ return -EIO;
}
@@ -824,14 +824,14 @@
if (ret)
return ret;
set_type(bc, &br, CHANGED);
- return BLK_STS_OK;
+ return 0;
}
static int prepare_changed_range(struct bow_context *bc, struct bow_range *br,
struct bvec_iter *bi_iter)
{
/* Nothing to do ... */
- return BLK_STS_OK;
+ return 0;
}
static int prepare_one_range(struct bow_context *bc,
@@ -861,7 +861,7 @@
case TOP: /* Illegal - top is off the end of the device */
default:
WARN_ON(1);
- return BLK_STS_IOERR;
+ return -EIO;
}
}
@@ -877,7 +877,7 @@
struct bow_context *bc = ww->bc;
struct bio *bio = ww->bio;
struct bvec_iter bi_iter = bio->bi_iter;
- int ret = BLK_STS_OK;
+ int ret = 0;
kfree(ww);
@@ -893,11 +893,11 @@
mutex_unlock(&bc->ranges_lock);
if (!ret) {
- bio_set_dev(bio, bc->dev->bdev);
+ bio->bi_bdev = bc->dev->bdev;
submit_bio(bio);
} else {
DMERR("Write failure with error %d", -ret);
- bio->bi_status = ret;
+ bio->bi_error = ret;
bio_endio(bio);
}
}
@@ -929,14 +929,14 @@
fs_bio_set);
if (!split) {
DMERR("Failed to split bio");
- bio->bi_status = BLK_STS_RESOURCE;
+ bio->bi_error = -ENOMEM;
bio_endio(bio);
return DM_MAPIO_SUBMITTED;
}
bio_chain(split, bio);
split->bi_iter.bi_sector = bc->log_sector->sector0;
- bio_set_dev(split, bc->dev->bdev);
+ split->bi_bdev = bc->dev->bdev;
submit_bio(split);
if (bio_data_dir(bio) == WRITE)
@@ -1026,11 +1026,11 @@
int remap_unless_illegal_trim(struct bow_context *bc, struct bio *bio)
{
if (!bc->forward_trims && bio_op(bio) == REQ_OP_DISCARD) {
- bio->bi_status = BLK_STS_NOTSUPP;
+ bio->bi_error = -EINVAL;
bio_endio(bio);
return DM_MAPIO_SUBMITTED;
} else {
- bio_set_dev(bio, bc->dev->bdev);
+ bio->bi_bdev = bc->dev->bdev;
return DM_MAPIO_REMAPPED;
}
}