diff -Nru tgt-1.0.57/debian/changelog tgt-1.0.61/debian/changelog --- tgt-1.0.57/debian/changelog 2015-07-06 20:22:00.000000000 -0500 +++ tgt-1.0.61/debian/changelog 2015-12-10 15:31:26.000000000 -0600 @@ -1,3 +1,57 @@ +tgt (1:1.0.61-1ubuntu1) xenial; urgency=medium + + * Merge from Debian unstable. Remaining changes: (LP: #1524982) + - debian/test/control - disable tgt-glusterfs module test + - patches/conf-makefile - Install config examples in /usr/share/doc + - patches/do-not-build-html-manpages.patch + - patches/use-docbook-xsl.patch + - patches/use-dpkg-buildflags.patch + + -- Ryan Harper Thu, 10 Dec 2015 14:15:16 -0600 + +tgt (1:1.0.61-1) unstable; urgency=medium + + * New upstream version: + + Fix crash when looking up removed targets + * Fix the `modules' DEP-8 test + * Allow stderr output in DEP-8 tests + + -- Apollon Oikonomopoulos Tue, 03 Nov 2015 09:12:10 +0200 + +tgt (1:1.0.60-1) unstable; urgency=medium + + * New upstream version: + + Changes in 1.0.59: + + iser: Clear tasks free list when closing the connection + + iser: Fix wrong access to the session discovery mode + + sheepdog: fix to update data_vdi_id after writing data object + + Changes in 1.0.60: + + usr/libssc: Include fcntl.h for loff_t + + Correct the location of checkarch.sh in Makefile + + * tgt.service: strip whitespace around equals signs. + + -- Apollon Oikonomopoulos Fri, 10 Jul 2015 14:14:49 +0300 + +tgt (1:1.0.58-1) unstable; urgency=medium + + * New upstream version: + + bs_aio: fix failure handling + + sheepdog: fine grained locking in write path + + mgmt: Create ipc socket parent dir if does not exists + + iser: Fix memory leak of addrinfo struct + + tgtd.c: allow oom adjust failures for non-root users + + mgmt: change ipc socket address + + mgmt.c: check that the connecting user is the same as the user tgtd + runs as + + Allow overriding the IPC socket path via TGT_IPC_SOCKET + * d/control: remove XS-Testsuite and rely on dpkg (>= 1.17.11) to fill it in + automatically + + -- Apollon Oikonomopoulos Tue, 26 May 2015 12:35:44 +0300 + tgt (1:1.0.57-1ubuntu2) wily; urgency=medium * debian/tgt.service: remove spaces between key, = and value for WantedBy, diff -Nru tgt-1.0.57/debian/tests/control tgt-1.0.61/debian/tests/control --- tgt-1.0.57/debian/tests/control 2015-07-06 17:43:01.000000000 -0500 +++ tgt-1.0.61/debian/tests/control 2015-12-10 15:16:11.000000000 -0600 @@ -1,3 +1,7 @@ Tests: daemon admin Depends: @ Restrictions: needs-root + +Tests: modules +Depends: tgt, tgt-rbd +Restrictions: needs-root isolation-container allow-stderr diff -Nru tgt-1.0.57/debian/tests/modules tgt-1.0.61/debian/tests/modules --- tgt-1.0.57/debian/tests/modules 2015-07-06 17:43:01.000000000 -0500 +++ tgt-1.0.61/debian/tests/modules 2015-12-10 15:16:14.000000000 -0600 @@ -5,16 +5,15 @@ # Test tgtd module usability loaded_modules=$(tgtadm --mode sys --op show | \ - awk 'BEGIN { RS="(\n|^)[a-zA-Z]"; FS="\n +" }; - /^acking stores/ { - gsub("^acking stores:\n +", ""); - gsub("\n +", "\n"); - print - }') - + awk ' + BEGIN { p = 0 }; + /^[a-zA-Z]/ { p = 0 }; + /^Backing stores/ { p = 1; getline; }; + { if (p) { gsub("^ +", ""); print }; + }') ret=0 -for mod in glfs rbd; do +for mod in rbd; do if echo "$loaded_modules" | grep -q "\b$mod\b"; then echo "OK - $mod module loaded" else diff -Nru tgt-1.0.57/debian/tgt.service tgt-1.0.61/debian/tgt.service --- tgt-1.0.57/debian/tgt.service 2015-07-06 20:21:07.000000000 -0500 +++ tgt-1.0.61/debian/tgt.service 2015-11-03 10:12:28.000000000 -0600 @@ -1,22 +1,22 @@ [Unit] -Description = (i)SCSI target daemon -Documentation = man:tgtd(8) -After = network.target +Description=(i)SCSI target daemon +Documentation=man:tgtd(8) +After=network.target [Service] -Type = notify -ExecStart = /usr/sbin/tgtd -f -ExecStartPost = /usr/sbin/tgtadm --op update --mode sys --name State -v offline -ExecStartPost = /usr/sbin/tgt-admin -e -c /etc/tgt/targets.conf -ExecStartPost = /usr/sbin/tgtadm --op update --mode sys --name State -v ready +Type=notify +ExecStart=/usr/sbin/tgtd -f +ExecStartPost=/usr/sbin/tgtadm --op update --mode sys --name State -v offline +ExecStartPost=/usr/sbin/tgt-admin -e -c /etc/tgt/targets.conf +ExecStartPost=/usr/sbin/tgtadm --op update --mode sys --name State -v ready -ExecStop = /usr/sbin/tgtadm --op update --mode sys --name State -v offline -ExecStop = /usr/sbin/tgt-admin --offline ALL -ExecStop = /usr/sbin/tgt-admin --update ALL -c /dev/null -f -ExecStop = /usr/sbin/tgtadm --op delete --mode system +ExecStop=/usr/sbin/tgtadm --op update --mode sys --name State -v offline +ExecStop=/usr/sbin/tgt-admin --offline ALL +ExecStop=/usr/sbin/tgt-admin --update ALL -c /dev/null -f +ExecStop=/usr/sbin/tgtadm --op delete --mode system -ExecReload = /usr/sbin/tgt-admin --update ALL -c /etc/tgt/targets.conf -Restart = on-failure +ExecReload=/usr/sbin/tgt-admin --update ALL -c /etc/tgt/targets.conf +Restart=on-failure [Install] WantedBy=multi-user.target diff -Nru tgt-1.0.57/doc/tgtd.8.xml tgt-1.0.61/doc/tgtd.8.xml --- tgt-1.0.57/doc/tgtd.8.xml 2015-04-03 07:43:49.000000000 -0500 +++ tgt-1.0.61/doc/tgtd.8.xml 2015-11-02 21:58:36.000000000 -0600 @@ -162,6 +162,15 @@ + ENVIRONMENT VARIABLES + TGT_IPC_SOCKET=<path> + + When set tgtd and tgtadm will use the specified path as the + IPC socket instead of the default '/var/run/tgtd/socket.0' + + + + SEE ALSO tgtadm(8), tgt-admin(8), tgtimg(8), tgt-setup-lun(8). diff -Nru tgt-1.0.57/Makefile tgt-1.0.61/Makefile --- tgt-1.0.57/Makefile 2015-04-03 07:43:49.000000000 -0500 +++ tgt-1.0.61/Makefile 2015-11-02 21:58:36.000000000 -0600 @@ -1,4 +1,4 @@ -VERSION ?= 1.0.57 +VERSION ?= 1.0.61 CHECK_CC = cgcc CHECK_CC_FLAGS = '$(CHECK_CC) -Wbitwise -Wno-return-void -no-compile $(ARCH)' @@ -82,7 +82,7 @@ clean: clean-programs clean-doc clean-conf clean-scripts clean-pkg .PHONY:check -check: ARCH=$(shell sh script/checkarch.sh) +check: ARCH=$(shell sh scripts/checkarch.sh) check: CC=$(CHECK_CC_FLAGS) $(MAKE) all diff -Nru tgt-1.0.57/usr/bs_aio.c tgt-1.0.61/usr/bs_aio.c --- tgt-1.0.57/usr/bs_aio.c 2015-04-03 07:43:49.000000000 -0500 +++ tgt-1.0.61/usr/bs_aio.c 2015-11-02 21:58:36.000000000 -0600 @@ -152,6 +152,13 @@ ", err: %d\n", nsubmit, info->lu->tgt->tid, info->lu->lun, -nsuccess); + for (i = nsubmit - 1; i >= 0; i--) { + cmd = info->iocb_arr[i].data; + clear_cmd_async(cmd); + info->nwaiting--; + if (!info->nwaiting) + list_del(&info->dev_list_entry); + } return nsuccess; } } diff -Nru tgt-1.0.57/usr/bs_sheepdog.c tgt-1.0.61/usr/bs_sheepdog.c --- tgt-1.0.57/usr/bs_sheepdog.c 2015-04-03 07:43:49.000000000 -0500 +++ tgt-1.0.61/usr/bs_sheepdog.c 2015-11-02 21:58:36.000000000 -0600 @@ -876,6 +876,7 @@ uint16_t flags = 0; int need_update_inode = 0, need_reload_inode; int nr_copies = ai->inode.nr_copies; + int need_write_lock, check_idx; goto do_req; @@ -891,7 +892,18 @@ pthread_rwlock_unlock(&ai->inode_lock); do_req: - if (write) + need_write_lock = 0; + vid = ai->inode.vdi_id; + + for (check_idx = idx; check_idx < max; check_idx++) { + if (ai->inode.data_vdi_id[check_idx] == vid) + continue; + + need_write_lock = 1; + break; + } + + if (need_write_lock) pthread_rwlock_wrlock(&ai->inode_lock); else pthread_rwlock_rdlock(&ai->inode_lock); @@ -925,14 +937,6 @@ oid = vid_to_data_oid(ai->inode.vdi_id, idx); - ai->min_dirty_data_idx = - min_t(uint32_t, - idx, ai->min_dirty_data_idx); - ai->max_dirty_data_idx = - max_t(uint32_t, - idx, ai->max_dirty_data_idx); - - ai->inode.data_vdi_id[idx] = vid; } need_reload_inode = 0; @@ -954,6 +958,14 @@ } if (create) { + ai->min_dirty_data_idx = + min_t(uint32_t, idx, + ai->min_dirty_data_idx); + ai->max_dirty_data_idx = + max_t(uint32_t, idx, + ai->max_dirty_data_idx); + ai->inode.data_vdi_id[idx] = vid; + need_update_inode = 1; create = 0; } diff -Nru tgt-1.0.57/usr/iscsi/iser.c tgt-1.0.61/usr/iscsi/iser.c --- tgt-1.0.57/usr/iscsi/iser.c 2015-04-03 07:43:49.000000000 -0500 +++ tgt-1.0.61/usr/iscsi/iser.c 2015-11-02 21:58:36.000000000 -0600 @@ -1279,6 +1279,7 @@ if (err) eprintf("conn:%p rdma_disconnect failed, %m\n", &conn->h); + iser_ib_clear_tx_list(conn); list_del(&conn->conn_list); tgt_remove_sched_event(&conn->sched_buf_alloc); @@ -1746,7 +1747,6 @@ static int iser_logout_exec(struct iser_task *task) { struct iser_conn *conn = task->conn; - struct iscsi_session *session = conn->h.session; struct iscsi_logout_rsp *rsp_bhs = (struct iscsi_logout_rsp *) task->pdu.bhs; @@ -1756,10 +1756,8 @@ rsp_bhs->response = ISCSI_LOGOUT_SUCCESS; rsp_bhs->itt = task->tag; rsp_bhs->statsn = cpu_to_be32(conn->h.stat_sn++); - - if (session->exp_cmd_sn == task->cmd_sn && !task->is_immediate) - session->exp_cmd_sn++; - iser_set_rsp_stat_sn(session, task->pdu.bhs); + rsp_bhs->exp_cmdsn = cpu_to_be32(conn->h.exp_cmd_sn); + rsp_bhs->max_cmdsn = cpu_to_be32(conn->h.max_cmd_sn); task->pdu.ahssize = 0; task->pdu.membuf.size = 0; @@ -3452,10 +3450,14 @@ for (res = res0; res; res = res->ai_next) { err = iser_add_portal(res, port); - if (err) + if (err) { + freeaddrinfo(res0); return err; + } } + freeaddrinfo(res0); + dprintf("listening for iser connections on port %d\n", port); err = tgt_event_add(rdma_evt_channel->fd, EPOLLIN, iser_handle_rdmacm, NULL); diff -Nru tgt-1.0.57/usr/iscsi/target.c tgt-1.0.61/usr/iscsi/target.c --- tgt-1.0.57/usr/iscsi/target.c 2015-04-03 07:43:49.000000000 -0500 +++ tgt-1.0.61/usr/iscsi/target.c 2015-11-02 21:58:36.000000000 -0600 @@ -369,9 +369,11 @@ struct iscsi_target *target_find_by_name(const char *name) { struct iscsi_target *target; + char *tname; list_for_each_entry(target, &iscsi_targets_list, tlist) { - if (!strcmp(tgt_targetname(target->tid), name)) + tname = tgt_targetname(target->tid); + if (tname && !strcmp(tname, name)) return target; } diff -Nru tgt-1.0.57/usr/libssc.c tgt-1.0.61/usr/libssc.c --- tgt-1.0.57/usr/libssc.c 2015-04-03 07:43:49.000000000 -0500 +++ tgt-1.0.61/usr/libssc.c 2015-11-02 21:58:36.000000000 -0600 @@ -19,6 +19,7 @@ * 02110-1301 USA */ +#include #include #include #include diff -Nru tgt-1.0.57/usr/mgmt.c tgt-1.0.61/usr/mgmt.c --- tgt-1.0.57/usr/mgmt.c 2015-04-03 07:43:49.000000000 -0500 +++ tgt-1.0.61/usr/mgmt.c 2015-11-02 21:58:36.000000000 -0600 @@ -569,7 +569,7 @@ return -1; } - if (cred.uid || cred.gid) + if (cred.uid != getuid() || cred.gid != getgid()) return -EPERM; return 0; @@ -765,8 +765,16 @@ extern short control_port; int fd = 0, err; struct sockaddr_un addr; + struct stat st = {0}; + char *path; - sprintf(mgmt_lock_path, "%s.%d.lock", TGT_IPC_NAMESPACE, control_port); + if ((path = getenv("TGT_IPC_SOCKET")) == NULL) { + path = TGT_IPC_NAMESPACE; + if (stat(TGT_IPC_DIR, &st) == -1) + mkdir(TGT_IPC_DIR, 0755); + } + + sprintf(mgmt_lock_path, "%s.%d.lock", path, control_port); ipc_lock_fd = open(mgmt_lock_path, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); if (ipc_lock_fd < 0) { @@ -789,7 +797,7 @@ goto close_lock_fd; } - sprintf(mgmt_path, "%s.%d", TGT_IPC_NAMESPACE, control_port); + snprintf(mgmt_path, sizeof(mgmt_path), "%s.%d", path, control_port); unlink(mgmt_path); memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_LOCAL; diff -Nru tgt-1.0.57/usr/tgtadm.c tgt-1.0.61/usr/tgtadm.c --- tgt-1.0.57/usr/tgtadm.c 2015-04-03 07:43:49.000000000 -0500 +++ tgt-1.0.61/usr/tgtadm.c 2015-11-02 21:58:36.000000000 -0600 @@ -211,7 +211,7 @@ { int err; struct sockaddr_un addr; - char mgmt_path[256]; + char mgmt_path[256], *path; *fd = socket(AF_LOCAL, SOCK_STREAM, 0); if (*fd < 0) { @@ -221,7 +221,11 @@ memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_LOCAL; - sprintf(mgmt_path, "%s.%d", TGT_IPC_NAMESPACE, control_port); + if ((path = getenv("TGT_IPC_SOCKET")) == NULL) + path = TGT_IPC_NAMESPACE; + snprintf(mgmt_path, sizeof(mgmt_path), "%s.%d", + path, control_port); + strncpy(addr.sun_path, mgmt_path, sizeof(addr.sun_path)); err = connect(*fd, (struct sockaddr *) &addr, sizeof(addr)); diff -Nru tgt-1.0.57/usr/tgtadm.h tgt-1.0.61/usr/tgtadm.h --- tgt-1.0.57/usr/tgtadm.h 2015-04-03 07:43:49.000000000 -0500 +++ tgt-1.0.61/usr/tgtadm.h 2015-11-02 21:58:36.000000000 -0600 @@ -1,7 +1,8 @@ #ifndef TGTADM_H #define TGTADM_H -#define TGT_IPC_NAMESPACE "/var/run/tgtd.ipc_abstract_namespace" +#define TGT_IPC_DIR "/var/run/tgtd" +#define TGT_IPC_NAMESPACE TGT_IPC_DIR"/socket" #define TGT_LLD_NAME_LEN 64 #define GLOBAL_TID (~0U) diff -Nru tgt-1.0.57/usr/tgtd.c tgt-1.0.61/usr/tgtd.c --- tgt-1.0.57/usr/tgtd.c 2015-04-03 07:43:49.000000000 -0500 +++ tgt-1.0.61/usr/tgtd.c 2015-11-02 21:58:36.000000000 -0600 @@ -604,7 +604,7 @@ } err = oom_adjust(); - if (err) + if (err && getuid() == 0) exit(1); err = nr_file_adjust();