[SCSI] zfcp: zfcp_fsf cleanup.
Code cleanup for the zfcp_fsf.c file. Signed-off-by: Swen Schillig <swen@vnet.ibm.com> Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
		
							parent
							
								
									6022192070
								
							
						
					
					
						commit
						c41f8cbddd
					
				| @ -433,7 +433,7 @@ static void zfcp_dummy_release(struct device *dev) | |||||||
| int zfcp_status_read_refill(struct zfcp_adapter *adapter) | int zfcp_status_read_refill(struct zfcp_adapter *adapter) | ||||||
| { | { | ||||||
| 	while (atomic_read(&adapter->stat_miss) > 0) | 	while (atomic_read(&adapter->stat_miss) > 0) | ||||||
| 		if (zfcp_fsf_status_read(adapter, ZFCP_WAIT_FOR_SBAL)) { | 		if (zfcp_fsf_status_read(adapter)) { | ||||||
| 			if (atomic_read(&adapter->stat_miss) >= 16) { | 			if (atomic_read(&adapter->stat_miss) >= 16) { | ||||||
| 				zfcp_erp_adapter_reopen(adapter, 0, 103, NULL); | 				zfcp_erp_adapter_reopen(adapter, 0, 103, NULL); | ||||||
| 				return 1; | 				return 1; | ||||||
| @ -518,10 +518,10 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device) | |||||||
| 	spin_lock_init(&adapter->san_dbf_lock); | 	spin_lock_init(&adapter->san_dbf_lock); | ||||||
| 	spin_lock_init(&adapter->scsi_dbf_lock); | 	spin_lock_init(&adapter->scsi_dbf_lock); | ||||||
| 	spin_lock_init(&adapter->rec_dbf_lock); | 	spin_lock_init(&adapter->rec_dbf_lock); | ||||||
|  | 	spin_lock_init(&adapter->req_q.lock); | ||||||
| 
 | 
 | ||||||
| 	rwlock_init(&adapter->erp_lock); | 	rwlock_init(&adapter->erp_lock); | ||||||
| 	rwlock_init(&adapter->abort_lock); | 	rwlock_init(&adapter->abort_lock); | ||||||
| 	rwlock_init(&adapter->req_q.lock); |  | ||||||
| 
 | 
 | ||||||
| 	sema_init(&adapter->erp_ready_sem, 0); | 	sema_init(&adapter->erp_ready_sem, 0); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -961,7 +961,7 @@ void zfcp_san_dbf_event_incoming_els(struct zfcp_fsf_req *fsf_req) | |||||||
| 
 | 
 | ||||||
| 	zfcp_san_dbf_event_els("iels", 1, fsf_req, buf->d_id, | 	zfcp_san_dbf_event_els("iels", 1, fsf_req, buf->d_id, | ||||||
| 			       fc_host_port_id(adapter->scsi_host), | 			       fc_host_port_id(adapter->scsi_host), | ||||||
| 			       *(u8 *)buf->payload, (void *)buf->payload, | 			       buf->payload.data[0], (void *)buf->payload.data, | ||||||
| 			       length); | 			       length); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -76,11 +76,6 @@ zfcp_address_to_sg(void *address, struct scatterlist *list, unsigned int size) | |||||||
| #define ZFCP_DEVICE_MODEL       0x03 | #define ZFCP_DEVICE_MODEL       0x03 | ||||||
| #define ZFCP_DEVICE_MODEL_PRIV	0x04 | #define ZFCP_DEVICE_MODEL_PRIV	0x04 | ||||||
| 
 | 
 | ||||||
| /* allow as many chained SBALs as are supported by hardware */ |  | ||||||
| #define ZFCP_MAX_SBALS_PER_REQ		FSF_MAX_SBALS_PER_REQ |  | ||||||
| #define ZFCP_MAX_SBALS_PER_CT_REQ	FSF_MAX_SBALS_PER_REQ |  | ||||||
| #define ZFCP_MAX_SBALS_PER_ELS_REQ	FSF_MAX_SBALS_PER_ELS_REQ |  | ||||||
| 
 |  | ||||||
| /* DMQ bug workaround: don't use last SBALE */ | /* DMQ bug workaround: don't use last SBALE */ | ||||||
| #define ZFCP_MAX_SBALES_PER_SBAL	(QDIO_MAX_ELEMENTS_PER_BUFFER - 1) | #define ZFCP_MAX_SBALES_PER_SBAL	(QDIO_MAX_ELEMENTS_PER_BUFFER - 1) | ||||||
| 
 | 
 | ||||||
| @ -89,21 +84,17 @@ zfcp_address_to_sg(void *address, struct scatterlist *list, unsigned int size) | |||||||
| 
 | 
 | ||||||
| /* max. number of (data buffer) SBALEs in largest SBAL chain */ | /* max. number of (data buffer) SBALEs in largest SBAL chain */ | ||||||
| #define ZFCP_MAX_SBALES_PER_REQ		\ | #define ZFCP_MAX_SBALES_PER_REQ		\ | ||||||
| 	(ZFCP_MAX_SBALS_PER_REQ * ZFCP_MAX_SBALES_PER_SBAL - 2) | 	(FSF_MAX_SBALS_PER_REQ * ZFCP_MAX_SBALES_PER_SBAL - 2) | ||||||
|         /* request ID + QTCB in SBALE 0 + 1 of first SBAL in chain */ |         /* request ID + QTCB in SBALE 0 + 1 of first SBAL in chain */ | ||||||
| 
 | 
 | ||||||
| #define ZFCP_MAX_SECTORS (ZFCP_MAX_SBALES_PER_REQ * 8) | #define ZFCP_MAX_SECTORS (ZFCP_MAX_SBALES_PER_REQ * 8) | ||||||
|         /* max. number of (data buffer) SBALEs in largest SBAL chain
 |         /* max. number of (data buffer) SBALEs in largest SBAL chain
 | ||||||
|            multiplied with number of sectors per 4k block */ |            multiplied with number of sectors per 4k block */ | ||||||
| 
 | 
 | ||||||
| #define ZFCP_SBAL_TIMEOUT               (5*HZ) |  | ||||||
| 
 |  | ||||||
| #define ZFCP_TYPE2_RECOVERY_TIME        8	/* seconds */ | #define ZFCP_TYPE2_RECOVERY_TIME        8	/* seconds */ | ||||||
| 
 | 
 | ||||||
| /********************* FSF SPECIFIC DEFINES *********************************/ | /********************* FSF SPECIFIC DEFINES *********************************/ | ||||||
| 
 | 
 | ||||||
| #define ZFCP_ULP_INFO_VERSION                   26 |  | ||||||
| #define ZFCP_QTCB_VERSION	FSF_QTCB_CURRENT_VERSION |  | ||||||
| /* ATTENTION: value must not be used by hardware */ | /* ATTENTION: value must not be used by hardware */ | ||||||
| #define FSF_QTCB_UNSOLICITED_STATUS		0x6305 | #define FSF_QTCB_UNSOLICITED_STATUS		0x6305 | ||||||
| 
 | 
 | ||||||
| @ -121,8 +112,6 @@ typedef unsigned long long fcp_lun_t; | |||||||
| /* data length field may be at variable position in FCP-2 FCP_CMND IU */ | /* data length field may be at variable position in FCP-2 FCP_CMND IU */ | ||||||
| typedef unsigned int       fcp_dl_t; | typedef unsigned int       fcp_dl_t; | ||||||
| 
 | 
 | ||||||
| #define ZFCP_FC_SERVICE_CLASS_DEFAULT	FSF_CLASS_3 |  | ||||||
| 
 |  | ||||||
| /* timeout for name-server lookup (in seconds) */ | /* timeout for name-server lookup (in seconds) */ | ||||||
| #define ZFCP_NS_GID_PN_TIMEOUT		10 | #define ZFCP_NS_GID_PN_TIMEOUT		10 | ||||||
| 
 | 
 | ||||||
| @ -228,7 +217,6 @@ struct fcp_logo { | |||||||
|  * FC-FS stuff |  * FC-FS stuff | ||||||
|  */ |  */ | ||||||
| #define R_A_TOV				10 /* seconds */ | #define R_A_TOV				10 /* seconds */ | ||||||
| #define ZFCP_ELS_TIMEOUT		(2 * R_A_TOV) |  | ||||||
| 
 | 
 | ||||||
| #define ZFCP_LS_RLS			0x0f | #define ZFCP_LS_RLS			0x0f | ||||||
| #define ZFCP_LS_ADISC			0x52 | #define ZFCP_LS_ADISC			0x52 | ||||||
| @ -521,7 +509,7 @@ struct zfcp_qdio_queue { | |||||||
| 						 in queue (free_count>0) */ | 						 in queue (free_count>0) */ | ||||||
| 	atomic_t           count;	      /* number of free buffers
 | 	atomic_t           count;	      /* number of free buffers
 | ||||||
| 						 in queue */ | 						 in queue */ | ||||||
| 	rwlock_t	   lock;	      /* lock for operations on queue */ | 	spinlock_t	   lock;	      /* lock for operations on queue */ | ||||||
| 	int                pci_batch;	      /* SBALs since PCI indication
 | 	int                pci_batch;	      /* SBALs since PCI indication
 | ||||||
| 						 was last set */ | 						 was last set */ | ||||||
| }; | }; | ||||||
| @ -686,7 +674,7 @@ struct zfcp_fsf_req { | |||||||
| 	u32		       fsf_command;    /* FSF Command copy */ | 	u32		       fsf_command;    /* FSF Command copy */ | ||||||
| 	struct fsf_qtcb	       *qtcb;	       /* address of associated QTCB */ | 	struct fsf_qtcb	       *qtcb;	       /* address of associated QTCB */ | ||||||
| 	u32		       seq_no;         /* Sequence number of request */ | 	u32		       seq_no;         /* Sequence number of request */ | ||||||
| 	unsigned long	       data;           /* private data of request */ | 	void			*data;           /* private data of request */ | ||||||
| 	struct timer_list     timer;	       /* used for erp or scsi er */ | 	struct timer_list     timer;	       /* used for erp or scsi er */ | ||||||
| 	struct zfcp_erp_action *erp_action;    /* used if this request is
 | 	struct zfcp_erp_action *erp_action;    /* used if this request is
 | ||||||
| 						  issued on behalf of erp */ | 						  issued on behalf of erp */ | ||||||
| @ -694,10 +682,9 @@ struct zfcp_fsf_req { | |||||||
| 						  from emergency pool */ | 						  from emergency pool */ | ||||||
| 	unsigned long long     issued;         /* request sent time (STCK) */ | 	unsigned long long     issued;         /* request sent time (STCK) */ | ||||||
| 	struct zfcp_unit       *unit; | 	struct zfcp_unit       *unit; | ||||||
|  | 	void			(*handler)(struct zfcp_fsf_req *); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| typedef void zfcp_fsf_req_handler_t(struct zfcp_fsf_req*); |  | ||||||
| 
 |  | ||||||
| /* driver data */ | /* driver data */ | ||||||
| struct zfcp_data { | struct zfcp_data { | ||||||
| 	struct scsi_host_template scsi_host_template; | 	struct scsi_host_template scsi_host_template; | ||||||
| @ -730,7 +717,6 @@ struct zfcp_fsf_req_qtcb { | |||||||
| /********************** ZFCP SPECIFIC DEFINES ********************************/ | /********************** ZFCP SPECIFIC DEFINES ********************************/ | ||||||
| 
 | 
 | ||||||
| #define ZFCP_REQ_AUTO_CLEANUP	0x00000002 | #define ZFCP_REQ_AUTO_CLEANUP	0x00000002 | ||||||
| #define ZFCP_WAIT_FOR_SBAL	0x00000004 |  | ||||||
| #define ZFCP_REQ_NO_QTCB	0x00000008 | #define ZFCP_REQ_NO_QTCB	0x00000008 | ||||||
| 
 | 
 | ||||||
| #define ZFCP_SET                0x00000100 | #define ZFCP_SET                0x00000100 | ||||||
| @ -753,15 +739,6 @@ static inline int zfcp_reqlist_hash(unsigned long req_id) | |||||||
| 	return req_id % REQUEST_LIST_SIZE; | 	return req_id % REQUEST_LIST_SIZE; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static inline void zfcp_reqlist_add(struct zfcp_adapter *adapter, |  | ||||||
| 				    struct zfcp_fsf_req *fsf_req) |  | ||||||
| { |  | ||||||
| 	unsigned int idx; |  | ||||||
| 
 |  | ||||||
| 	idx = zfcp_reqlist_hash(fsf_req->req_id); |  | ||||||
| 	list_add_tail(&fsf_req->list, &adapter->req_list[idx]); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static inline void zfcp_reqlist_remove(struct zfcp_adapter *adapter, | static inline void zfcp_reqlist_remove(struct zfcp_adapter *adapter, | ||||||
| 				       struct zfcp_fsf_req *fsf_req) | 				       struct zfcp_fsf_req *fsf_req) | ||||||
| { | { | ||||||
|  | |||||||
| @ -70,21 +70,19 @@ extern struct zfcp_fsf_req *zfcp_fsf_control_file(struct zfcp_adapter *adapter, | |||||||
| extern void zfcp_fsf_start_timer(struct zfcp_fsf_req *, unsigned long); | 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_erp_start_timer(struct zfcp_fsf_req *); | ||||||
| extern void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *); | extern void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *); | ||||||
| extern int  zfcp_fsf_status_read(struct zfcp_adapter *, int); | extern int  zfcp_fsf_status_read(struct zfcp_adapter *); | ||||||
| extern int zfcp_status_read_refill(struct zfcp_adapter *adapter); | 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 **) |  | ||||||
| 	__acquires(adapter->req_q.lock); |  | ||||||
| extern int zfcp_fsf_send_ct(struct zfcp_send_ct *, mempool_t *, | extern int zfcp_fsf_send_ct(struct zfcp_send_ct *, mempool_t *, | ||||||
| 			    struct zfcp_erp_action *); | 			    struct zfcp_erp_action *); | ||||||
| extern int zfcp_fsf_send_els(struct zfcp_send_els *); | extern int zfcp_fsf_send_els(struct zfcp_send_els *); | ||||||
| extern int  zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *, | extern int  zfcp_fsf_send_fcp_command_task(struct zfcp_adapter *, | ||||||
| 					   struct zfcp_unit *, | 					   struct zfcp_unit *, | ||||||
| 					   struct scsi_cmnd *, int, int); | 					   struct scsi_cmnd *, int, int); | ||||||
| extern int  zfcp_fsf_req_complete(struct zfcp_fsf_req *); | extern void zfcp_fsf_req_complete(struct zfcp_fsf_req *); | ||||||
| extern void zfcp_fsf_req_free(struct zfcp_fsf_req *); | extern void zfcp_fsf_req_free(struct zfcp_fsf_req *); | ||||||
| extern struct zfcp_fsf_req *zfcp_fsf_send_fcp_command_task_management( | extern struct zfcp_fsf_req *zfcp_fsf_send_fcp_ctm(struct zfcp_adapter *, | ||||||
| 	struct zfcp_adapter *, struct zfcp_unit *, u8, int); | 						     struct zfcp_unit *, u8, | ||||||
|  | 						     int); | ||||||
| extern struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command( | extern struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command( | ||||||
| 	unsigned long, struct zfcp_adapter *, struct zfcp_unit *, int); | 	unsigned long, struct zfcp_adapter *, struct zfcp_unit *, int); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -83,8 +83,8 @@ static void zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req) | |||||||
| 	u16 no_entries; | 	u16 no_entries; | ||||||
| 	u32 range_mask; | 	u32 range_mask; | ||||||
| 
 | 
 | ||||||
| 	fcp_rscn_head = (struct fcp_rscn_head *) status_buffer->payload; | 	fcp_rscn_head = (struct fcp_rscn_head *) status_buffer->payload.data; | ||||||
| 	fcp_rscn_element = (struct fcp_rscn_element *) status_buffer->payload; | 	fcp_rscn_element = (struct fcp_rscn_element *) fcp_rscn_head; | ||||||
| 
 | 
 | ||||||
| 	/* see FC-FS */ | 	/* see FC-FS */ | ||||||
| 	no_entries = fcp_rscn_head->payload_len / | 	no_entries = fcp_rscn_head->payload_len / | ||||||
| @ -135,7 +135,7 @@ static void zfcp_fc_incoming_plogi(struct zfcp_fsf_req *req) | |||||||
| 	struct fsf_status_read_buffer *status_buffer = | 	struct fsf_status_read_buffer *status_buffer = | ||||||
| 		(struct fsf_status_read_buffer *)req->data; | 		(struct fsf_status_read_buffer *)req->data; | ||||||
| 	struct fsf_plogi *els_plogi = | 	struct fsf_plogi *els_plogi = | ||||||
| 		(struct fsf_plogi *) status_buffer->payload; | 		(struct fsf_plogi *) status_buffer->payload.data; | ||||||
| 
 | 
 | ||||||
| 	zfcp_fc_incoming_wwpn(req, els_plogi->serv_param.wwpn); | 	zfcp_fc_incoming_wwpn(req, els_plogi->serv_param.wwpn); | ||||||
| } | } | ||||||
| @ -144,7 +144,8 @@ static void zfcp_fc_incoming_logo(struct zfcp_fsf_req *req) | |||||||
| { | { | ||||||
| 	struct fsf_status_read_buffer *status_buffer = | 	struct fsf_status_read_buffer *status_buffer = | ||||||
| 		(struct fsf_status_read_buffer *)req->data; | 		(struct fsf_status_read_buffer *)req->data; | ||||||
| 	struct fcp_logo *els_logo = (struct fcp_logo *) status_buffer->payload; | 	struct fcp_logo *els_logo = | ||||||
|  | 		(struct fcp_logo *) status_buffer->payload.data; | ||||||
| 
 | 
 | ||||||
| 	zfcp_fc_incoming_wwpn(req, els_logo->nport_wwpn); | 	zfcp_fc_incoming_wwpn(req, els_logo->nport_wwpn); | ||||||
| } | } | ||||||
| @ -157,7 +158,7 @@ void zfcp_fc_incoming_els(struct zfcp_fsf_req *fsf_req) | |||||||
| { | { | ||||||
| 	struct fsf_status_read_buffer *status_buffer = | 	struct fsf_status_read_buffer *status_buffer = | ||||||
| 		(struct fsf_status_read_buffer *) fsf_req->data; | 		(struct fsf_status_read_buffer *) fsf_req->data; | ||||||
| 	unsigned int els_type = status_buffer->payload[0]; | 	unsigned int els_type = status_buffer->payload.data[0]; | ||||||
| 
 | 
 | ||||||
| 	zfcp_san_dbf_event_incoming_els(fsf_req); | 	zfcp_san_dbf_event_incoming_els(fsf_req); | ||||||
| 	if (els_type == LS_PLOGI) | 	if (els_type == LS_PLOGI) | ||||||
|  | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -287,29 +287,6 @@ struct fsf_bit_error_payload { | |||||||
| 	u32 current_transmit_b2b_credit; | 	u32 current_transmit_b2b_credit; | ||||||
| } __attribute__ ((packed)); | } __attribute__ ((packed)); | ||||||
| 
 | 
 | ||||||
| struct fsf_status_read_buffer { |  | ||||||
| 	u32 status_type; |  | ||||||
| 	u32 status_subtype; |  | ||||||
| 	u32 length; |  | ||||||
| 	u32 res1; |  | ||||||
| 	struct fsf_queue_designator queue_designator; |  | ||||||
| 	u32 d_id; |  | ||||||
| 	u32 class; |  | ||||||
| 	u64 fcp_lun; |  | ||||||
| 	u8  res3[24]; |  | ||||||
| 	u8  payload[FSF_STATUS_READ_PAYLOAD_SIZE]; |  | ||||||
| } __attribute__ ((packed)); |  | ||||||
| 
 |  | ||||||
| struct fsf_qual_version_error { |  | ||||||
| 	u32 fsf_version; |  | ||||||
| 	u32 res1[3]; |  | ||||||
| } __attribute__ ((packed)); |  | ||||||
| 
 |  | ||||||
| struct fsf_qual_sequence_error { |  | ||||||
| 	u32 exp_req_seq_no; |  | ||||||
| 	u32 res1[3]; |  | ||||||
| } __attribute__ ((packed)); |  | ||||||
| 
 |  | ||||||
| struct fsf_link_down_info { | struct fsf_link_down_info { | ||||||
| 	u32 error_code; | 	u32 error_code; | ||||||
| 	u32 res1; | 	u32 res1; | ||||||
| @ -322,6 +299,34 @@ struct fsf_link_down_info { | |||||||
| 	u8 vendor_specific_code; | 	u8 vendor_specific_code; | ||||||
| } __attribute__ ((packed)); | } __attribute__ ((packed)); | ||||||
| 
 | 
 | ||||||
|  | struct fsf_status_read_buffer { | ||||||
|  | 	u32 status_type; | ||||||
|  | 	u32 status_subtype; | ||||||
|  | 	u32 length; | ||||||
|  | 	u32 res1; | ||||||
|  | 	struct fsf_queue_designator queue_designator; | ||||||
|  | 	u32 d_id; | ||||||
|  | 	u32 class; | ||||||
|  | 	u64 fcp_lun; | ||||||
|  | 	u8  res3[24]; | ||||||
|  | 	union { | ||||||
|  | 		u8  data[FSF_STATUS_READ_PAYLOAD_SIZE]; | ||||||
|  | 		u32 word[FSF_STATUS_READ_PAYLOAD_SIZE/sizeof(u32)]; | ||||||
|  | 		struct fsf_link_down_info link_down_info; | ||||||
|  | 		struct fsf_bit_error_payload bit_error; | ||||||
|  | 	} payload; | ||||||
|  | } __attribute__ ((packed)); | ||||||
|  | 
 | ||||||
|  | struct fsf_qual_version_error { | ||||||
|  | 	u32 fsf_version; | ||||||
|  | 	u32 res1[3]; | ||||||
|  | } __attribute__ ((packed)); | ||||||
|  | 
 | ||||||
|  | struct fsf_qual_sequence_error { | ||||||
|  | 	u32 exp_req_seq_no; | ||||||
|  | 	u32 res1[3]; | ||||||
|  | } __attribute__ ((packed)); | ||||||
|  | 
 | ||||||
| struct fsf_qual_latency_info { | struct fsf_qual_latency_info { | ||||||
| 	u32 channel_lat; | 	u32 channel_lat; | ||||||
| 	u32 fabric_lat; | 	u32 fabric_lat; | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ | |||||||
| 
 | 
 | ||||||
| /* FIXME(tune): free space should be one max. SBAL chain plus what? */ | /* FIXME(tune): free space should be one max. SBAL chain plus what? */ | ||||||
| #define ZFCP_QDIO_PCI_INTERVAL	(QDIO_MAX_BUFFERS_PER_Q \ | #define ZFCP_QDIO_PCI_INTERVAL	(QDIO_MAX_BUFFERS_PER_Q \ | ||||||
| 				- (ZFCP_MAX_SBALS_PER_REQ + 4)) | 				- (FSF_MAX_SBALS_PER_REQ + 4)) | ||||||
| #define QBUFF_PER_PAGE		(PAGE_SIZE / sizeof(struct qdio_buffer)) | #define QBUFF_PER_PAGE		(PAGE_SIZE / sizeof(struct qdio_buffer)) | ||||||
| 
 | 
 | ||||||
| static int zfcp_qdio_buffers_enqueue(struct qdio_buffer **sbal) | static int zfcp_qdio_buffers_enqueue(struct qdio_buffer **sbal) | ||||||
| @ -432,9 +432,9 @@ void zfcp_qdio_close(struct zfcp_adapter *adapter) | |||||||
| 
 | 
 | ||||||
| 	/* clear QDIOUP flag, thus do_QDIO is not called during qdio_shutdown */ | 	/* clear QDIOUP flag, thus do_QDIO is not called during qdio_shutdown */ | ||||||
| 	req_q = &adapter->req_q; | 	req_q = &adapter->req_q; | ||||||
| 	write_lock_irq(&req_q->lock); | 	spin_lock(&req_q->lock); | ||||||
| 	atomic_clear_mask(ZFCP_STATUS_ADAPTER_QDIOUP, &adapter->status); | 	atomic_clear_mask(ZFCP_STATUS_ADAPTER_QDIOUP, &adapter->status); | ||||||
| 	write_unlock_irq(&req_q->lock); | 	spin_unlock(&req_q->lock); | ||||||
| 
 | 
 | ||||||
| 	while (qdio_shutdown(adapter->ccw_device, QDIO_FLAG_CLEANUP_USING_CLEAR) | 	while (qdio_shutdown(adapter->ccw_device, QDIO_FLAG_CLEANUP_USING_CLEAR) | ||||||
| 			== -EINPROGRESS) | 			== -EINPROGRESS) | ||||||
|  | |||||||
| @ -182,7 +182,7 @@ static int zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt) | |||||||
| 		zfcp_scsi_dbf_event_abort("lte1", adapter, scpnt, NULL, 0); | 		zfcp_scsi_dbf_event_abort("lte1", adapter, scpnt, NULL, 0); | ||||||
| 		return retval; | 		return retval; | ||||||
| 	} | 	} | ||||||
| 	fsf_req->data = 0; | 	fsf_req->data = NULL; | ||||||
| 	fsf_req->status |= ZFCP_STATUS_FSFREQ_ABORTING; | 	fsf_req->status |= ZFCP_STATUS_FSFREQ_ABORTING; | ||||||
| 
 | 
 | ||||||
| 	/* don't access old fsf_req after releasing the abort_lock */ | 	/* don't access old fsf_req after releasing the abort_lock */ | ||||||
| @ -220,8 +220,7 @@ static int zfcp_task_mgmt_function(struct zfcp_unit *unit, u8 tm_flags, | |||||||
| 	int retval = SUCCESS; | 	int retval = SUCCESS; | ||||||
| 
 | 
 | ||||||
| 	/* issue task management function */ | 	/* issue task management function */ | ||||||
| 	fsf_req = zfcp_fsf_send_fcp_command_task_management | 	fsf_req = zfcp_fsf_send_fcp_ctm(adapter, unit, tm_flags, 0); | ||||||
| 		(adapter, unit, tm_flags, 0); |  | ||||||
| 	if (!fsf_req) { | 	if (!fsf_req) { | ||||||
| 		zfcp_scsi_dbf_event_devreset("nres", tm_flags, unit, scpnt); | 		zfcp_scsi_dbf_event_devreset("nres", tm_flags, unit, scpnt); | ||||||
| 		return FAILED; | 		return FAILED; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user