IB/isert: convert to the generic RDMA READ/WRITE API
Replace the homegrown RDMA READ/WRITE code in isert with the generic API, which also adds iWarp support to the I/O path as a side effect. Note that full iWarp operation will need a few additional patches from Steve. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
		
							parent
							
								
									0e353e34e1
								
							
						
					
					
						commit
						38a2d0d429
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -3,6 +3,7 @@ | ||||
| #include <linux/in6.h> | ||||
| #include <rdma/ib_verbs.h> | ||||
| #include <rdma/rdma_cm.h> | ||||
| #include <rdma/rw.h> | ||||
| #include <scsi/iser.h> | ||||
| 
 | ||||
| 
 | ||||
| @ -53,10 +54,7 @@ | ||||
| 
 | ||||
| #define ISERT_MIN_POSTED_RX	(ISCSI_DEF_XMIT_CMDS_MAX >> 2) | ||||
| 
 | ||||
| #define ISERT_INFLIGHT_DATAOUTS	8 | ||||
| 
 | ||||
| #define ISERT_QP_MAX_REQ_DTOS	(ISCSI_DEF_XMIT_CMDS_MAX *    \ | ||||
| 				(1 + ISERT_INFLIGHT_DATAOUTS) + \ | ||||
| #define ISERT_QP_MAX_REQ_DTOS	(ISCSI_DEF_XMIT_CMDS_MAX +    \ | ||||
| 				ISERT_MAX_TX_MISC_PDUS	+ \ | ||||
| 				ISERT_MAX_RX_MISC_PDUS) | ||||
| 
 | ||||
| @ -71,13 +69,6 @@ enum isert_desc_type { | ||||
| 	ISCSI_TX_DATAIN | ||||
| }; | ||||
| 
 | ||||
| enum iser_ib_op_code { | ||||
| 	ISER_IB_RECV, | ||||
| 	ISER_IB_SEND, | ||||
| 	ISER_IB_RDMA_WRITE, | ||||
| 	ISER_IB_RDMA_READ, | ||||
| }; | ||||
| 
 | ||||
| enum iser_conn_state { | ||||
| 	ISER_CONN_INIT, | ||||
| 	ISER_CONN_UP, | ||||
| @ -118,42 +109,6 @@ static inline struct iser_tx_desc *cqe_to_tx_desc(struct ib_cqe *cqe) | ||||
| 	return container_of(cqe, struct iser_tx_desc, tx_cqe); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| enum isert_indicator { | ||||
| 	ISERT_PROTECTED		= 1 << 0, | ||||
| 	ISERT_DATA_KEY_VALID	= 1 << 1, | ||||
| 	ISERT_PROT_KEY_VALID	= 1 << 2, | ||||
| 	ISERT_SIG_KEY_VALID	= 1 << 3, | ||||
| }; | ||||
| 
 | ||||
| struct pi_context { | ||||
| 	struct ib_mr		       *prot_mr; | ||||
| 	struct ib_mr		       *sig_mr; | ||||
| }; | ||||
| 
 | ||||
| struct fast_reg_descriptor { | ||||
| 	struct list_head		list; | ||||
| 	struct ib_mr		       *data_mr; | ||||
| 	u8				ind; | ||||
| 	struct pi_context	       *pi_ctx; | ||||
| }; | ||||
| 
 | ||||
| struct isert_data_buf { | ||||
| 	struct scatterlist     *sg; | ||||
| 	int			nents; | ||||
| 	u32			sg_off; | ||||
| 	u32			len; /* cur_rdma_length */ | ||||
| 	u32			offset; | ||||
| 	unsigned int		dma_nents; | ||||
| 	enum dma_data_direction dma_dir; | ||||
| }; | ||||
| 
 | ||||
| enum { | ||||
| 	DATA = 0, | ||||
| 	PROT = 1, | ||||
| 	SIG = 2, | ||||
| }; | ||||
| 
 | ||||
| struct isert_cmd { | ||||
| 	uint32_t		read_stag; | ||||
| 	uint32_t		write_stag; | ||||
| @ -166,16 +121,7 @@ struct isert_cmd { | ||||
| 	struct iscsi_cmd	*iscsi_cmd; | ||||
| 	struct iser_tx_desc	tx_desc; | ||||
| 	struct iser_rx_desc	*rx_desc; | ||||
| 	enum iser_ib_op_code	iser_ib_op; | ||||
| 	struct ib_sge		*ib_sge; | ||||
| 	struct ib_sge		s_ib_sge; | ||||
| 	int			rdma_wr_num; | ||||
| 	struct ib_rdma_wr	*rdma_wr; | ||||
| 	struct ib_rdma_wr	s_rdma_wr; | ||||
| 	struct ib_sge		ib_sg[3]; | ||||
| 	struct isert_data_buf	data; | ||||
| 	struct isert_data_buf	prot; | ||||
| 	struct fast_reg_descriptor *fr_desc; | ||||
| 	struct rdma_rw_ctx	rw; | ||||
| 	struct work_struct	comp_work; | ||||
| 	struct scatterlist	sg; | ||||
| }; | ||||
| @ -210,10 +156,6 @@ struct isert_conn { | ||||
| 	struct isert_device	*device; | ||||
| 	struct mutex		mutex; | ||||
| 	struct kref		kref; | ||||
| 	struct list_head	fr_pool; | ||||
| 	int			fr_pool_size; | ||||
| 	/* lock to protect fastreg pool */ | ||||
| 	spinlock_t		pool_lock; | ||||
| 	struct work_struct	release_work; | ||||
| 	bool                    logout_posted; | ||||
| 	bool                    snd_w_inv; | ||||
| @ -236,7 +178,6 @@ struct isert_comp { | ||||
| }; | ||||
| 
 | ||||
| struct isert_device { | ||||
| 	int			use_fastreg; | ||||
| 	bool			pi_capable; | ||||
| 	int			refcount; | ||||
| 	struct ib_device	*ib_device; | ||||
| @ -244,10 +185,6 @@ struct isert_device { | ||||
| 	struct isert_comp	*comps; | ||||
| 	int                     comps_used; | ||||
| 	struct list_head	dev_node; | ||||
| 	int			(*reg_rdma_mem)(struct isert_cmd *isert_cmd, | ||||
| 						struct iscsi_conn *conn); | ||||
| 	void			(*unreg_rdma_mem)(struct isert_cmd *isert_cmd, | ||||
| 						  struct isert_conn *isert_conn); | ||||
| }; | ||||
| 
 | ||||
| struct isert_np { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user