From 65f543b8ec751f6557ea8bbe27424a33f60494f3 Mon Sep 17 00:00:00 2001 From: Christof Schmitt Date: Fri, 30 Apr 2010 18:09:36 +0200 Subject: [PATCH] --- yaml --- r: 195679 b: refs/heads/master c: 64deb6efdc5504ce97b5c1c6f281fffbc150bd93 h: refs/heads/master i: 195677: a090aa1dab39525adf685d79245eec389e11a93a 195675: 36ac02ed04ec14d481eeabd7833550e0da53fcfd 195671: 7b5689bbc174510e659319861b5b5ef94c59f6a3 195663: 8e6e4dea5ad2a8414375d87a74fc8c661b24096c 195647: c8d577cf6af47f66da686deaf7b4e2e97b075929 v: v3 --- [refs] | 2 +- trunk/drivers/s390/scsi/zfcp_aux.c | 3 ++- trunk/drivers/s390/scsi/zfcp_def.h | 1 + trunk/drivers/s390/scsi/zfcp_erp.c | 2 +- trunk/drivers/s390/scsi/zfcp_fsf.c | 1 + trunk/drivers/s390/scsi/zfcp_fsf.h | 2 +- 6 files changed, 7 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 236edae392a6..ec274f2633c2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6b9e1520094a8aa68009c265eb694e0be9f5be3f +refs/heads/master: 64deb6efdc5504ce97b5c1c6f281fffbc150bd93 diff --git a/trunk/drivers/s390/scsi/zfcp_aux.c b/trunk/drivers/s390/scsi/zfcp_aux.c index abf33db647ff..e331df2122f7 100644 --- a/trunk/drivers/s390/scsi/zfcp_aux.c +++ b/trunk/drivers/s390/scsi/zfcp_aux.c @@ -425,7 +425,8 @@ int zfcp_status_read_refill(struct zfcp_adapter *adapter) { while (atomic_read(&adapter->stat_miss) > 0) if (zfcp_fsf_status_read(adapter->qdio)) { - if (atomic_read(&adapter->stat_miss) >= 16) { + if (atomic_read(&adapter->stat_miss) >= + adapter->stat_read_buf_num) { zfcp_erp_adapter_reopen(adapter, 0, "axsref1", NULL); return 1; diff --git a/trunk/drivers/s390/scsi/zfcp_def.h b/trunk/drivers/s390/scsi/zfcp_def.h index 0b2ae60a6f9f..9fa1b064893e 100644 --- a/trunk/drivers/s390/scsi/zfcp_def.h +++ b/trunk/drivers/s390/scsi/zfcp_def.h @@ -164,6 +164,7 @@ struct zfcp_adapter { stack abort/command completion races */ atomic_t stat_miss; /* # missing status reads*/ + unsigned int stat_read_buf_num; struct work_struct stat_work; atomic_t status; /* status of this adapter */ struct list_head erp_ready_head; /* error recovery for this diff --git a/trunk/drivers/s390/scsi/zfcp_erp.c b/trunk/drivers/s390/scsi/zfcp_erp.c index 0be5e7ea2828..e3dbeda97179 100644 --- a/trunk/drivers/s390/scsi/zfcp_erp.c +++ b/trunk/drivers/s390/scsi/zfcp_erp.c @@ -714,7 +714,7 @@ static int zfcp_erp_adapter_strategy_open_fsf(struct zfcp_erp_action *act) if (zfcp_erp_adapter_strategy_open_fsf_xport(act) == ZFCP_ERP_FAILED) return ZFCP_ERP_FAILED; - atomic_set(&act->adapter->stat_miss, 16); + atomic_set(&act->adapter->stat_miss, act->adapter->stat_read_buf_num); if (zfcp_status_read_refill(act->adapter)) return ZFCP_ERP_FAILED; diff --git a/trunk/drivers/s390/scsi/zfcp_fsf.c b/trunk/drivers/s390/scsi/zfcp_fsf.c index 3822f22b8150..9f90b03ac97d 100644 --- a/trunk/drivers/s390/scsi/zfcp_fsf.c +++ b/trunk/drivers/s390/scsi/zfcp_fsf.c @@ -496,6 +496,7 @@ static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req) adapter->hydra_version = bottom->adapter_type; adapter->timer_ticks = bottom->timer_interval; + adapter->stat_read_buf_num = max(bottom->status_read_buf_num, (u16)16); if (fc_host_permanent_port_name(shost) == -1) fc_host_permanent_port_name(shost) = fc_host_port_name(shost); diff --git a/trunk/drivers/s390/scsi/zfcp_fsf.h b/trunk/drivers/s390/scsi/zfcp_fsf.h index 4008bd786793..519083fd6e89 100644 --- a/trunk/drivers/s390/scsi/zfcp_fsf.h +++ b/trunk/drivers/s390/scsi/zfcp_fsf.h @@ -366,7 +366,7 @@ struct fsf_qtcb_bottom_config { u32 adapter_type; u8 res0; u8 peer_d_id[3]; - u8 res1[2]; + u16 status_read_buf_num; u16 timer_interval; u8 res2[9]; u8 s_id[3];