forked from Minki/linux
[SCSI] libiscsi: iscsi_session_setup to allow for private space
This patch contains changes that allow iscsi_session_setup to allocate private space for LLD's Signed-off-by: Jayamohan Kallickal <jayamohank@serverengines.com> Acked-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
6733b39a13
commit
b8b9e1b812
@ -426,7 +426,7 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep,
|
||||
* because we preallocate so many resources
|
||||
*/
|
||||
cls_session = iscsi_session_setup(&iscsi_iser_transport, shost,
|
||||
ISCSI_DEF_XMIT_CMDS_MAX,
|
||||
ISCSI_DEF_XMIT_CMDS_MAX, 0,
|
||||
sizeof(struct iscsi_iser_task),
|
||||
initial_cmdsn, 0);
|
||||
if (!cls_session)
|
||||
|
@ -44,9 +44,10 @@ struct iscsi_cls_session *beiscsi_session_create(struct iscsi_endpoint *ep,
|
||||
struct Scsi_Host *shost;
|
||||
struct beiscsi_endpoint *beiscsi_ep;
|
||||
struct iscsi_cls_session *cls_session;
|
||||
struct iscsi_session *sess;
|
||||
struct beiscsi_hba *phba;
|
||||
struct iscsi_task *task;
|
||||
struct iscsi_session *sess;
|
||||
struct beiscsi_session *beiscsi_sess;
|
||||
struct beiscsi_io_task *io_task;
|
||||
unsigned int max_size, num_cmd;
|
||||
dma_addr_t bus_add;
|
||||
@ -73,7 +74,8 @@ struct iscsi_cls_session *beiscsi_session_create(struct iscsi_endpoint *ep,
|
||||
|
||||
cls_session = iscsi_session_setup(&beiscsi_iscsi_transport,
|
||||
shost, cmds_max,
|
||||
sizeof(struct beiscsi_io_task),
|
||||
sizeof(*beiscsi_sess),
|
||||
sizeof(*io_task),
|
||||
initial_cmdsn, ISCSI_MAX_TARGET);
|
||||
if (!cls_session)
|
||||
return NULL;
|
||||
|
@ -327,6 +327,10 @@ struct beiscsi_hba {
|
||||
struct be_ctrl_info ctrl;
|
||||
};
|
||||
|
||||
struct beiscsi_session {
|
||||
struct pci_pool *bhs_pool;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct beiscsi_conn - iscsi connection structure
|
||||
*/
|
||||
@ -338,6 +342,7 @@ struct beiscsi_conn {
|
||||
struct beiscsi_endpoint *ep;
|
||||
unsigned short login_in_progress;
|
||||
struct sgl_handle *plogin_sgl_handle;
|
||||
struct beiscsi_session *beiscsi_sess;
|
||||
};
|
||||
|
||||
/* This structure is used by the chip */
|
||||
|
@ -1243,7 +1243,7 @@ bnx2i_session_create(struct iscsi_endpoint *ep,
|
||||
cmds_max = BNX2I_SQ_WQES_MIN;
|
||||
|
||||
cls_session = iscsi_session_setup(&bnx2i_iscsi_transport, shost,
|
||||
cmds_max, sizeof(struct bnx2i_cmd),
|
||||
cmds_max, 0, sizeof(struct bnx2i_cmd),
|
||||
initial_cmdsn, ISCSI_MAX_TARGET);
|
||||
if (!cls_session)
|
||||
return NULL;
|
||||
|
@ -422,7 +422,7 @@ cxgb3i_session_create(struct iscsi_endpoint *ep, u16 cmds_max, u16 qdepth,
|
||||
BUG_ON(hba != iscsi_host_priv(shost));
|
||||
|
||||
cls_session = iscsi_session_setup(&cxgb3i_iscsi_transport, shost,
|
||||
cmds_max,
|
||||
cmds_max, 0,
|
||||
sizeof(struct iscsi_tcp_task) +
|
||||
sizeof(struct cxgb3i_task_data),
|
||||
initial_cmdsn, ISCSI_MAX_TARGET);
|
||||
|
@ -811,7 +811,7 @@ iscsi_sw_tcp_session_create(struct iscsi_endpoint *ep, uint16_t cmds_max,
|
||||
goto free_host;
|
||||
|
||||
cls_session = iscsi_session_setup(&iscsi_sw_tcp_transport, shost,
|
||||
cmds_max,
|
||||
cmds_max, 0,
|
||||
sizeof(struct iscsi_tcp_task) +
|
||||
sizeof(struct iscsi_sw_tcp_hdrbuf),
|
||||
initial_cmdsn, 0);
|
||||
|
@ -2436,7 +2436,7 @@ static void iscsi_host_dec_session_cnt(struct Scsi_Host *shost)
|
||||
*/
|
||||
struct iscsi_cls_session *
|
||||
iscsi_session_setup(struct iscsi_transport *iscsit, struct Scsi_Host *shost,
|
||||
uint16_t cmds_max, int cmd_task_size,
|
||||
uint16_t cmds_max, int dd_size, int cmd_task_size,
|
||||
uint32_t initial_cmdsn, unsigned int id)
|
||||
{
|
||||
struct iscsi_host *ihost = shost_priv(shost);
|
||||
@ -2486,7 +2486,8 @@ iscsi_session_setup(struct iscsi_transport *iscsit, struct Scsi_Host *shost,
|
||||
scsi_cmds = total_cmds - ISCSI_MGMT_CMDS_MAX;
|
||||
|
||||
cls_session = iscsi_alloc_session(shost, iscsit,
|
||||
sizeof(struct iscsi_session));
|
||||
sizeof(struct iscsi_session) +
|
||||
dd_size);
|
||||
if (!cls_session)
|
||||
goto dec_session_count;
|
||||
session = cls_session->dd_data;
|
||||
@ -2503,6 +2504,7 @@ iscsi_session_setup(struct iscsi_transport *iscsit, struct Scsi_Host *shost,
|
||||
session->max_cmdsn = initial_cmdsn + 1;
|
||||
session->max_r2t = 1;
|
||||
session->tt = iscsit;
|
||||
session->dd_data = cls_session->dd_data + sizeof(*session);
|
||||
mutex_init(&session->eh_mutex);
|
||||
spin_lock_init(&session->lock);
|
||||
|
||||
|
@ -303,6 +303,7 @@ struct iscsi_session {
|
||||
int cmds_max; /* size of cmds array */
|
||||
struct iscsi_task **cmds; /* Original Cmds arr */
|
||||
struct iscsi_pool cmdpool; /* PDU's pool */
|
||||
void *dd_data; /* LLD private data */
|
||||
};
|
||||
|
||||
enum {
|
||||
@ -363,7 +364,7 @@ extern int iscsi_target_alloc(struct scsi_target *starget);
|
||||
*/
|
||||
extern struct iscsi_cls_session *
|
||||
iscsi_session_setup(struct iscsi_transport *, struct Scsi_Host *shost,
|
||||
uint16_t, int, uint32_t, unsigned int);
|
||||
uint16_t, int, int, uint32_t, unsigned int);
|
||||
extern void iscsi_session_teardown(struct iscsi_cls_session *);
|
||||
extern void iscsi_session_recovery_timedout(struct iscsi_cls_session *);
|
||||
extern int iscsi_set_param(struct iscsi_cls_conn *cls_conn,
|
||||
|
Loading…
Reference in New Issue
Block a user