[PATCH] target: Fix >= v3.9+ regression in PR APTPL + ALUA metadata write-out

7 views
Skip to first unread message

Nicholas A. Bellinger

unread,
Sep 9, 2013, 6:39:46 PM9/9/13
to target-devel, Gera Kazakov, Al Viro, Andy Grover
From: Gera Kazakov <gkaz...@msn.com>

This patch fixes a >= v3.9+ regression in __core_scsi3_write_aptpl_to_file()
+ core_alua_write_tpg_metadata() write-out, where a return value of -EIO was
incorrectly being returned upon success.

This bug was originally introduced in:

commit 0e9b10a90f1c30f25dd6f130130240745ab14010
Author: Al Viro <vi...@zeniv.linux.org.uk>
Date: Sat Feb 23 15:22:43 2013 -0500

target: writev() on single-element vector is pointless

However, given that the return of core_scsi3_update_and_write_aptpl()
was not used to determine if a command should be returned with non GOOD
status, this bug was not being triggered in PR logic until v3.11-rc1 by
commit:

commit 459f213ba162bd13e113d6f92a8fa6c780fd67ed
Author: Andy Grover <agr...@redhat.com>
Date: Thu May 16 10:41:02 2013 -0700

target: Allocate aptpl_buf inside update_and_write_aptpl()

So, go ahead and only return -EIO if kernel_write() returned a
negative value.

Reported-by: Gera Kazakov <gkaz...@msn.com>
Signed-off-by: Gera Kazakov <gkaz...@msn.com>
Cc: Al Viro <vi...@zeniv.linux.org.uk>
Cc: Andy Grover <agr...@redhat.com>
Signed-off-by: Nicholas Bellinger <n...@linux-iscsi.org>
---
drivers/target/target_core_alua.c | 2 +-
drivers/target/target_core_pr.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core_alua.c
index ea928c4..3b4c450 100644
--- a/drivers/target/target_core_alua.c
+++ b/drivers/target/target_core_alua.c
@@ -733,7 +733,7 @@ static int core_alua_write_tpg_metadata(
if (ret < 0)
pr_err("Error writing ALUA metadata file: %s\n", path);
fput(file);
- return ret ? -EIO : 0;
+ return (ret < 0) ? -EIO : 0;
}

/*
diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
index bd78faf..adec5a8 100644
--- a/drivers/target/target_core_pr.c
+++ b/drivers/target/target_core_pr.c
@@ -1949,7 +1949,7 @@ static int __core_scsi3_write_aptpl_to_file(
pr_debug("Error writing APTPL metadata file: %s\n", path);
fput(file);

- return ret ? -EIO : 0;
+ return (ret < 0) ? -EIO : 0;
}

/*
--
1.7.2.5

Reply all
Reply to author
Forward
0 new messages