Index: enum-r1214/include/iet_u.h diff -u enum-r1214/include/iet_u.h:1.1 enum-r1214/include/iet_u.h:1.2 --- enum-r1214/include/iet_u.h:1.1 Sat Jul 2 12:39:32 2005 +++ enum-r1214/include/iet_u.h Sat Jul 2 13:21:08 2005 @@ -47,6 +47,10 @@ int fd; }; +/* + * do not set these enum values manually, + * since they are used as an index of the arrays. + */ enum { key_initial_r2t, key_immediate_data, @@ -76,9 +80,16 @@ target_key_last, }; + enum { + key_incoming_user, + key_outgoing_user, + user_key_last, +}; + enum { key_session, key_target, + key_user, }; struct iscsi_param_info { Index: enum-r1214/kernel/file-io.c diff -u enum-r1214/kernel/file-io.c:1.1 enum-r1214/kernel/file-io.c:1.2 --- enum-r1214/kernel/file-io.c:1.1 Sat Jul 2 12:39:32 2005 +++ enum-r1214/kernel/file-io.c Sat Jul 2 13:21:08 2005 @@ -139,7 +139,7 @@ return; p = (u32 *) (volume->scsi_id + VENDOR_ID_LEN); - *(p + 0) = volume->target->trgt_param.target_type; + *(p + 0) = volume->target->trgt_param.tp_target_type; *(p + 1) = volume->target->tid; *(p + 2) = (unsigned int) inode->i_ino; *(p + 3) = (unsigned int) inode->i_sb->s_dev; Index: enum-r1214/kernel/iscsi.c diff -u enum-r1214/kernel/iscsi.c:1.1 enum-r1214/kernel/iscsi.c:1.2 --- enum-r1214/kernel/iscsi.c:1.1 Sat Jul 2 12:39:32 2005 +++ enum-r1214/kernel/iscsi.c Sat Jul 2 13:21:08 2005 @@ -248,7 +248,7 @@ LIST_HEAD(send); dprintk(D_GENERIC, "%p\n", cmnd); - pdusize = conn->session->param.max_data_pdu_length; + pdusize = conn->session->param.sp_max_data_pdu_length; expsize = cmnd_read_size(cmnd); size = min(expsize, tio->size); offset = 0; @@ -755,7 +755,7 @@ LIST_HEAD(send); length = req->r2t_length; - burst = req->conn->session->param.max_burst_length; + burst = req->conn->session->param.sp_max_burst_length; offset = be32_to_cpu(cmnd_hdr(req)->data_length) - length; do { @@ -785,7 +785,7 @@ list_add_tail(&rsp->list, &send); - if (++req->outstanding_r2t >= req->conn->session->param.max_outstanding_r2t) + if (++req->outstanding_r2t >= req->conn->session->param.sp_max_outstanding_r2t) break; } while (length); @@ -961,10 +961,10 @@ req->is_unsolicited_data = !(req_hdr->flags & ISCSI_CMD_FINAL); req->target_task_tag = get_next_ttt(conn->session); - if (!param->immediate_data && req->pdu.datasize) + if (!param->sp_immediate_data && req->pdu.datasize) eprintk("%x %x\n", cmnd_itt(req), req_hdr->scb[0]); - if (param->initial_r2t && !(req_hdr->flags & ISCSI_CMD_FINAL)) + if (param->sp_initial_r2t && !(req_hdr->flags & ISCSI_CMD_FINAL)) eprintk("%x %x\n", cmnd_itt(req), req_hdr->scb[0]); if (req_hdr->scb[0] == WRITE_VERIFY && req_hdr->scb[1] & 0x02) @@ -1547,9 +1547,9 @@ struct iscsi_conn *conn = cmnd->conn; struct iscsi_sess_param *param = &conn->session->param; - if (cmnd->pdu.datasize > param->max_data_pdu_length) { + if (cmnd->pdu.datasize > param->sp_max_data_pdu_length) { eprintk("too lond data %x %u %u\n", cmnd_itt(cmnd), - cmnd->pdu.datasize, param->max_data_pdu_length); + cmnd->pdu.datasize, param->sp_max_data_pdu_length); if (get_pgcnt(cmnd->pdu.datasize, 0) > ISCSI_CONN_IOV_MAX) { conn_close(conn); Index: enum-r1214/kernel/iscsi.h diff -u enum-r1214/kernel/iscsi.h:1.1 enum-r1214/kernel/iscsi.h:1.2 --- enum-r1214/kernel/iscsi.h:1.1 Sat Jul 2 12:39:32 2005 +++ enum-r1214/kernel/iscsi.h Sat Jul 2 13:21:08 2005 @@ -17,30 +17,32 @@ #include "iet_u.h" struct iscsi_sess_param { - int initial_r2t; - int immediate_data; - int max_connections; - int max_data_pdu_length; - int max_burst_length; - int first_burst_length; - int default_wait_time; - int default_retain_time; - int max_outstanding_r2t; - int data_pdu_inorder; - int data_sequence_inorder; - int error_recovery_level; - int header_digest; - int data_digest; - int ofmarker; - int ifmarker; - int ofmarkint; - int ifmarkint; + int val[session_key_last]; +#define sp_initial_r2t val[key_initial_r2t] +#define sp_immediate_data val[key_immediate_data] +#define sp_max_connections val[key_max_connections] +#define sp_max_data_pdu_length val[key_max_data_pdu_length] +#define sp_max_burst_length val[key_max_burst_length] +#define sp_first_burst_length val[key_first_burst_length] +#define sp_default_wait_time val[key_default_wait_time] +#define sp_default_retain_time val[key_default_retain_time] +#define sp_max_outstanding_r2t val[key_max_outstanding_r2t] +#define sp_data_pdu_inorder val[key_data_pdu_inorder] +#define sp_data_sequence_inorder val[key_data_sequence_inorder] +#define sp_error_recovery_level val[key_error_recovery_level] +#define sp_header_digest val[key_header_digest] +#define sp_data_digest val[key_data_digest] +#define sp_ofmarker val[key_ofmarker] +#define sp_ifmarker val[key_ifmarker] +#define sp_ofmarkint val[key_ofmarkint] +#define sp_ifmarkint val[key_ifmarkint] }; struct iscsi_trgt_param { - int wthreads; - int target_type; - int queued_cmnds; + int val[target_key_last]; +#define tp_wthreads val[key_wthreads] +#define tp_target_type val[key_target_type] +#define tp_queued_cmnds val[key_queued_cmnds] }; struct tio { Index: enum-r1214/kernel/iscsi_dbg.h diff -u enum-r1214/kernel/iscsi_dbg.h:1.1 enum-r1214/kernel/iscsi_dbg.h:1.2 --- enum-r1214/kernel/iscsi_dbg.h:1.1 Sat Jul 2 12:39:32 2005 +++ enum-r1214/kernel/iscsi_dbg.h Sat Jul 2 13:21:08 2005 @@ -105,20 +105,20 @@ #define show_param(param)\ {\ eprintk("%d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",\ - (param)->initial_r2t,\ - (param)->immediate_data,\ - (param)->max_connections,\ - (param)->max_data_pdu_length,\ - (param)->max_burst_length,\ - (param)->first_burst_length,\ - (param)->default_wait_time,\ - (param)->default_retain_time,\ - (param)->max_outstanding_r2t,\ - (param)->data_pdu_inorder,\ - (param)->data_sequence_inorder,\ - (param)->error_recovery_level,\ - (param)->header_digest,\ - (param)->data_digest);\ + (param)->sp_initial_r2t,\ + (param)->sp_immediate_data,\ + (param)->sp_max_connections,\ + (param)->sp_max_data_pdu_length,\ + (param)->sp_max_burst_length,\ + (param)->sp_first_burst_length,\ + (param)->sp_default_wait_time,\ + (param)->sp_default_retain_time,\ + (param)->sp_max_outstanding_r2t,\ + (param)->sp_data_pdu_inorder,\ + (param)->sp_data_sequence_inorder,\ + (param)->sp_error_recovery_level,\ + (param)->sp_header_digest,\ + (param)->sp_data_digest);\ } #endif Index: enum-r1214/kernel/param.c diff -u enum-r1214/kernel/param.c:1.1 enum-r1214/kernel/param.c:1.2 --- enum-r1214/kernel/param.c:1.1 Sat Jul 2 12:39:32 2005 +++ enum-r1214/kernel/param.c Sat Jul 2 13:21:08 2005 @@ -23,20 +23,20 @@ } \ } while (0) -#define SET_PARAM(param, info, iparam, word) \ +#define SET_PARAM(param, info, iparam, idx) \ ({ \ int changed = 0; \ - if (!info->partial || (info->partial & 1 << key_##word)) { \ - if (param->word != iparam[key_##word]) \ + if (!info->partial || (info->partial & 1 << idx)) { \ + if (param->val[idx] != iparam[idx]) \ changed = 1; \ - param->word = iparam[key_##word]; \ + param->val[idx] = iparam[idx]; \ } \ changed; \ }) -#define GET_PARAM(param, info, iparam, word) \ +#define GET_PARAM(param, info, iparam, idx) \ do { \ - iparam[key_##word] = param->word; \ + iparam[idx] = param->val[idx]; \ } while (0) static void sess_param_check(struct iscsi_param_info *info) @@ -60,49 +60,19 @@ static void sess_param_set(struct iscsi_sess_param *param, struct iscsi_param_info *info) { u32 *iparam = info->session_param; + int i; - SET_PARAM(param, info, iparam, initial_r2t); - SET_PARAM(param, info, iparam, immediate_data); - SET_PARAM(param, info, iparam, max_connections); - SET_PARAM(param, info, iparam, max_data_pdu_length); - SET_PARAM(param, info, iparam, max_burst_length); - SET_PARAM(param, info, iparam, first_burst_length); - SET_PARAM(param, info, iparam, default_wait_time); - SET_PARAM(param, info, iparam, default_retain_time); - SET_PARAM(param, info, iparam, max_outstanding_r2t); - SET_PARAM(param, info, iparam, data_pdu_inorder); - SET_PARAM(param, info, iparam, data_sequence_inorder); - SET_PARAM(param, info, iparam, error_recovery_level); - SET_PARAM(param, info, iparam, header_digest); - SET_PARAM(param, info, iparam, data_digest); - SET_PARAM(param, info, iparam, ofmarker); - SET_PARAM(param, info, iparam, ifmarker); - SET_PARAM(param, info, iparam, ofmarkint); - SET_PARAM(param, info, iparam, ifmarkint); + for (i = 0; i < session_key_last; i++) + SET_PARAM(param, info, iparam, i); } static void sess_param_get(struct iscsi_sess_param *param, struct iscsi_param_info *info) { u32 *iparam = info->session_param; + int i; - GET_PARAM(param, info, iparam, initial_r2t); - GET_PARAM(param, info, iparam, immediate_data); - GET_PARAM(param, info, iparam, max_connections); - GET_PARAM(param, info, iparam, max_data_pdu_length); - GET_PARAM(param, info, iparam, max_burst_length); - GET_PARAM(param, info, iparam, first_burst_length); - GET_PARAM(param, info, iparam, default_wait_time); - GET_PARAM(param, info, iparam, default_retain_time); - GET_PARAM(param, info, iparam, max_outstanding_r2t); - GET_PARAM(param, info, iparam, data_pdu_inorder); - GET_PARAM(param, info, iparam, data_sequence_inorder); - GET_PARAM(param, info, iparam, error_recovery_level); - GET_PARAM(param, info, iparam, header_digest); - GET_PARAM(param, info, iparam, data_digest); - GET_PARAM(param, info, iparam, ofmarker); - GET_PARAM(param, info, iparam, ifmarker); - GET_PARAM(param, info, iparam, ofmarkint); - GET_PARAM(param, info, iparam, ifmarkint); + for (i = 0; i < session_key_last; i++) + GET_PARAM(param, info, iparam, i); } static void trgt_param_check(struct iscsi_param_info *info) @@ -119,20 +89,21 @@ { struct iscsi_trgt_param *param = &target->trgt_param; u32 *iparam = info->target_param; + int i; - if (SET_PARAM(param, info, iparam, wthreads)) - wthread_start(target); - SET_PARAM(param, info, iparam, target_type); - SET_PARAM(param, info, iparam, queued_cmnds); + for (i = 0; i < target_key_last; i++) + if (SET_PARAM(param, info, iparam, i) + && i == key_wthreads) + wthread_start(target); } static void trgt_param_get(struct iscsi_trgt_param *param, struct iscsi_param_info *info) { u32 *iparam = info->target_param; + int i; - GET_PARAM(param, info, iparam, wthreads); - GET_PARAM(param, info, iparam, target_type); - SET_PARAM(param, info, iparam, queued_cmnds); + for (i = 0; i < session_key_last; i++) + GET_PARAM(param, info, iparam, i); } static int trgt_param(struct iscsi_target *target, struct iscsi_param_info *info, int set) Index: enum-r1214/kernel/session.c diff -u enum-r1214/kernel/session.c:1.1 enum-r1214/kernel/session.c:1.2 --- enum-r1214/kernel/session.c:1.1 Sat Jul 2 12:39:32 2005 +++ enum-r1214/kernel/session.c Sat Jul 2 13:21:08 2005 @@ -33,7 +33,7 @@ session->target = target; session->sid = info->sid; memcpy(&session->param, &target->sess_param, sizeof(session->param)); - session->max_queued_cmnds = target->trgt_param.queued_cmnds; + session->max_queued_cmnds = target->trgt_param.tp_queued_cmnds; session->exp_cmd_sn = info->exp_cmd_sn; session->max_cmd_sn = info->max_cmd_sn; Index: enum-r1214/kernel/target.c diff -u enum-r1214/kernel/target.c:1.1 enum-r1214/kernel/target.c:1.2 --- enum-r1214/kernel/target.c:1.1 Sat Jul 2 12:39:32 2005 +++ enum-r1214/kernel/target.c Sat Jul 2 13:21:08 2005 @@ -16,30 +16,30 @@ static u32 nr_targets; static struct iscsi_sess_param default_session_param = { - .initial_r2t = 1, - .immediate_data = 1, - .max_connections = 1, - .max_data_pdu_length = 8192, - .max_burst_length = 262144, - .first_burst_length = 65536, - .default_wait_time = 2, - .default_retain_time = 20, - .max_outstanding_r2t = 1, - .data_pdu_inorder = 1, - .data_sequence_inorder = 1, - .error_recovery_level = 0, - .header_digest = DIGEST_NONE, - .data_digest = DIGEST_NONE, - .ofmarker = 0, - .ifmarker = 0, - .ofmarkint = 2048, - .ifmarkint = 2048, + .sp_initial_r2t = 1, + .sp_immediate_data = 1, + .sp_max_connections = 1, + .sp_max_data_pdu_length = 8192, + .sp_max_burst_length = 262144, + .sp_first_burst_length = 65536, + .sp_default_wait_time = 2, + .sp_default_retain_time = 20, + .sp_max_outstanding_r2t = 1, + .sp_data_pdu_inorder = 1, + .sp_data_sequence_inorder = 1, + .sp_error_recovery_level = 0, + .sp_header_digest = DIGEST_NONE, + .sp_data_digest = DIGEST_NONE, + .sp_ofmarker = 0, + .sp_ifmarker = 0, + .sp_ofmarkint = 2048, + .sp_ifmarkint = 2048, }; static struct iscsi_trgt_param default_target_param = { - .wthreads = DEFAULT_NR_WTHREADS, - .target_type = 0, - .queued_cmnds = DEFAULT_NR_QUEUED_CMNDS, + .tp_wthreads = DEFAULT_NR_WTHREADS, + .tp_target_type = 0, + .tp_queued_cmnds = DEFAULT_NR_QUEUED_CMNDS, }; inline int target_lock(struct iscsi_target *target, int interruptible) Index: enum-r1214/kernel/wthread.c diff -u enum-r1214/kernel/wthread.c:1.1 enum-r1214/kernel/wthread.c:1.2 --- enum-r1214/kernel/wthread.c:1.1 Sat Jul 2 12:39:32 2005 +++ enum-r1214/kernel/wthread.c Sat Jul 2 13:21:08 2005 @@ -50,7 +50,7 @@ static int cmnd_execute(struct iscsi_cmnd *cmnd) { - int type = cmnd->conn->session->target->trgt_param.target_type; + int type = cmnd->conn->session->target->trgt_param.tp_target_type; assert(target_type_array[type]->execute_cmnd); return target_type_array[type]->execute_cmnd(cmnd); @@ -150,14 +150,14 @@ int err = 0; struct worker_thread_info *info = &target->wthread_info; - while (info->nr_running_wthreads < target->trgt_param.wthreads) { + while (info->nr_running_wthreads < target->trgt_param.tp_wthreads) { if ((err = start_one_worker_thread(target)) < 0) { eprintk("Fail to create a worker thread %d\n", err); goto out; } } - while (info->nr_running_wthreads > target->trgt_param.wthreads) { + while (info->nr_running_wthreads > target->trgt_param.tp_wthreads) { struct worker_thread *wt; wt = list_entry(info->wthread_list.next, struct worker_thread, w_list); if ((err = stop_one_worker_thread(wt)) < 0) { Index: enum-r1214/usr/param.c diff -u enum-r1214/usr/param.c:1.1 enum-r1214/usr/param.c:1.2 --- enum-r1214/usr/param.c:1.1 Sat Jul 2 12:39:32 2005 +++ enum-r1214/usr/param.c Sat Jul 2 13:21:08 2005 @@ -284,30 +284,51 @@ #define SET_KEY_VALUES(x) DEFAULT_NR_##x,MIN_NR_##x, MAX_NR_##x struct iscsi_key target_keys[] = { - {"Wthreads", SET_KEY_VALUES(WTHREADS), &minimum_ops}, - {"Type", 0, 0, 16, &minimum_ops}, - {"QueuedCommands", SET_KEY_VALUES(QUEUED_CMNDS), &minimum_ops}, + [key_wthreads] = + {"Wthreads", SET_KEY_VALUES(WTHREADS), &minimum_ops}, + [key_target_type] = + {"Type", 0, 0, 16, &minimum_ops}, + [key_queued_cmnds] = + {"QueuedCommands", SET_KEY_VALUES(QUEUED_CMNDS), &minimum_ops}, {NULL,}, }; struct iscsi_key session_keys[] = { - {"InitialR2T", 1, 0, 1, &or_ops}, - {"ImmediateData", 1, 0, 1, &and_ops}, - {"MaxConnections", 1, 1, 65535, &minimum_ops}, - {"MaxRecvDataSegmentLength", 8192, 512, 16777215, &minimum_ops}, - {"MaxBurstLength", 262144, 512, 16777215, &minimum_ops}, - {"FirstBurstLength", 65536, 512, 16777215, &minimum_ops}, - {"DefaultTime2Wait", 2, 0, 3600, &maximum_ops}, - {"DefaultTime2Retain", 20, 0, 3600, &minimum_ops}, - {"MaxOutstandingR2T", 1, 1, 65535, &minimum_ops}, - {"DataPDUInOrder", 1, 0, 1, &or_ops}, - {"DataSequenceInOrder", 1, 0, 1, &or_ops}, - {"ErrorRecoveryLevel", 0, 0, 2, &minimum_ops}, - {"HeaderDigest", DIGEST_NONE, DIGEST_NONE, DIGEST_ALL, &digest_ops}, - {"DataDigest", DIGEST_NONE, DIGEST_NONE, DIGEST_ALL, &digest_ops}, - {"OFMarker", 0, 0, 1, &and_ops}, - {"IFMarker", 0, 0, 1, &and_ops}, - {"OFMarkInt", 2048, 1, 65535, &marker_ops}, - {"IFMarkInt", 2048, 1, 65535, &marker_ops}, + [key_initial_r2t] = + {"InitialR2T", 1, 0, 1, &or_ops}, + [key_immediate_data] = + {"ImmediateData", 1, 0, 1, &and_ops}, + [key_max_connections] = + {"MaxConnections", 1, 1, 65535, &minimum_ops}, + [key_max_data_pdu_length] = + {"MaxRecvDataSegmentLength", 8192, 512, 16777215, &minimum_ops}, + [key_max_burst_length] = + {"MaxBurstLength", 262144, 512, 16777215, &minimum_ops}, + [key_first_burst_length] = + {"FirstBurstLength", 65536, 512, 16777215, &minimum_ops}, + [key_default_wait_time] = + {"DefaultTime2Wait", 2, 0, 3600, &maximum_ops}, + [key_default_retain_time] = + {"DefaultTime2Retain", 20, 0, 3600, &minimum_ops}, + [key_max_outstanding_r2t] = + {"MaxOutstandingR2T", 1, 1, 65535, &minimum_ops}, + [key_data_pdu_inorder] = + {"DataPDUInOrder", 1, 0, 1, &or_ops}, + [key_data_sequence_inorder] = + {"DataSequenceInOrder", 1, 0, 1, &or_ops}, + [key_error_recovery_level] = + {"ErrorRecoveryLevel", 0, 0, 2, &minimum_ops}, + [key_header_digest] = + {"HeaderDigest", DIGEST_NONE, DIGEST_NONE, DIGEST_ALL, &digest_ops}, + [key_data_digest] = + {"DataDigest", DIGEST_NONE, DIGEST_NONE, DIGEST_ALL, &digest_ops}, + [key_ofmarker] = + {"OFMarker", 0, 0, 1, &and_ops}, + [key_ifmarker] = + {"IFMarker", 0, 0, 1, &and_ops}, + [key_ofmarkint] = + {"OFMarkInt", 2048, 1, 65535, &marker_ops}, + [key_ifmarkint] = + {"IFMarkInt", 2048, 1, 65535, &marker_ops}, {NULL,}, }; Index: enum-r1214/usr/plain.c diff -u enum-r1214/usr/plain.c:1.1 enum-r1214/usr/plain.c:1.2 --- enum-r1214/usr/plain.c:1.1 Sat Jul 2 12:39:32 2005 +++ enum-r1214/usr/plain.c Sat Jul 2 13:21:08 2005 @@ -56,8 +56,10 @@ } static struct iscsi_key user_keys[] = { - {"IncomingUser",}, - {"OutgoingUser",}, + [key_incoming_user] = + {"IncomingUser",}, + [key_outgoing_user] = + {"OutgoingUser",}, {NULL,}, };