Merge branch 'svn-trunk'

This commit is contained in:
Bart Van Assche
2016-07-15 11:50:00 -07:00
19 changed files with 188 additions and 13 deletions

View File

@@ -357,6 +357,13 @@ int target_del(u32 tid, u32 cookie)
/* We might need to handle session(s) removal event(s) from the kernel */
while (handle_iscsi_events(nl_fd, false) == 0);
/* Someone else may have already freed the target object by now. */
target = target_find_by_id(tid);
if (!target) {
log_info("%s: the target with tid = %u was already freed", __func__, tid);
return 0;
}
if (list_empty(&target->sessions_list))
break;

View File

@@ -0,0 +1,5 @@
ccflags-y += -Idrivers/scsi/qla2xxx
qla2x00tgt-y := qla2x00t.o
obj-$(CONFIG_SCST_QLA_TGT_ADDON) += qla2x00tgt.o

View File

@@ -0,0 +1,5 @@
ccflags-y += -Idrivers/scsi/qla2xxx
qla2x00tgt-y := qla2x00t.o
obj-$(CONFIG_SCST_QLA_TGT_ADDON) += qla2x00tgt.o

View File

@@ -13,6 +13,7 @@ with a DLM lock object is called the Lock Value Block or LVB. The code in
scst_dlm.c uses the DLM to keep PR data synchronized across all nodes in
a cluster.
Software Components
-------------------
@@ -29,6 +30,11 @@ The following software components are needed by the code in scst_dlm.c:
On most Linux distributions the software packages that contain this software
have the names kernel, dlm, corosync and pacemaker.
NOTE! You might need to apply a DLM bugfix patch, see scst-devel mailing list
thread https://sourceforge.net/p/scst/mailman/scst-devel/thread/CADHfD59FK6seaammL8b9LM3U3tw5HvYp3kPTk_r1OYkPR7bPhg@mail.gmail.com/#msg34761854
for more details.
DLM Configuration
-----------------
@@ -74,6 +80,7 @@ configure and start the DLM control daemon:
12. Check the Pacemaker status:
pcs status
Startup and Shutdown
--------------------
@@ -127,6 +134,7 @@ The proper shutdown order is as follows:
* Unload the SCST kernel modules
* Unload the DLM kernel driver
Lockspace names
---------------
@@ -134,12 +142,14 @@ The names of the DLM lockspaces used by SCST follow the following pattern:
scst-<t10_dev_id> where t10_dev_id is the T10 device ID of the SCST device
associated with this lockspace.
Notes
-----
Since the lockspace name depends on the t10_dev_id it is not allowed to
change the t10_dev_id if cluster mode has been enabled.
Testing
-------
@@ -148,11 +158,15 @@ Two examples of test suites for the cluster PR support code are:
* The Windows Cluster Validation Tests
(https://technet.microsoft.com/en-us/library/Cc726064.aspx).
To do
-----
Ensure that PREEMPT AND ABORT affects all cluster nodes instead of only the
cluster node that received this command.
* Ensure that PREEMPT AND ABORT affects all cluster nodes instead of
only the cluster node that received this command.
* On APTL bit set, put the PR info on storage on the passive node.
See also
--------

View File

@@ -157,6 +157,8 @@ do { \
} \
} while (0)
#define TRACE_PR(format, args...) TRACE(TRACE_PRES, format, ## args)
#ifdef CONFIG_SCST_DEBUG
#define PRINT_BUFFER(message, buff, len) \
@@ -215,6 +217,13 @@ do { \
#define PRINT_BUFF_FLAG(flag, message, buff, len) \
((void)(flag), (void)(message), (void)(buff), (void)(len))
/*
* no_printk still calls its arguments, so we can not use it in perf build
* for TRACE_PR or debug_transport_id_to_initiator_name() is not going to
* be found.
*/
#define TRACE_PR(format, args...) do { } while (0)
#ifdef LOG_PREFIX
#define PRINT_INFO(format, args...) \
@@ -280,8 +289,6 @@ do { \
TRACE_DBG_FLAG(TRACE_MGMT_DEBUG, format, ## args)
#define TRACE_MGMT_DBG_SPECIAL(args...) \
TRACE_DBG_FLAG(TRACE_MGMT_DEBUG|TRACE_SPECIAL, format, ## args)
#define TRACE_PR(format, args...) \
TRACE_DBG_FLAG(TRACE_PRES, format, ## args)
#define TRACE_BLOCK(format, args...) \
TRACE_DBG_FLAG(TRACE_BLOCKING, format, ## args)
@@ -369,7 +376,6 @@ do { \
#define TRACE_DBG_SPECIAL(format, args...) no_printk(format, ##args)
#define TRACE_MGMT_DBG(format, args...) no_printk(format, ##args)
#define TRACE_MGMT_DBG_SPECIAL(format, args...) no_printk(format, ##args)
#define TRACE_PR(format, args...) do {} while (0)
#define TRACE_BLOCK(format, args...) no_printk(format, ##args)
#define TRACE_BUFFER(message, buff, len) \
((void)(message), (void)(buff), (void)(len))

View File

@@ -0,0 +1,13 @@
diff --git a/drivers/Kconfig b/drivers/Kconfig
index c70d6e4..0a4ed1b 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -26,6 +26,8 @@ source "drivers/ide/Kconfig"
source "drivers/scsi/Kconfig"
+source "drivers/scst/Kconfig"
+
source "drivers/ata/Kconfig"
source "drivers/md/Kconfig"

View File

@@ -0,0 +1,13 @@
diff --git a/drivers/Kconfig b/drivers/Kconfig
index c70d6e4..0a4ed1b 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -26,6 +26,8 @@ source "drivers/ide/Kconfig"
source "drivers/scsi/Kconfig"
+source "drivers/scst/Kconfig"
+
source "drivers/ata/Kconfig"
source "drivers/md/Kconfig"

View File

@@ -0,0 +1,14 @@
ccflags-y += -Wno-unused-parameter
obj-m := scst_cdrom.o scst_changer.o scst_disk.o scst_modisk.o scst_tape.o \
scst_vdisk.o scst_raid.o scst_processor.o scst_user.o
obj-$(CONFIG_SCST_DISK) += scst_disk.o
obj-$(CONFIG_SCST_TAPE) += scst_tape.o
obj-$(CONFIG_SCST_CDROM) += scst_cdrom.o
obj-$(CONFIG_SCST_MODISK) += scst_modisk.o
obj-$(CONFIG_SCST_CHANGER) += scst_changer.o
obj-$(CONFIG_SCST_RAID) += scst_raid.o
obj-$(CONFIG_SCST_PROCESSOR) += scst_processor.o
obj-$(CONFIG_SCST_VDISK) += scst_vdisk.o
obj-$(CONFIG_SCST_USER) += scst_user.o

View File

@@ -0,0 +1,14 @@
ccflags-y += -Wno-unused-parameter
obj-m := scst_cdrom.o scst_changer.o scst_disk.o scst_modisk.o scst_tape.o \
scst_vdisk.o scst_raid.o scst_processor.o scst_user.o
obj-$(CONFIG_SCST_DISK) += scst_disk.o
obj-$(CONFIG_SCST_TAPE) += scst_tape.o
obj-$(CONFIG_SCST_CDROM) += scst_cdrom.o
obj-$(CONFIG_SCST_MODISK) += scst_modisk.o
obj-$(CONFIG_SCST_CHANGER) += scst_changer.o
obj-$(CONFIG_SCST_RAID) += scst_raid.o
obj-$(CONFIG_SCST_PROCESSOR) += scst_processor.o
obj-$(CONFIG_SCST_VDISK) += scst_vdisk.o
obj-$(CONFIG_SCST_USER) += scst_user.o

View File

@@ -0,0 +1,12 @@
diff --git a/drivers/Makefile b/drivers/Makefile
index 527a6da..db2c24f 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -137,6 +137,7 @@ obj-$(CONFIG_SSB) += ssb/
obj-$(CONFIG_BCMA) += bcma/
obj-$(CONFIG_VHOST_RING) += vhost/
obj-$(CONFIG_VLYNQ) += vlynq/
+obj-$(CONFIG_SCST) += scst/
obj-$(CONFIG_STAGING) += staging/
obj-y += platform/
#common clk code

View File

@@ -0,0 +1,12 @@
diff --git a/drivers/Makefile b/drivers/Makefile
index 527a6da..db2c24f 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -137,6 +137,7 @@ obj-$(CONFIG_SSB) += ssb/
obj-$(CONFIG_BCMA) += bcma/
obj-$(CONFIG_VHOST_RING) += vhost/
obj-$(CONFIG_VLYNQ) += vlynq/
+obj-$(CONFIG_SCST) += scst/
obj-$(CONFIG_STAGING) += staging/
obj-y += platform/
#common clk code

View File

@@ -0,0 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_copy_mgr.o
scst-y += scst_debug.o
scst-y += scst_dlm.o
scst-y += scst_event.o
scst-y += scst_lib.o
scst-y += scst_main.o
scst-y += scst_mem.o
scst-y += scst_no_dlm.o
scst-y += scst_pres.o
scst-y += scst_sysfs.o
scst-y += scst_targ.o
scst-y += scst_tg.o
obj-$(CONFIG_SCST) += scst.o dev_handlers/ fcst/ iscsi-scst/ qla2xxx-target/ \
srpt/ scst_local/

View File

@@ -0,0 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_copy_mgr.o
scst-y += scst_debug.o
scst-y += scst_dlm.o
scst-y += scst_event.o
scst-y += scst_lib.o
scst-y += scst_main.o
scst-y += scst_mem.o
scst-y += scst_no_dlm.o
scst-y += scst_pres.o
scst-y += scst_sysfs.o
scst-y += scst_targ.o
scst-y += scst_tg.o
obj-$(CONFIG_SCST) += scst.o dev_handlers/ fcst/ iscsi-scst/ qla2xxx-target/ \
srpt/ scst_local/

View File

@@ -7363,13 +7363,19 @@ static void blockio_on_alua_state_change_finish(struct scst_device *dev,
if (((new_state == SCST_TG_STATE_OPTIMIZED) ||
(new_state == SCST_TG_STATE_NONOPTIMIZED)) && (virt_dev->fd == NULL)) {
/* Try non-optimized as well, it might be new redirection device */
int rc;
int rc = 0;
TRACE_MGMT_DBG("ALUA state change from %s to %s finished (dev %s), "
"reopenning FD", scst_alua_state_name(old_state),
scst_alua_state_name(new_state), dev->virt_name);
rc = vdisk_open_fd(virt_dev, dev->dev_rd_only);
/*
* only reopen fd if tgt_dev_cnt is not zero, otherwise we will
* leak reference.
*/
if (virt_dev->tgt_dev_cnt)
rc = vdisk_open_fd(virt_dev, dev->dev_rd_only);
if (rc == 0) {
if (virt_dev->reexam_pending) {
rc = vdisk_reexamine(virt_dev);

View File

@@ -162,6 +162,7 @@ static ssize_t scst_trace_level_show(const struct scst_trace_log *local_tbl,
" echo \"all|none|default\" >trace_level\n"
" echo \"value DEC|0xHEX|0OCT\" >trace_level\n"
" echo \"add|del TOKEN\" >trace_level\n"
#ifdef CONFIG_SCST_DEBUG
"\nwhere TOKEN is one of [debug, function, line, pid,\n"
#ifndef GENERATING_UPSTREAM_PATCH
" entryexit, buff, mem, sg, out_of_mem,\n"
@@ -170,8 +171,14 @@ static ssize_t scst_trace_level_show(const struct scst_trace_log *local_tbl,
#endif
" special, scsi, mgmt, minor,\n"
" mgmt_dbg, scsi_serializing,\n"
" retry, recv_bot, send_bot, recv_top, pr,\n"
" block, send_top%s]\n", help != NULL ? help : "");
" retry, pr, block%s]\n",
#else /* CONFIG_SCST_DEBUG */
"\nwhere TOKEN is one of [function, line, pid,"
"out_of_mem, special, scsi, mgmt, minor,"
"scsi_serializing, retry, pr%s]\n",
#endif /* CONFIG_SCST_DEBUG */
help != NULL ? help : "");
return pos;
}

View File

@@ -3454,10 +3454,6 @@ static int scst_do_real_exec(struct scst_cmd *cmd)
scsi_dev = dev->scsi_dev;
TRACE_DBG("Sending cmd %p to SCSI mid-level dev %d:%d:%d:%lld", cmd,
scsi_dev->host->host_no, scsi_dev->channel, scsi_dev->id,
(u64)scsi_dev->lun);
if (unlikely(scsi_dev == NULL)) {
PRINT_ERROR("Command for virtual device must be "
"processed by device handler (LUN %lld)!",
@@ -3465,6 +3461,10 @@ static int scst_do_real_exec(struct scst_cmd *cmd)
goto out_error;
}
TRACE_DBG("Sending cmd %p to SCSI mid-level dev %d:%d:%d:%lld", cmd,
scsi_dev->host->host_no, scsi_dev->channel, scsi_dev->id,
(u64)scsi_dev->lun);
scst_set_exec_start(cmd);
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 30)

View File

@@ -0,0 +1,2 @@
obj-$(CONFIG_SCST_LOCAL) += scst_local.o

View File

@@ -0,0 +1,2 @@
obj-$(CONFIG_SCST_LOCAL) += scst_local.o

View File

@@ -298,6 +298,15 @@ scst_status() {
return 3
fi
done
for d in $SCST_DAEMONS; do
daemon_name=`basename ${d}`
pgrep ${daemon_name} > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "${daemon_name}: not running"
return 3
fi
done
return 0
}