diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-12-03 11:20:11 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-12-03 11:20:11 -0500 |
commit | 26145f7e7ebc8a5f1b29425d6da62e872031be4a (patch) | |
tree | d06d4418c6db3683fb06d9035baa8a50c3a5311f /drivers/s390 | |
parent | 8002cedc1adbf51e2d56091534ef7551b88329b4 (diff) | |
parent | 1e641664301744f0d381de43ae1e12343e60b479 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6:
[SCSI] NCR5380: Fix bugs and canonicalize irq handler usage
[SCSI] zfcp: fix cleanup of dismissed error recovery actions
[SCSI] zfcp: fix dismissal of error recovery actions
[SCSI] qla1280: convert to use the data buffer accessors
[SCSI] iscsi: return data transfer residual for data-out commands
[SCSI] iscsi_tcp: fix potential lockup with write commands
[SCSI] aacraid: fix security weakness
[SCSI] aacraid: fix up le32 issues in BlinkLED
[SCSI] aacraid: fix potential panic in thread stop
[SCSI] aacraid: don't assign cpu_to_le32(constant) to u8
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/scsi/zfcp_erp.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c index 5552b755c08a..07fa824d179f 100644 --- a/drivers/s390/scsi/zfcp_erp.c +++ b/drivers/s390/scsi/zfcp_erp.c | |||
@@ -977,7 +977,9 @@ static void zfcp_erp_action_dismiss(struct zfcp_erp_action *erp_action) | |||
977 | debug_text_event(adapter->erp_dbf, 2, "a_adis"); | 977 | debug_text_event(adapter->erp_dbf, 2, "a_adis"); |
978 | debug_event(adapter->erp_dbf, 2, &erp_action->action, sizeof (int)); | 978 | debug_event(adapter->erp_dbf, 2, &erp_action->action, sizeof (int)); |
979 | 979 | ||
980 | zfcp_erp_async_handler_nolock(erp_action, ZFCP_STATUS_ERP_DISMISSED); | 980 | erp_action->status |= ZFCP_STATUS_ERP_DISMISSED; |
981 | if (zfcp_erp_action_exists(erp_action) == ZFCP_ERP_ACTION_RUNNING) | ||
982 | zfcp_erp_action_ready(erp_action); | ||
981 | } | 983 | } |
982 | 984 | ||
983 | int | 985 | int |
@@ -1063,7 +1065,7 @@ zfcp_erp_thread(void *data) | |||
1063 | &adapter->status)) { | 1065 | &adapter->status)) { |
1064 | 1066 | ||
1065 | write_lock_irqsave(&adapter->erp_lock, flags); | 1067 | write_lock_irqsave(&adapter->erp_lock, flags); |
1066 | next = adapter->erp_ready_head.prev; | 1068 | next = adapter->erp_ready_head.next; |
1067 | write_unlock_irqrestore(&adapter->erp_lock, flags); | 1069 | write_unlock_irqrestore(&adapter->erp_lock, flags); |
1068 | 1070 | ||
1069 | if (next != &adapter->erp_ready_head) { | 1071 | if (next != &adapter->erp_ready_head) { |
@@ -1153,15 +1155,13 @@ zfcp_erp_strategy(struct zfcp_erp_action *erp_action) | |||
1153 | 1155 | ||
1154 | /* | 1156 | /* |
1155 | * check for dismissed status again to avoid follow-up actions, | 1157 | * check for dismissed status again to avoid follow-up actions, |
1156 | * failing of targets and so on for dismissed actions | 1158 | * failing of targets and so on for dismissed actions, |
1159 | * we go through down() here because there has been an up() | ||
1157 | */ | 1160 | */ |
1158 | retval = zfcp_erp_strategy_check_action(erp_action, retval); | 1161 | if (erp_action->status & ZFCP_STATUS_ERP_DISMISSED) |
1162 | retval = ZFCP_ERP_CONTINUES; | ||
1159 | 1163 | ||
1160 | switch (retval) { | 1164 | switch (retval) { |
1161 | case ZFCP_ERP_DISMISSED: | ||
1162 | /* leave since this action has ridden to its ancestors */ | ||
1163 | debug_text_event(adapter->erp_dbf, 6, "a_st_dis2"); | ||
1164 | goto unlock; | ||
1165 | case ZFCP_ERP_NOMEM: | 1165 | case ZFCP_ERP_NOMEM: |
1166 | /* no memory to continue immediately, let it sleep */ | 1166 | /* no memory to continue immediately, let it sleep */ |
1167 | if (!(erp_action->status & ZFCP_STATUS_ERP_LOWMEM)) { | 1167 | if (!(erp_action->status & ZFCP_STATUS_ERP_LOWMEM)) { |
@@ -3089,7 +3089,7 @@ zfcp_erp_action_enqueue(int action, | |||
3089 | ++adapter->erp_total_count; | 3089 | ++adapter->erp_total_count; |
3090 | 3090 | ||
3091 | /* finally put it into 'ready' queue and kick erp thread */ | 3091 | /* finally put it into 'ready' queue and kick erp thread */ |
3092 | list_add(&erp_action->list, &adapter->erp_ready_head); | 3092 | list_add_tail(&erp_action->list, &adapter->erp_ready_head); |
3093 | up(&adapter->erp_ready_sem); | 3093 | up(&adapter->erp_ready_sem); |
3094 | retval = 0; | 3094 | retval = 0; |
3095 | out: | 3095 | out: |