Accepting request 332205 from Base:System
1 OBS-URL: https://build.opensuse.org/request/show/332205 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/tgt?expand=0&rev=30
This commit is contained in:
commit
a234b2f0e3
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b9fe39a990047ea015ab19a4b2eeb82d6e3f62c0b82ea067a0c22187c01a8e8a
|
||||
size 235415
|
555
tgt-git-update
555
tgt-git-update
@ -1,555 +0,0 @@
|
||||
diff --git a/doc/README.rbd b/doc/README.rbd
|
||||
index 274cc4d..18aeceb 100644
|
||||
--- a/doc/README.rbd
|
||||
+++ b/doc/README.rbd
|
||||
@@ -43,7 +43,13 @@ something like "tgt" so that the name of the ceph client is
|
||||
for the tgt client compared to others, and sets the default log path, etc.
|
||||
See the Ceph documentation regarding client names.
|
||||
|
||||
-To specify both options, separate them with ';', and since you are,
|
||||
+cluster=<cluster name>
|
||||
+
|
||||
+This sets the Ceph cluster name, if you have multiple clusters or
|
||||
+if your cluster name is anything other than "ceph".
|
||||
+This is in turn used by librados to find the conf file and key files.
|
||||
+
|
||||
+To specify multiple options, separate them with ';', and since you are,
|
||||
make sure to quote the option string to protect the semicolon from
|
||||
the shell:
|
||||
|
||||
diff --git a/usr/bs_rbd.c b/usr/bs_rbd.c
|
||||
index 3ea9d36..3a052ed 100644
|
||||
--- a/usr/bs_rbd.c
|
||||
+++ b/usr/bs_rbd.c
|
||||
@@ -480,6 +480,9 @@ static char *slurp_to_semi(char **p)
|
||||
strncpy(ret, *p, len);
|
||||
ret[len] = '\0';
|
||||
*p = end;
|
||||
+ /* Jump past the semicolon, if we stopped at one */
|
||||
+ if (**p == ';')
|
||||
+ *p = end + 1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -514,17 +517,21 @@ static tgtadm_err bs_rbd_init(struct scsi_lu *lu, char *bsopts)
|
||||
struct active_rbd *rbd = RBDP(lu);
|
||||
char *confname = NULL;
|
||||
char *clientid = NULL;
|
||||
+ char *clustername = NULL;
|
||||
+ char clientid_full[128];
|
||||
char *ignore = NULL;
|
||||
|
||||
dprintf("bs_rbd_init bsopts: \"%s\"\n", bsopts);
|
||||
|
||||
- // look for conf= or id=
|
||||
+ // look for conf= or id= or cluster=
|
||||
|
||||
while (bsopts && strlen(bsopts)) {
|
||||
if (is_opt("conf", bsopts))
|
||||
confname = slurp_value(&bsopts);
|
||||
else if (is_opt("id", bsopts))
|
||||
clientid = slurp_value(&bsopts);
|
||||
+ else if (is_opt("cluster", bsopts))
|
||||
+ clustername = slurp_value(&bsopts);
|
||||
else {
|
||||
ignore = slurp_to_semi(&bsopts);
|
||||
eprintf("bs_rbd: ignoring unknown option \"%s\"\n",
|
||||
@@ -538,10 +545,27 @@ static tgtadm_err bs_rbd_init(struct scsi_lu *lu, char *bsopts)
|
||||
eprintf("bs_rbd_init: clientid %s\n", clientid);
|
||||
if (confname)
|
||||
eprintf("bs_rbd_init: confname %s\n", confname);
|
||||
+ if (clustername)
|
||||
+ eprintf("bs_rbd_init: clustername %s\n", clustername);
|
||||
|
||||
eprintf("bs_rbd_init bsopts=%s\n", bsopts);
|
||||
- /* clientid may be set by -i/--id */
|
||||
- rados_ret = rados_create(&rbd->cluster, clientid);
|
||||
+ /*
|
||||
+ * clientid may be set by -i/--id. If clustername is set, then
|
||||
+ * we use rados_create2, else rados_create
|
||||
+ */
|
||||
+ if (clustername) {
|
||||
+ /* rados_create2 wants the full client name */
|
||||
+ if (clientid)
|
||||
+ snprintf(clientid_full, sizeof clientid_full,
|
||||
+ "client.%s", clientid);
|
||||
+ else /* if not specified, default to client.admin */
|
||||
+ snprintf(clientid_full, sizeof clientid_full,
|
||||
+ "client.admin");
|
||||
+ rados_ret = rados_create2(&rbd->cluster, clustername,
|
||||
+ clientid_full, 0);
|
||||
+ } else {
|
||||
+ rados_ret = rados_create(&rbd->cluster, clientid);
|
||||
+ }
|
||||
if (rados_ret < 0) {
|
||||
eprintf("bs_rbd_init: rados_create: %d\n", rados_ret);
|
||||
return ret;
|
||||
diff --git a/usr/iscsi/conn.c b/usr/iscsi/conn.c
|
||||
index bb18ac0..4cef6fd 100644
|
||||
--- a/usr/iscsi/conn.c
|
||||
+++ b/usr/iscsi/conn.c
|
||||
@@ -100,13 +100,13 @@ void conn_close(struct iscsi_connection *conn)
|
||||
eprintf("failed to close a connection, %p %u %s\n",
|
||||
conn, conn->refcount, strerror(errno));
|
||||
else
|
||||
- eprintf("connection closed, %p %u\n", conn, conn->refcount);
|
||||
+ dprintf("connection closed, %p %u\n", conn, conn->refcount);
|
||||
|
||||
/* may not have been in FFP yet */
|
||||
if (!conn->session)
|
||||
goto done;
|
||||
|
||||
- eprintf("session %p %d\n", conn->session, conn->session->refcount);
|
||||
+ dprintf("session %p %d\n", conn->session, conn->session->refcount);
|
||||
|
||||
/*
|
||||
* We just closed the ep so we are not going to send/recv anything.
|
||||
diff --git a/usr/iscsi/iser_text.c b/usr/iscsi/iser_text.c
|
||||
index 08cdfe5..16520cb 100644
|
||||
--- a/usr/iscsi/iser_text.c
|
||||
+++ b/usr/iscsi/iser_text.c
|
||||
@@ -832,6 +832,7 @@ static void iser_text_scan(struct iscsi_connection *iscsi_conn,
|
||||
struct sockaddr_storage ss;
|
||||
socklen_t slen, blen;
|
||||
char *p, buf[NI_MAXHOST + 128];
|
||||
+ int port;
|
||||
|
||||
if (value[0] == 0)
|
||||
continue;
|
||||
@@ -857,7 +858,14 @@ static void iser_text_scan(struct iscsi_connection *iscsi_conn,
|
||||
if (ss.ss_family == AF_INET6)
|
||||
*p++ = ']';
|
||||
|
||||
- sprintf(p, ":%d,1", ISCSI_LISTEN_PORT);
|
||||
+ if (ss.ss_family == AF_INET6)
|
||||
+ port = ntohs(((struct sockaddr_in6 *)
|
||||
+ &ss)->sin6_port);
|
||||
+ else
|
||||
+ port = ntohs(((struct sockaddr_in *)
|
||||
+ &ss)->sin_port);
|
||||
+
|
||||
+ sprintf(p, ":%d,1", port);
|
||||
iser_target_list_build(iscsi_conn, tx_pdu, buf,
|
||||
strcmp(value, "All") ? value : NULL);
|
||||
} else
|
||||
diff --git a/usr/iscsi/session.c b/usr/iscsi/session.c
|
||||
index 98c0949..22638e7 100644
|
||||
--- a/usr/iscsi/session.c
|
||||
+++ b/usr/iscsi/session.c
|
||||
@@ -106,8 +106,7 @@ int session_create(struct iscsi_connection *conn)
|
||||
session->info = zalloc(1024);
|
||||
if (!session->info) {
|
||||
free(session->initiator);
|
||||
- if (session->initiator_alias)
|
||||
- free(session->initiator_alias);
|
||||
+ free(session->initiator_alias);
|
||||
free(session);
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -124,6 +123,7 @@ int session_create(struct iscsi_connection *conn)
|
||||
err = it_nexus_create(target->tid, tsih, 0, session->info);
|
||||
if (err) {
|
||||
free(session->initiator);
|
||||
+ free(session->initiator_alias);
|
||||
free(session->info);
|
||||
free(session);
|
||||
return err;
|
||||
@@ -174,6 +174,7 @@ static void session_destroy(struct iscsi_session *session)
|
||||
list_del(&session->hlist);
|
||||
|
||||
free(session->initiator);
|
||||
+ free(session->initiator_alias);
|
||||
free(session->info);
|
||||
free(session);
|
||||
}
|
||||
diff --git a/usr/scsi.c b/usr/scsi.c
|
||||
index d7c0095..4eccf13 100644
|
||||
--- a/usr/scsi.c
|
||||
+++ b/usr/scsi.c
|
||||
@@ -59,164 +59,184 @@ int get_scsi_cdb_size(struct scsi_cmd *cmd)
|
||||
const unsigned char *get_scsi_cdb_usage_data(unsigned char op, unsigned char sa)
|
||||
{
|
||||
static const unsigned char usage[16];
|
||||
+ unsigned char *buf = NULL;
|
||||
|
||||
- static const unsigned char allow_medium_removal[] = {
|
||||
+ static unsigned char allow_medium_removal[] = {
|
||||
0xff, 0x00, 0x00, 0x00, 0x03, 0x07};
|
||||
- static const unsigned char send_diagnostics[] = {
|
||||
+ static unsigned char send_diagnostics[] = {
|
||||
0xff, 0xff, 0x00, 0xff, 0xff, 0x07};
|
||||
- static const unsigned char start_stop[] = {
|
||||
+ static unsigned char start_stop[] = {
|
||||
0xff, 0x01, 0x00, 0x0f, 0xf7, 0x07};
|
||||
- static const unsigned char mode_sense[] = {
|
||||
+ static unsigned char mode_sense[] = {
|
||||
0xff, 0x08, 0xff, 0xff, 0xff, 0x07};
|
||||
- static const unsigned char mode_select[] = {
|
||||
+ static unsigned char mode_select[] = {
|
||||
0xff, 0x11, 0x00, 0x00, 0xff, 0x07};
|
||||
- static const unsigned char reserve_release[] = {
|
||||
+ static unsigned char reserve_release[] = {
|
||||
0xff, 0x00, 0x00, 0x00, 0x00, 0x07};
|
||||
- static const unsigned char inquiry[] = {
|
||||
+ static unsigned char inquiry[] = {
|
||||
0xff, 0x01, 0xff, 0xff, 0xff, 0x07};
|
||||
- static const unsigned char read_write_6[] = {
|
||||
+ static unsigned char read_write_6[] = {
|
||||
0xff, 0x1f, 0xff, 0xff, 0xff, 0x07};
|
||||
- static const unsigned char format_unit[] = {
|
||||
+ static unsigned char format_unit[] = {
|
||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x07};
|
||||
- static const unsigned char request_sense[] = {
|
||||
+ static unsigned char request_sense[] = {
|
||||
0xff, 0x01, 0x00, 0x00, 0xff, 0x07};
|
||||
- static const unsigned char test_unit_ready[] = {
|
||||
+ static unsigned char test_unit_ready[] = {
|
||||
0xff, 0x00, 0x00, 0x00, 0x00, 0x07};
|
||||
-
|
||||
- static const unsigned char persistent_reserve_in[] = {
|
||||
+ static unsigned char persistent_reserve_in[] = {
|
||||
0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
||||
0xff, 0x07};
|
||||
- static const unsigned char persistent_reserve_out[] = {
|
||||
+ static unsigned char persistent_reserve_out[] = {
|
||||
0xff, 0x1f, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff,
|
||||
0xff, 0x07};
|
||||
- static const unsigned char mode_sense_10[] = {
|
||||
+ static unsigned char mode_sense_10[] = {
|
||||
0xff, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff,
|
||||
0xff, 0x07};
|
||||
- static const unsigned char mode_select_10[] = {
|
||||
+ static unsigned char mode_select_10[] = {
|
||||
0xff, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
||||
0xff, 0x07};
|
||||
- static const unsigned char unmap[] = {
|
||||
+ static unsigned char unmap[] = {
|
||||
0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
||||
0xff, 0x07};
|
||||
- static const unsigned char write_same_10[] = {
|
||||
+ static unsigned char write_same_10[] = {
|
||||
0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
|
||||
0xff, 0x07};
|
||||
- static const unsigned char pre_fetch_10[] = {
|
||||
+ static unsigned char pre_fetch_10[] = {
|
||||
0xff, 0x02, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
|
||||
0xff, 0x07};
|
||||
- static const unsigned char synchronize_cache_10[] = {
|
||||
+ static unsigned char synchronize_cache_10[] = {
|
||||
0xff, 0x06, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
|
||||
0xff, 0x07};
|
||||
- static const unsigned char verify_10[] = {
|
||||
+ static unsigned char verify_10[] = {
|
||||
0xff, 0xf2, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
|
||||
0xff, 0x07};
|
||||
- static const unsigned char write_10[] = {
|
||||
+ static unsigned char write_10[] = {
|
||||
0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
|
||||
0xff, 0x07};
|
||||
- static const unsigned char read_10[] = {
|
||||
+ static unsigned char read_10[] = {
|
||||
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
|
||||
0xff, 0x07};
|
||||
- static const unsigned char read_capacity[] = {
|
||||
+ static unsigned char read_capacity[] = {
|
||||
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x07};
|
||||
-
|
||||
- static const unsigned char verify_12[] = {
|
||||
+ static unsigned char verify_12[] = {
|
||||
0xff, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0x00, 0x07};
|
||||
- static const unsigned char write_12[] = {
|
||||
+ static unsigned char write_12[] = {
|
||||
0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0x00, 0x07};
|
||||
- static const unsigned char read_12[] = {
|
||||
+ static unsigned char read_12[] = {
|
||||
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0x00, 0x07};
|
||||
- static const unsigned char rep_sup_opcodes[] = {
|
||||
+ static unsigned char rep_sup_opcodes[] = {
|
||||
0xff, 0x1f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0x00, 0x07};
|
||||
- static const unsigned char report_luns[] = {
|
||||
+ static unsigned char report_luns[] = {
|
||||
0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff,
|
||||
0xff, 0xff, 0x00, 0x07};
|
||||
-
|
||||
- static const unsigned char get_lba_status[] = {
|
||||
+ static unsigned char get_lba_status[] = {
|
||||
0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07};
|
||||
- static const unsigned char read_capacity_16[] = {
|
||||
+ static unsigned char read_capacity_16[] = {
|
||||
0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07};
|
||||
- static const unsigned char write_same_16[] = {
|
||||
+ static unsigned char write_same_16[] = {
|
||||
0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07};
|
||||
- static const unsigned char synchronize_cache_16[] = {
|
||||
+ static unsigned char synchronize_cache_16[] = {
|
||||
0xff, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07};
|
||||
- static const unsigned char pre_fetch_16[] = {
|
||||
+ static unsigned char pre_fetch_16[] = {
|
||||
0xff, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07};
|
||||
- static const unsigned char verify_16[] = {
|
||||
+ static unsigned char verify_16[] = {
|
||||
0xff, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07};
|
||||
- static const unsigned char orwrite_16[] = {
|
||||
+ static unsigned char orwrite_16[] = {
|
||||
0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07};
|
||||
- static const unsigned char compare_and_write[] = {
|
||||
+ static unsigned char compare_and_write[] = {
|
||||
0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x07};
|
||||
- static const unsigned char read_16[] = {
|
||||
+ static unsigned char read_16[] = {
|
||||
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07};
|
||||
|
||||
switch (op) {
|
||||
case TEST_UNIT_READY:
|
||||
- return test_unit_ready;
|
||||
+ buf = test_unit_ready;
|
||||
+ break;
|
||||
case REQUEST_SENSE:
|
||||
- return request_sense;
|
||||
+ buf = request_sense;
|
||||
+ break;
|
||||
case FORMAT_UNIT:
|
||||
- return format_unit;
|
||||
+ buf = format_unit;
|
||||
+ break;
|
||||
case READ_6:
|
||||
case WRITE_6:
|
||||
- return read_write_6;
|
||||
+ buf = read_write_6;
|
||||
+ break;
|
||||
case INQUIRY:
|
||||
- return inquiry;
|
||||
+ buf = inquiry;
|
||||
+ break;
|
||||
case MODE_SELECT:
|
||||
- return mode_select;
|
||||
+ buf = mode_select;
|
||||
+ break;
|
||||
case RELEASE:
|
||||
case RESERVE:
|
||||
- return reserve_release;
|
||||
+ buf = reserve_release;
|
||||
+ break;
|
||||
case MODE_SENSE:
|
||||
- return mode_sense;
|
||||
+ buf = mode_sense;
|
||||
+ break;
|
||||
case START_STOP:
|
||||
- return start_stop;
|
||||
+ buf = start_stop;
|
||||
+ break;
|
||||
case SEND_DIAGNOSTIC:
|
||||
- return send_diagnostics;
|
||||
+ buf = send_diagnostics;
|
||||
+ break;
|
||||
case ALLOW_MEDIUM_REMOVAL:
|
||||
- return allow_medium_removal;
|
||||
+ buf = allow_medium_removal;
|
||||
+ break;
|
||||
case READ_CAPACITY:
|
||||
- return read_capacity;
|
||||
+ buf = read_capacity;
|
||||
+ break;
|
||||
case READ_10:
|
||||
- return read_10;
|
||||
+ buf = read_10;
|
||||
+ break;
|
||||
case WRITE_10:
|
||||
- return write_10;
|
||||
+ buf = write_10;
|
||||
+ break;
|
||||
case WRITE_VERIFY:
|
||||
case VERIFY_10:
|
||||
- return verify_10;
|
||||
+ buf = verify_10;
|
||||
+ break;
|
||||
case PRE_FETCH_10:
|
||||
- return pre_fetch_10;
|
||||
+ buf = pre_fetch_10;
|
||||
+ break;
|
||||
case SYNCHRONIZE_CACHE:
|
||||
- return synchronize_cache_10;
|
||||
+ buf = synchronize_cache_10;
|
||||
+ break;
|
||||
case WRITE_SAME:
|
||||
- return write_same_10;
|
||||
+ buf = write_same_10;
|
||||
+ break;
|
||||
case UNMAP:
|
||||
- return unmap;
|
||||
+ buf = unmap;
|
||||
+ break;
|
||||
case MODE_SELECT_10:
|
||||
- return mode_select_10;
|
||||
+ buf = mode_select_10;
|
||||
+ break;
|
||||
case MODE_SENSE_10:
|
||||
- return mode_sense_10;
|
||||
+ buf = mode_sense_10;
|
||||
+ break;
|
||||
case PERSISTENT_RESERVE_IN:
|
||||
switch (sa) {
|
||||
case PR_IN_READ_KEYS:
|
||||
case PR_IN_READ_RESERVATION:
|
||||
case PR_IN_REPORT_CAPABILITIES:
|
||||
case PR_IN_READ_FULL_STATUS:
|
||||
- return persistent_reserve_in;
|
||||
+ buf = persistent_reserve_in;
|
||||
+ break;
|
||||
}
|
||||
break;
|
||||
case PERSISTENT_RESERVE_OUT:
|
||||
@@ -229,49 +249,70 @@ const unsigned char *get_scsi_cdb_usage_data(unsigned char op, unsigned char sa)
|
||||
case PR_OUT_PREEMPT_AND_ABORT:
|
||||
case PR_OUT_REGISTER_AND_IGNORE_EXISTING_KEY:
|
||||
case PR_OUT_REGISTER_AND_MOVE:
|
||||
- return persistent_reserve_out;
|
||||
+ buf = persistent_reserve_out;
|
||||
+ break;
|
||||
}
|
||||
break;
|
||||
case READ_16:
|
||||
- return read_16;
|
||||
+ buf = read_16;
|
||||
+ break;
|
||||
case COMPARE_AND_WRITE:
|
||||
- return compare_and_write;
|
||||
+ buf = compare_and_write;
|
||||
+ break;
|
||||
case WRITE_16:
|
||||
case ORWRITE_16:
|
||||
- return orwrite_16;
|
||||
+ buf = orwrite_16;
|
||||
+ break;
|
||||
case WRITE_VERIFY_16:
|
||||
case VERIFY_16:
|
||||
- return verify_16;
|
||||
+ buf = verify_16;
|
||||
+ break;
|
||||
case PRE_FETCH_16:
|
||||
- return pre_fetch_16;
|
||||
+ buf = pre_fetch_16;
|
||||
+ break;
|
||||
case SYNCHRONIZE_CACHE_16:
|
||||
- return synchronize_cache_16;
|
||||
+ buf = synchronize_cache_16;
|
||||
+ break;
|
||||
case WRITE_SAME_16:
|
||||
- return write_same_16;
|
||||
+ buf = write_same_16;
|
||||
+ break;
|
||||
case SERVICE_ACTION_IN:
|
||||
switch (sa) {
|
||||
case SAI_READ_CAPACITY_16:
|
||||
- return read_capacity_16;
|
||||
+ buf = read_capacity_16;
|
||||
+ break;
|
||||
case SAI_GET_LBA_STATUS:
|
||||
- return get_lba_status;
|
||||
+ buf = get_lba_status;
|
||||
+ break;
|
||||
}
|
||||
break;
|
||||
case REPORT_LUNS:
|
||||
- return report_luns;
|
||||
+ buf = report_luns;
|
||||
+ break;
|
||||
case MAINT_PROTOCOL_IN:
|
||||
switch (sa) {
|
||||
case MPI_REPORT_SUPPORTED_OPCODES:
|
||||
- return rep_sup_opcodes;
|
||||
+ buf = rep_sup_opcodes;
|
||||
+ break;
|
||||
}
|
||||
break;
|
||||
case READ_12:
|
||||
- return read_12;
|
||||
+ buf = read_12;
|
||||
+ break;
|
||||
case VERIFY_12:
|
||||
case WRITE_VERIFY_12:
|
||||
- return verify_12;
|
||||
+ buf = verify_12;
|
||||
+ break;
|
||||
case WRITE_12:
|
||||
- return write_12;
|
||||
+ buf = write_12;
|
||||
+ break;
|
||||
}
|
||||
+
|
||||
+ if (buf) {
|
||||
+ buf[0] = op;
|
||||
+ return buf;
|
||||
+ }
|
||||
+
|
||||
return usage;
|
||||
}
|
||||
|
||||
diff --git a/usr/target.c b/usr/target.c
|
||||
index f4c5b4e..b6f324c 100644
|
||||
--- a/usr/target.c
|
||||
+++ b/usr/target.c
|
||||
@@ -1581,7 +1581,6 @@ static tgtadm_err __inaccount_bind(struct target *target, int aid)
|
||||
}
|
||||
|
||||
target->account.in_aids[i] = aid;
|
||||
- target->account.nr_inaccount++;
|
||||
} else {
|
||||
int new_max = target->account.max_inaccount << 1;
|
||||
int *buf;
|
||||
@@ -1597,6 +1596,7 @@ static tgtadm_err __inaccount_bind(struct target *target, int aid)
|
||||
target->account.in_aids[target->account.max_inaccount] = aid;
|
||||
target->account.max_inaccount = new_max;
|
||||
}
|
||||
+ target->account.nr_inaccount++;
|
||||
|
||||
return TGTADM_SUCCESS;
|
||||
}
|
||||
diff --git a/usr/tgtd.c b/usr/tgtd.c
|
||||
index 50e1c83..9975e03 100644
|
||||
--- a/usr/tgtd.c
|
||||
+++ b/usr/tgtd.c
|
||||
@@ -212,6 +212,8 @@ static struct event_data *tgt_event_lookup(int fd)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+static int event_need_refresh;
|
||||
+
|
||||
void tgt_event_del(int fd)
|
||||
{
|
||||
struct event_data *tev;
|
||||
@@ -229,6 +231,8 @@ void tgt_event_del(int fd)
|
||||
|
||||
list_del(&tev->e_list);
|
||||
free(tev);
|
||||
+
|
||||
+ event_need_refresh = 1;
|
||||
}
|
||||
|
||||
int tgt_event_modify(int fd, int events)
|
||||
@@ -426,6 +430,11 @@ retry:
|
||||
for (i = 0; i < nevent; i++) {
|
||||
tev = (struct event_data *) events[i].data.ptr;
|
||||
tev->handler(tev->fd, events[i].events, tev->data);
|
||||
+
|
||||
+ if (event_need_refresh) {
|
||||
+ event_need_refresh = 0;
|
||||
+ goto retry;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
16
tgt.changes
16
tgt.changes
@ -1,3 +1,19 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Sep 18 09:52:28 UTC 2015 - p.drouand@gmail.com
|
||||
|
||||
- Update to version 1.0.60
|
||||
* No changelog available
|
||||
- Update homepage Url
|
||||
- Use download Url as source
|
||||
- Remove tgt-git-update; fixed on upstream
|
||||
- Remove depreciated AUTHORS section
|
||||
- Perform a spec-cleaner on spec file
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Sep 13 23:31:32 UTC 2015 - ddiss@suse.com
|
||||
|
||||
- Fix rctgtd systemd service symlink; (bnc#945604).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Sep 10 07:03:47 UTC 2015 - bwiedemann@suse.com
|
||||
|
||||
|
69
tgt.spec
69
tgt.spec
@ -17,28 +17,27 @@
|
||||
|
||||
|
||||
Name: tgt
|
||||
Version: 1.0.60
|
||||
Release: 0
|
||||
Summary: Generic Linux target framework (tgt)
|
||||
License: GPL-2.0
|
||||
Group: System/Daemons
|
||||
Url: http://stgt.sourceforge.net/
|
||||
Source: https://github.com/fujita/tgt/archive/v%{version}.tar.gz
|
||||
Source1: %{name}d.service
|
||||
Source3: %{name}.services
|
||||
Source4: sysconfig.%{name}
|
||||
Patch2: %{name}-fix-build
|
||||
Patch3: setup-tgt-conf-d.patch
|
||||
BuildRequires: docbook-xsl-stylesheets
|
||||
BuildRequires: libaio-devel
|
||||
BuildRequires: libxslt
|
||||
BuildRequires: openssl-devel
|
||||
BuildRequires: perl-Config-General
|
||||
BuildRequires: pkgconfig(systemd)
|
||||
Obsoletes: iscsitarget
|
||||
BuildRequires: systemd-rpm-macros
|
||||
Requires: perl-Config-General
|
||||
Url: http://stgt.berlios.de
|
||||
Requires(pre): %fillup_prereq
|
||||
Version: 1.0.44
|
||||
Release: 0
|
||||
Summary: Generic Linux target framework (tgt)
|
||||
License: GPL-2.0
|
||||
Group: System/Daemons
|
||||
Source: %{name}-%{version}.tar.bz2
|
||||
Source1: %{name}d.service
|
||||
Source3: %{name}.services
|
||||
Source4: sysconfig.%{name}
|
||||
Patch1: %{name}-git-update
|
||||
Patch2: %{name}-fix-build
|
||||
Patch3: setup-tgt-conf-d.patch
|
||||
Obsoletes: iscsitarget
|
||||
|
||||
%description
|
||||
Linux target framework (tgt) aims to simplify various SCSI target
|
||||
@ -48,16 +47,8 @@ Tgt consists of kernel modules, user-space daemon, and user-space
|
||||
tools. Some target drivers uses all of them and some use only
|
||||
user-space daemon and tools (i.e. they completely runs in user space).
|
||||
|
||||
|
||||
|
||||
Authors:
|
||||
--------
|
||||
FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
||||
Mike Christie <michaelc@cs.wisc.edu>
|
||||
|
||||
%prep
|
||||
%setup -n %{name}-%{version}
|
||||
%patch1 -p1
|
||||
%setup -q
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
|
||||
@ -65,22 +56,22 @@ Authors:
|
||||
%ifarch ppc ppc64 ppc64le
|
||||
%define backends ISCSI=1 FCP=1 FCOE=1 IBMVIO=1
|
||||
%else
|
||||
%define backends ISCSI=1 FCP=1 FCOE=1
|
||||
%define backends ISCSI=1 FCP=1 FCOE=1
|
||||
%endif
|
||||
%{__make} OPTFLAGS="${RPM_OPT_FLAGS}" %{backends}
|
||||
make OPTFLAGS="%{optflags}" %{backends}
|
||||
|
||||
%install
|
||||
%{__make} DESTDIR=%{buildroot} docdir=%_docdir/%{name} install
|
||||
install -vD -m 644 %{S:1} %{buildroot}/%{_unitdir}/%{name}d.service
|
||||
install -vD %{S:3} %{buildroot}/etc/sysconfig/SuSEfirewall2.d/services/tgt
|
||||
install -vD %{S:4} ${RPM_BUILD_ROOT}/var/adm/fillup-templates/sysconfig.%{name}
|
||||
ln -sf service %{buildroot}/usr/sbin/rc%{name}
|
||||
make DESTDIR=%{buildroot} docdir=%{_docdir}/%{name} install
|
||||
install -vD -m 644 %{SOURCE1} %{buildroot}/%{_unitdir}/%{name}d.service
|
||||
install -vD %{SOURCE3} %{buildroot}%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/tgt
|
||||
install -vD %{SOURCE4} %{buildroot}%{_localstatedir}/adm/fillup-templates/sysconfig.%{name}
|
||||
ln -sf service %{buildroot}/%{_sbindir}/rc%{name}d
|
||||
|
||||
%pre
|
||||
%service_add_pre %{name}d.service
|
||||
|
||||
%post
|
||||
%{fillup_only}
|
||||
%fillup_only
|
||||
%service_add_post %{name}d.service
|
||||
|
||||
%preun
|
||||
@ -92,14 +83,14 @@ ln -sf service %{buildroot}/usr/sbin/rc%{name}
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%{_sbindir}/*
|
||||
%dir /etc/tgt
|
||||
%dir /etc/tgt/conf.d
|
||||
%config %attr(0644,root,root) /etc/tgt/targets.conf
|
||||
%config %attr(0644,root,root) /etc/sysconfig/SuSEfirewall2.d/services/tgt
|
||||
/var/adm/fillup-templates/sysconfig.tgt
|
||||
%dir %{_sysconfdir}/tgt
|
||||
%dir %{_sysconfdir}/tgt/conf.d
|
||||
%config %attr(0644,root,root) %{_sysconfdir}/tgt/targets.conf
|
||||
%config %attr(0644,root,root) %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/tgt
|
||||
%{_localstatedir}/adm/fillup-templates/sysconfig.tgt
|
||||
%{_unitdir}/%{name}d.service
|
||||
%doc README doc/README.iscsi doc/README.iser doc/README.lu_configuration
|
||||
%doc doc/README.mmc doc/README.passthrough doc/README.sbcjukebox doc/README.ssc
|
||||
%doc %{_mandir}/man8/*
|
||||
%{_mandir}/man8/*
|
||||
|
||||
%changelog
|
||||
%changelog
|
3
v1.0.60.tar.gz
Normal file
3
v1.0.60.tar.gz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c126c3dc8fe51d188b979f859e6fc5bc37d76b16f7a753f2966f90382ce15641
|
||||
size 295175
|
Loading…
Reference in New Issue
Block a user