| From f730f9158f6ee7b5c4d892af6b51a72194445ea4 Mon Sep 17 00:00:00 2001 |
| From: Gera Kazakov <gkazakov@msn.com> |
| Date: Mon, 9 Sep 2013 15:47:06 -0700 |
| Subject: target: Fix >= v3.9+ regression in PR APTPL + ALUA metadata write-out |
| |
| From: Gera Kazakov <gkazakov@msn.com> |
| |
| commit f730f9158f6ee7b5c4d892af6b51a72194445ea4 upstream. |
| |
| 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 <viro@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 <agrover@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 <gkazakov@msn.com> |
| Signed-off-by: Gera Kazakov <gkazakov@msn.com> |
| Cc: Al Viro <viro@zeniv.linux.org.uk> |
| Cc: Andy Grover <agrover@redhat.com> |
| Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/target/target_core_alua.c | 2 +- |
| drivers/target/target_core_pr.c | 2 +- |
| 2 files changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/target/target_core_alua.c |
| +++ b/drivers/target/target_core_alua.c |
| @@ -730,7 +730,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; |
| } |
| |
| /* |
| --- a/drivers/target/target_core_pr.c |
| +++ b/drivers/target/target_core_pr.c |
| @@ -1987,7 +1987,7 @@ static int __core_scsi3_write_aptpl_to_f |
| pr_debug("Error writing APTPL metadata file: %s\n", path); |
| fput(file); |
| |
| - return ret ? -EIO : 0; |
| + return (ret < 0) ? -EIO : 0; |
| } |
| |
| static int |