scsi: make spdk_scsi_dev definition private

Change-Id: I62b36a22e11e845045f190886ae00aa644f96ec6
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Daniel Verkamp 2017-05-02 10:56:08 -07:00
parent 2686067166
commit a3738d9031
11 changed files with 117 additions and 42 deletions

View File

@ -170,18 +170,7 @@ struct spdk_scsi_port {
char name[SPDK_SCSI_PORT_MAX_NAME_LENGTH];
};
struct spdk_scsi_dev {
int id;
int is_allocated;
char name[SPDK_SCSI_DEV_MAX_NAME];
int maxlun;
struct spdk_scsi_lun *lun[SPDK_SCSI_DEV_MAX_LUN];
int num_ports;
struct spdk_scsi_port port[SPDK_SCSI_DEV_MAX_PORTS];
};
struct spdk_scsi_dev;
/**
* \brief Represents a SCSI LUN.
@ -197,6 +186,10 @@ struct spdk_scsi_lun;
int spdk_scsi_lun_get_id(const struct spdk_scsi_lun *lun);
const char *spdk_scsi_lun_get_name(const struct spdk_scsi_lun *lun);
const char *spdk_scsi_dev_get_name(const struct spdk_scsi_dev *dev);
int spdk_scsi_dev_get_id(const struct spdk_scsi_dev *dev);
int spdk_scsi_dev_get_max_lun(const struct spdk_scsi_dev *dev);
struct spdk_scsi_lun *spdk_scsi_dev_get_lun(struct spdk_scsi_dev *dev, int lun_id);
void spdk_scsi_dev_destruct(struct spdk_scsi_dev *dev);
void spdk_scsi_dev_queue_mgmt_task(struct spdk_scsi_dev *dev, struct spdk_scsi_task *task);
void spdk_scsi_dev_queue_task(struct spdk_scsi_dev *dev, struct spdk_scsi_task *task);

View File

@ -2961,11 +2961,7 @@ spdk_iscsi_op_scsi(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
spdk_iscsi_task_associate_pdu(task, pdu);
lun_i = spdk_islun2lun(lun);
dev = conn->dev;
if (lun_i < dev->maxlun && lun_i < SPDK_SCSI_DEV_MAX_LUN) {
task->scsi.lun = dev->lun[lun_i];
} else {
task->scsi.lun = NULL;
}
task->scsi.lun = spdk_scsi_dev_get_lun(dev, lun_i);
if ((R_bit != 0) && (W_bit != 0)) {
SPDK_ERRLOG("Bidirectional CDB is not supported\n");
@ -3283,9 +3279,7 @@ spdk_iscsi_op_task(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
task->scsi.target_port = conn->target_port;
task->scsi.initiator_port = conn->initiator_port;
task->scsi.id = task_tag;
if (lun_i < dev->maxlun && lun_i < SPDK_SCSI_DEV_MAX_LUN) {
task->scsi.lun = dev->lun[lun_i];
}
task->scsi.lun = spdk_scsi_dev_get_lun(dev, lun_i);
switch (function) {
/* abort task identified by Referenced Task Tag field */

View File

@ -299,7 +299,7 @@ spdk_rpc_get_target_nodes(struct spdk_jsonrpc_server_conn *conn,
struct spdk_iscsi_globals *iscsi = &g_spdk_iscsi;
struct spdk_json_write_ctx *w;
size_t tgt_idx;
int i;
int i, maxlun;
if (params != NULL) {
spdk_jsonrpc_send_error_response(conn, id, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
@ -345,13 +345,16 @@ spdk_rpc_get_target_nodes(struct spdk_jsonrpc_server_conn *conn,
spdk_json_write_name(w, "luns");
spdk_json_write_array_begin(w);
for (i = 0; i < tgtnode->dev->maxlun; i++) {
if (tgtnode->dev->lun[i]) {
maxlun = spdk_scsi_dev_get_max_lun(tgtnode->dev);
for (i = 0; i < maxlun; i++) {
struct spdk_scsi_lun *lun = spdk_scsi_dev_get_lun(tgtnode->dev, i);
if (lun) {
spdk_json_write_object_begin(w);
spdk_json_write_name(w, "name");
spdk_json_write_string(w, spdk_scsi_lun_get_name(tgtnode->dev->lun[i]));
spdk_json_write_string(w, spdk_scsi_lun_get_name(lun));
spdk_json_write_name(w, "id");
spdk_json_write_int32(w, spdk_scsi_lun_get_id(tgtnode->dev->lun[i]));
spdk_json_write_int32(w, spdk_scsi_lun_get_id(lun));
spdk_json_write_object_end(w);
}
}

View File

@ -234,6 +234,7 @@ static void
spdk_iscsi_config_dump_target_nodes(FILE *fp)
{
int t = 0, l = 0, m = 0;
int maxlun;
struct spdk_scsi_dev *dev = NULL;
struct spdk_iscsi_tgt_node *target = NULL;
@ -250,7 +251,7 @@ spdk_iscsi_config_dump_target_nodes(FILE *fp)
if (NULL == dev) continue;
idx = target->num;
fprintf(fp, TARGET_NODE_TMPL, idx, idx, target->name, dev->name);
fprintf(fp, TARGET_NODE_TMPL, idx, idx, target->name, spdk_scsi_dev_get_name(dev));
for (m = 0; m < target->maxmap; m++) {
if (NULL == target->map[m].pg) continue;
@ -285,12 +286,17 @@ spdk_iscsi_config_dump_target_nodes(FILE *fp)
fprintf(fp, TARGET_NODE_AUTH_TMPL,
authmethod, authgroup, usedigest);
for (l = 0; l < dev->maxlun; l++) {
if (NULL == dev->lun[l]) continue;
maxlun = spdk_scsi_dev_get_max_lun(dev);
for (l = 0; l < maxlun; l++) {
struct spdk_scsi_lun *lun = spdk_scsi_dev_get_lun(dev, l);
if (!lun) {
continue;
}
fprintf(fp, TARGET_NODE_LUN_TMPL,
spdk_scsi_lun_get_id(dev->lun[l]),
spdk_scsi_lun_get_name(dev->lun[l]));
spdk_scsi_lun_get_id(lun),
spdk_scsi_lun_get_name(lun));
}
fprintf(fp, TARGET_NODE_QD_TMPL,

View File

@ -1067,11 +1067,14 @@ int
spdk_iscsi_tgt_node_cleanup_luns(struct spdk_iscsi_conn *conn,
struct spdk_iscsi_tgt_node *target)
{
int i;
int i, maxlun;
struct spdk_iscsi_task *task;
for (i = 0; i < target->dev->maxlun; i++) {
if (!target->dev->lun[i])
maxlun = spdk_scsi_dev_get_max_lun(target->dev);
for (i = 0; i < maxlun; i++) {
struct spdk_scsi_lun *lun = spdk_scsi_dev_get_lun(target->dev, i);
if (!lun)
continue;
/* we create a fake management task per LUN to cleanup */
@ -1084,7 +1087,7 @@ spdk_iscsi_tgt_node_cleanup_luns(struct spdk_iscsi_conn *conn,
task->scsi.type = SPDK_SCSI_TASK_TYPE_MANAGE;
task->scsi.target_port = conn->target_port;
task->scsi.initiator_port = conn->initiator_port;
task->scsi.lun = target->dev->lun[i];
task->scsi.lun = lun;
task->scsi.function = SPDK_SCSI_TASK_FUNC_LUN_RESET;
task->scsi.cb_event = spdk_event_allocate(spdk_env_get_current_core(),

View File

@ -304,3 +304,31 @@ spdk_scsi_dev_allocate_io_channels(struct spdk_scsi_dev *dev)
return 0;
}
const char *
spdk_scsi_dev_get_name(const struct spdk_scsi_dev *dev)
{
return dev->name;
}
int
spdk_scsi_dev_get_id(const struct spdk_scsi_dev *dev)
{
return dev->id;
}
int
spdk_scsi_dev_get_max_lun(const struct spdk_scsi_dev *dev)
{
return dev->maxlun;
}
struct spdk_scsi_lun *
spdk_scsi_dev_get_lun(struct spdk_scsi_dev *dev, int lun_id)
{
if (lun_id < 0 || lun_id > dev->maxlun) {
return NULL;
}
return dev->lun[lun_id];
}

View File

@ -62,6 +62,19 @@ enum {
SPDK_SCSI_TASK_PENDING,
};
struct spdk_scsi_dev {
int id;
int is_allocated;
char name[SPDK_SCSI_DEV_MAX_NAME];
int maxlun;
struct spdk_scsi_lun *lun[SPDK_SCSI_DEV_MAX_LUN];
int num_ports;
struct spdk_scsi_port port[SPDK_SCSI_DEV_MAX_PORTS];
};
struct spdk_scsi_lun {
/** LUN id for this logical unit. */
int id;

View File

@ -303,7 +303,11 @@ get_scsi_lun(struct spdk_scsi_dev *scsi_dev, const __u8 *lun)
uint16_t lun_id = (((uint16_t)lun[2] << 8) | lun[3]) & 0x3FFF;
/* For now only one LUN per controller is allowed so no need to search LUN IDs */
return likely(scsi_dev != NULL && lun_id < scsi_dev->maxlun) ? scsi_dev->lun[lun_id] : NULL;
if (likely(scsi_dev != NULL)) {
return spdk_scsi_dev_get_lun(scsi_dev, lun_id);
}
return NULL;
}
static void

View File

@ -43,27 +43,31 @@
static void
json_scsi_dev_write(struct spdk_json_write_ctx *ctx, struct spdk_scsi_dev *dev)
{
int l;
int l, maxlun;
spdk_json_write_name(ctx, "id");
spdk_json_write_int32(ctx, (int32_t)dev->id);
spdk_json_write_int32(ctx, spdk_scsi_dev_get_id(dev));
spdk_json_write_name(ctx, "device_name");
spdk_json_write_string(ctx, dev->name);
spdk_json_write_string(ctx, spdk_scsi_dev_get_name(dev));
spdk_json_write_name(ctx, "luns");
spdk_json_write_array_begin(ctx);
for (l = 0; l < dev->maxlun; l++) {
if (NULL == dev->lun[l])
maxlun = spdk_scsi_dev_get_max_lun(dev);
for (l = 0; l < maxlun; l++) {
struct spdk_scsi_lun *lun = spdk_scsi_dev_get_lun(dev, l);
if (!lun) {
continue;
}
spdk_json_write_object_begin(ctx);
spdk_json_write_name(ctx, "id");
spdk_json_write_int32(ctx, spdk_scsi_lun_get_id(dev->lun[l]));
spdk_json_write_int32(ctx, spdk_scsi_lun_get_id(lun));
spdk_json_write_name(ctx, "name");
spdk_json_write_string(ctx, spdk_scsi_lun_get_name(dev->lun[l]));
spdk_json_write_string(ctx, spdk_scsi_lun_get_name(lun));
spdk_json_write_object_end(ctx);
}

View File

@ -89,6 +89,16 @@ spdk_scsi_lun_get_id(const struct spdk_scsi_lun *lun)
return lun->id;
}
struct spdk_scsi_lun *
spdk_scsi_dev_get_lun(struct spdk_scsi_dev *dev, int lun_id)
{
if (lun_id < 0 || lun_id > dev->maxlun) {
return NULL;
}
return dev->lun[lun_id];
}
static void
maxburstlength_test(void)
{

View File

@ -41,6 +41,7 @@
#include "../common.c"
#include "iscsi/tgt_node.c"
#include "scsi/scsi_internal.h"
struct spdk_iscsi_globals g_spdk_iscsi;
@ -64,6 +65,22 @@ spdk_iscsi_portal_grp_find_by_tag(int tag)
return NULL;
}
int
spdk_scsi_dev_get_max_lun(const struct spdk_scsi_dev *dev)
{
return dev->maxlun;
}
struct spdk_scsi_lun *
spdk_scsi_dev_get_lun(struct spdk_scsi_dev *dev, int lun_id)
{
if (lun_id < 0 || lun_id > dev->maxlun) {
return NULL;
}
return dev->lun[lun_id];
}
static void
config_file_fail_cases(void)
{