[SCSI] cxgb3i: added per-task data to track transmit progress
added per-task struct cxgb3i_task_data to track the data transmiting progress and the state of the pdus to be transmitted. Signed-off-by: Karen Xie <kxie@chelsio.com> Reviewed-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
1648b11ea7
commit
949847d195
2 changed files with 24 additions and 2 deletions
|
@ -20,6 +20,7 @@
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
#include <linux/scatterlist.h>
|
#include <linux/scatterlist.h>
|
||||||
|
#include <linux/skbuff.h>
|
||||||
#include <scsi/libiscsi_tcp.h>
|
#include <scsi/libiscsi_tcp.h>
|
||||||
|
|
||||||
/* from cxgb3 LLD */
|
/* from cxgb3 LLD */
|
||||||
|
@ -113,6 +114,26 @@ struct cxgb3i_endpoint {
|
||||||
struct cxgb3i_conn *cconn;
|
struct cxgb3i_conn *cconn;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct cxgb3i_task_data - private iscsi task data
|
||||||
|
*
|
||||||
|
* @nr_frags: # of coalesced page frags (from scsi sgl)
|
||||||
|
* @frags: coalesced page frags (from scsi sgl)
|
||||||
|
* @skb: tx pdu skb
|
||||||
|
* @offset: data offset for the next pdu
|
||||||
|
* @count: max. possible pdu payload
|
||||||
|
* @sgoffset: offset to the first sg entry for a given offset
|
||||||
|
*/
|
||||||
|
#define MAX_PDU_FRAGS ((ULP2_MAX_PDU_PAYLOAD + 512 - 1) / 512)
|
||||||
|
struct cxgb3i_task_data {
|
||||||
|
unsigned short nr_frags;
|
||||||
|
skb_frag_t frags[MAX_PDU_FRAGS];
|
||||||
|
struct sk_buff *skb;
|
||||||
|
unsigned int offset;
|
||||||
|
unsigned int count;
|
||||||
|
unsigned int sgoffset;
|
||||||
|
};
|
||||||
|
|
||||||
int cxgb3i_iscsi_init(void);
|
int cxgb3i_iscsi_init(void);
|
||||||
void cxgb3i_iscsi_cleanup(void);
|
void cxgb3i_iscsi_cleanup(void);
|
||||||
|
|
||||||
|
|
|
@ -364,7 +364,8 @@ cxgb3i_session_create(struct iscsi_endpoint *ep, u16 cmds_max, u16 qdepth,
|
||||||
|
|
||||||
cls_session = iscsi_session_setup(&cxgb3i_iscsi_transport, shost,
|
cls_session = iscsi_session_setup(&cxgb3i_iscsi_transport, shost,
|
||||||
cmds_max,
|
cmds_max,
|
||||||
sizeof(struct iscsi_tcp_task),
|
sizeof(struct iscsi_tcp_task) +
|
||||||
|
sizeof(struct cxgb3i_task_data),
|
||||||
initial_cmdsn, ISCSI_MAX_TARGET);
|
initial_cmdsn, ISCSI_MAX_TARGET);
|
||||||
if (!cls_session)
|
if (!cls_session)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -844,7 +845,7 @@ static struct scsi_host_template cxgb3i_host_template = {
|
||||||
.proc_name = "cxgb3i",
|
.proc_name = "cxgb3i",
|
||||||
.queuecommand = iscsi_queuecommand,
|
.queuecommand = iscsi_queuecommand,
|
||||||
.change_queue_depth = iscsi_change_queue_depth,
|
.change_queue_depth = iscsi_change_queue_depth,
|
||||||
.can_queue = 128 * (ISCSI_DEF_XMIT_CMDS_MAX - 1),
|
.can_queue = CXGB3I_SCSI_QDEPTH_DFLT - 1,
|
||||||
.sg_tablesize = SG_ALL,
|
.sg_tablesize = SG_ALL,
|
||||||
.max_sectors = 0xFFFF,
|
.max_sectors = 0xFFFF,
|
||||||
.cmd_per_lun = ISCSI_DEF_CMD_PER_LUN,
|
.cmd_per_lun = ISCSI_DEF_CMD_PER_LUN,
|
||||||
|
|
Loading…
Add table
Reference in a new issue