Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 101495
b: refs/heads/master
c: d26ab06
h: refs/heads/master
i:
  101493: fc9a6a8
  101491: 6e0dfe6
  101487: 504ece1
v: v3
  • Loading branch information
Swen Schillig authored and James Bottomley committed Jun 5, 2008
1 parent bec6ab4 commit b674854
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 36 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 15424921222f2bed0aa92ef1e8bc94f753d2c6ea
refs/heads/master: d26ab06ede83287f99067fee3034c5455a75faf9
23 changes: 23 additions & 0 deletions trunk/drivers/s390/scsi/zfcp_aux.c
Original file line number Diff line number Diff line change
Expand Up @@ -970,6 +970,27 @@ static void zfcp_dummy_release(struct device *dev)
return;
}

int zfcp_status_read_refill(struct zfcp_adapter *adapter)
{
while (atomic_read(&adapter->stat_miss) > 0)
if (zfcp_fsf_status_read(adapter, ZFCP_WAIT_FOR_SBAL))
break;
else
atomic_dec(&adapter->stat_miss);

if (ZFCP_STATUS_READS_RECOM <= atomic_read(&adapter->stat_miss)) {
zfcp_erp_adapter_reopen(adapter, 0, 103, NULL);
return 1;
}
return 0;
}

static void _zfcp_status_read_scheduler(struct work_struct *work)
{
zfcp_status_read_refill(container_of(work, struct zfcp_adapter,
stat_work));
}

/*
* Enqueues an adapter at the end of the adapter list in the driver data.
* All adapter internal structures are set up.
Expand Down Expand Up @@ -1063,6 +1084,7 @@ zfcp_adapter_enqueue(struct ccw_device *ccw_device)

/* initialize lock of associated request queue */
rwlock_init(&adapter->request_queue.queue_lock);
INIT_WORK(&adapter->stat_work, _zfcp_status_read_scheduler);

/* mark adapter unusable as long as sysfs registration is not complete */
atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status);
Expand Down Expand Up @@ -1123,6 +1145,7 @@ zfcp_adapter_dequeue(struct zfcp_adapter *adapter)
int retval = 0;
unsigned long flags;

cancel_work_sync(&adapter->stat_work);
zfcp_adapter_scsi_unregister(adapter);
device_unregister(&adapter->generic_services);
zfcp_sysfs_adapter_remove_files(&adapter->ccw_device->dev);
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/s390/scsi/zfcp_dbf.c
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ void zfcp_hba_dbf_event_fsf_unsol(const char *tag, struct zfcp_adapter *adapter,
strncpy(rec->tag, "stat", ZFCP_DBF_TAG_SIZE);
strncpy(rec->tag2, tag, ZFCP_DBF_TAG_SIZE);

rec->u.status.failed = adapter->status_read_failed;
rec->u.status.failed = atomic_read(&adapter->stat_miss);
if (status_buffer != NULL) {
rec->u.status.status_type = status_buffer->status_type;
rec->u.status.status_subtype = status_buffer->status_subtype;
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/s390/scsi/zfcp_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@ zfcp_address_to_sg(void *address, struct scatterlist *list, unsigned int size)
#define ZFCP_QTCB_VERSION FSF_QTCB_CURRENT_VERSION
/* ATTENTION: value must not be used by hardware */
#define FSF_QTCB_UNSOLICITED_STATUS 0x6305
#define ZFCP_STATUS_READ_FAILED_THRESHOLD 3
#define ZFCP_STATUS_READS_RECOM FSF_STATUS_READS_RECOM

/* Do 1st retry in 1 second, then double the timeout for each following retry */
Expand Down Expand Up @@ -759,7 +758,8 @@ struct zfcp_adapter {
rwlock_t abort_lock; /* Protects against SCSI
stack abort/command
completion races */
u16 status_read_failed; /* # failed status reads */
atomic_t stat_miss; /* # missing status reads*/
struct work_struct stat_work;
atomic_t status; /* status of this adapter */
struct list_head erp_ready_head; /* error recovery for this
adapter/devices */
Expand Down
19 changes: 2 additions & 17 deletions trunk/drivers/s390/scsi/zfcp_erp.c
Original file line number Diff line number Diff line change
Expand Up @@ -2139,25 +2139,10 @@ static int
zfcp_erp_adapter_strategy_open_fsf_statusread(struct zfcp_erp_action
*erp_action)
{
int retval = ZFCP_ERP_SUCCEEDED;
int temp_ret;
struct zfcp_adapter *adapter = erp_action->adapter;
int i;

adapter->status_read_failed = 0;
for (i = 0; i < ZFCP_STATUS_READS_RECOM; i++) {
temp_ret = zfcp_fsf_status_read(adapter, ZFCP_WAIT_FOR_SBAL);
if (temp_ret < 0) {
ZFCP_LOG_INFO("error: set-up of unsolicited status "
"notification failed on adapter %s\n",
zfcp_get_busid_by_adapter(adapter));
retval = ZFCP_ERP_FAILED;
i--;
break;
}
}

return retval;
atomic_set(&adapter->stat_miss, 16);
return zfcp_status_read_refill(adapter);
}

/*
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/s390/scsi/zfcp_ext.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ extern void zfcp_fsf_start_timer(struct zfcp_fsf_req *, unsigned long);
extern void zfcp_erp_start_timer(struct zfcp_fsf_req *);
extern void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *);
extern int zfcp_fsf_status_read(struct zfcp_adapter *, int);
extern int zfcp_status_read_refill(struct zfcp_adapter *adapter);
extern int zfcp_fsf_req_create(struct zfcp_adapter *, u32, int, mempool_t *,
unsigned long *, struct zfcp_fsf_req **);
extern int zfcp_fsf_send_ct(struct zfcp_send_ct *, mempool_t *,
Expand Down
18 changes: 3 additions & 15 deletions trunk/drivers/s390/scsi/zfcp_fsf.c
Original file line number Diff line number Diff line change
Expand Up @@ -1029,21 +1029,9 @@ zfcp_fsf_status_read_handler(struct zfcp_fsf_req *fsf_req)
* FIXME:
* allocation failure possible? (Is this code needed?)
*/
retval = zfcp_fsf_status_read(adapter, 0);
if (retval < 0) {
ZFCP_LOG_INFO("Failed to create unsolicited status read "
"request for the adapter %s.\n",
zfcp_get_busid_by_adapter(adapter));
/* temporary fix to avoid status read buffer shortage */
adapter->status_read_failed++;
if ((ZFCP_STATUS_READS_RECOM - adapter->status_read_failed)
< ZFCP_STATUS_READ_FAILED_THRESHOLD) {
ZFCP_LOG_INFO("restart adapter %s due to status read "
"buffer shortage\n",
zfcp_get_busid_by_adapter(adapter));
zfcp_erp_adapter_reopen(adapter, 0, 103, fsf_req);
}
}

atomic_inc(&adapter->stat_miss);
schedule_work(&adapter->stat_work);
out:
return retval;
}
Expand Down

0 comments on commit b674854

Please sign in to comment.