From: Cao Guanghui <[email protected]>

era_ctr() replaces the actual error codes returned by dm_get_device()
and dm_set_target_max_io_len() with hardcoded -EINVAL, discarding
the real reason for the failure (e.g. -ENODEV, -ENOMEM).  This makes
it harder for users to diagnose problems and is inconsistent with
other dm targets (dm-thin, dm-verity, dm-flakey, dm-ebs) which
propagate the original error.

Fix all three sites to return 'r' instead of -EINVAL.

Signed-off-by: Cao Guanghui <[email protected]>
---
 drivers/md/dm-era-target.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/md/dm-era-target.c b/drivers/md/dm-era-target.c
index 08ce96e8cf4f..4eb1c4f90e1b 100644
--- a/drivers/md/dm-era-target.c
+++ b/drivers/md/dm-era-target.c
@@ -1488,7 +1488,7 @@ static int era_ctr(struct dm_target *ti, unsigned int 
argc, char **argv)
        if (r) {
                ti->error = "Error opening metadata device";
                era_destroy(era);
-               return -EINVAL;
+               return r;
        }
 
        r = dm_get_device(ti, argv[1], BLK_OPEN_READ | BLK_OPEN_WRITE,
@@ -1496,7 +1496,7 @@ static int era_ctr(struct dm_target *ti, unsigned int 
argc, char **argv)
        if (r) {
                ti->error = "Error opening data device";
                era_destroy(era);
-               return -EINVAL;
+               return r;
        }
 
        r = sscanf(argv[2], "%u%c", &era->sectors_per_block, &dummy);
@@ -1510,7 +1510,7 @@ static int era_ctr(struct dm_target *ti, unsigned int 
argc, char **argv)
        if (r) {
                ti->error = "could not set max io len";
                era_destroy(era);
-               return -EINVAL;
+               return r;
        }
 
        if (!valid_block_size(era->sectors_per_block)) {
-- 
2.25.1


Reply via email to