| From 59e4f541baf728dbb426949bfa9f6862387ffd0e Mon Sep 17 00:00:00 2001 |
| From: Roland Dreier <roland@purestorage.com> |
| Date: Mon, 4 Jun 2012 23:24:51 -0700 |
| Subject: target: Return error to initiator if SET TARGET PORT GROUPS emulation fails |
| |
| From: Roland Dreier <roland@purestorage.com> |
| |
| commit 59e4f541baf728dbb426949bfa9f6862387ffd0e upstream. |
| |
| The error paths in target_emulate_set_target_port_groups() are all |
| essentially "rc = -EINVAL; goto out;" but the code at "out:" ignores |
| rc and always returns success. This means that even if eg explicit |
| ALUA is turned off, the initiator will always see a good SCSI status |
| for SET TARGET PORT GROUPS. |
| |
| Fix this by returning rc as is intended. It appears this bug was |
| added by the following patch: |
| |
| commit 05d1c7c0d0db4cc25548d9aadebb416888a82327 |
| Author: Andy Grover <agrover@redhat.com> |
| Date: Wed Jul 20 19:13:28 2011 +0000 |
| |
| target: Make all control CDBs scatter-gather |
| |
| Signed-off-by: Roland Dreier <roland@purestorage.com> |
| Cc: Andy Grover <agrover@redhat.com> |
| Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> |
| [bwh: Backported to 3.2: we have transport_complete_task() |
| and not target_complete_cmd()] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/target/target_core_alua.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/target/target_core_alua.c |
| +++ b/drivers/target/target_core_alua.c |
| @@ -351,9 +351,11 @@ int target_emulate_set_target_port_group |
| |
| out: |
| transport_kunmap_data_sg(cmd); |
| - task->task_scsi_status = GOOD; |
| - transport_complete_task(task, 1); |
| - return 0; |
| + if (!rc) { |
| + task->task_scsi_status = GOOD; |
| + transport_complete_task(task, 1); |
| + } |
| + return rc; |
| } |
| |
| static inline int core_alua_state_nonoptimized( |