From f704a4afeed366010ec9b5151f30905dc01dfc42 Mon Sep 17 00:00:00 2001
From: Yan Burman
Date: Mon, 29 Sep 2014 08:31:12 +0000
Subject: [PATCH] Merged revisions
5785-5786,5793-5796,5798,5801-5802,5804-5806,5808,5810-5811,5814,5816-5817
via svnmerge from svn+ssh://yanb123@svn.code.sf.net/p/scst/svn/trunk
........
r5785 | bvassche | 2014-09-09 14:09:20 +0300 (Tue, 09 Sep 2014) | 9 lines
scst_local: Change max_lun into SCST_MAX_LUN (16383)
Today SCST does not support LUN numbers >= 16384. Additionally,
there is a bug in older Linux initiator systems that prevents
proper handling of LUN numbers >= 2**32. See also Hannes Reinecke,
scsi_scan: Fixup scsilun_to_int(), June 25, 2014 (commit ID
d9e5d6183715e691b37afd3785c311d05cd1338d). Hence set max_lun to
16383.
........
r5786 | bvassche | 2014-09-09 14:27:27 +0300 (Tue, 09 Sep 2014) | 6 lines
scst_local: Set max_id to 1
The value 0 is not valid for the max_id member of struct Scsi_Host.
Signed-off-by: Sebastian Herbszt
........
r5793 | bvassche | 2014-09-10 14:42:54 +0300 (Wed, 10 Sep 2014) | 1 line
scstadmin: Sync saved configuration files
........
r5794 | bvassche | 2014-09-10 14:44:14 +0300 (Wed, 10 Sep 2014) | 2 lines
scstadmin test 06-cont-on-err.t: Filter out scstadmin version number
........
r5795 | bvassche | 2014-09-10 15:18:09 +0300 (Wed, 10 Sep 2014) | 1 line
ib_srpt: Add max_sge_delta kernel module parameter
........
r5796 | bvassche | 2014-09-10 15:20:30 +0300 (Wed, 10 Sep 2014) | 1 line
ib_srpt: Update Subversion ignore lists
........
r5798 | bvassche | 2014-09-12 14:16:35 +0300 (Fri, 12 Sep 2014) | 1 line
fcst/Makefile: Add release-archive target
........
r5801 | bvassche | 2014-09-12 14:20:16 +0300 (Fri, 12 Sep 2014) | 1 line
fcst: Change version number from 0.3 into 3.1.0-pre
........
r5802 | vlnb | 2014-09-13 04:13:29 +0300 (Sat, 13 Sep 2014) | 3 lines
Fix autofinding SCST headers in fileio_tgt
........
r5804 | vlnb | 2014-09-13 04:35:12 +0300 (Sat, 13 Sep 2014) | 3 lines
Web updates
........
r5805 | vlnb | 2014-09-13 04:37:12 +0300 (Sat, 13 Sep 2014) | 3 lines
Update root README to use symlink instead of bind mount for QLogic git driver integration
........
r5806 | bvassche | 2014-09-15 15:30:43 +0300 (Mon, 15 Sep 2014) | 1 line
ib_srpt: Make "make -j install" work for n >= 2 if "make all" has not been run first
........
r5808 | bvassche | 2014-09-16 14:06:00 +0300 (Tue, 16 Sep 2014) | 6 lines
scst/src/Makefile: Make "make install" without prior "make" work
Avoid that MOD_VERS and MODS_VERS evaluate to an empty string.
Reported-by: Yan Burman
........
r5810 | bvassche | 2014-09-17 13:54:25 +0300 (Wed, 17 Sep 2014) | 1 line
scst_vdisk: Insert a blank line
........
r5811 | bvassche | 2014-09-17 13:56:40 +0300 (Wed, 17 Sep 2014) | 14 lines
vdisk_blockio: Make large COMPARE AND WRITE requests work for stacked block devices
Stacked block devices impose weird restrictions on S/G-lists. Hence
make the COMPARE AND WRITE implementation independent of these
restrictions.
Additionally, reduce the MAXIMUM COMPARE AND WRITE LENGTH limit from
0xff (no limit) to 0xfe to reduce the maximum amount of memory allocated
during a COMPARE AND WRITE. Also serialize COMPARE AND WRITE
operations, fix the offset reported for miscompares and fix the start
offset of the region that is synchronized if the FUA bit has been set.
Reported-by: Vishal Tripathi
........
r5814 | bvassche | 2014-09-18 10:08:49 +0300 (Thu, 18 Sep 2014) | 1 line
nightly build: Update kernel versions
........
r5816 | vlnb | 2014-09-20 09:31:43 +0300 (Sat, 20 Sep 2014) | 3 lines
Web updates
........
r5817 | bvassche | 2014-09-28 21:54:04 +0200 (Sun, 28 Sep 2014) | 1 line
scripts/rebuild-rhel-kernel-rpm: Enable put_page_callback patch for RHEL 7
........
git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/iser@5819 d57e44dd-8a1f-0410-8b47-8ef2f437770f
---
README | 6 +-
fcst/Makefile | 7 +-
fcst/fcst.h | 2 +-
nightly/conf/nightly.conf | 8 +-
scripts/rebuild-rhel-kernel-rpm | 4 +-
scst/src/Makefile | 17 +--
scst/src/dev_handlers/scst_vdisk.c | 105 +++++++++++++++---
scst_local/scst_local.c | 4 +-
.../scst-0.9.10/t/06-cont-on-err.t | 2 +-
.../scst-0.9.10/t/after-restore.conf | 2 +-
scstadmin/scstadmin.sysfs/scstadmin | 2 +
srpt/Makefile | 2 +-
srpt/README | 9 ++
srpt/src/ib_srpt.c | 18 +--
usr/fileio/Makefile | 5 +-
www/downloads.html | 13 +--
www/handler_fileio_tgt.html | 2 +-
www/scst_admin.html | 2 +-
www/target_fcoe.html | 4 +-
www/target_iscsi.html | 2 +-
www/target_iser.html | 3 +-
www/target_local.html | 2 +-
www/target_qla2x00t.html | 6 +-
www/target_srp.html | 2 +-
24 files changed, 149 insertions(+), 80 deletions(-)
diff --git a/README b/README
index e42fd5e92..52d3edfce 100644
--- a/README
+++ b/README
@@ -45,10 +45,8 @@ To integrate it into the SCST build tree you need:
2. Create in the SCST root, i.e. this directory, a subdirectory with name
qla2x00t_git
-3. Bind mount drivers/scsi/qla2xxx in the cloned git tree to the
-qla2x00t_git subdirectory, like:
-
-# mount --bind /home/u/scst-qla2xxx/drivers/scsi/qla2xxx /home/u/trunk/qla2x00t_git
+3. Symlink drivers/scsi/qla2xxx subdirectory in the cloned git tree to the
+qla2x00t_git subdirectory
Thats all. Now "make all" and other common and QLA specific root
Makefile targets "magically" start working. The bind mount is necessary
diff --git a/fcst/Makefile b/fcst/Makefile
index 1200bcb77..d70f7626c 100644
--- a/fcst/Makefile
+++ b/fcst/Makefile
@@ -3,6 +3,7 @@
# Based on ../mvsas_tgt/Makefile
#
# Copyright (C) 2006 - 2008 Jacky Feng
+# Copyright (C) 2011 - 2014 Bart Van Assche
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -137,4 +138,8 @@ extraclean: clean
-$(MAKE) clean
$(call set_var,build_mode,BUILDMODE,PERF)
-.PHONY: all tgt install uninstall clean extraclean
+release-archive:
+ ../scripts/generate-release-archive fcst "$$(sed -n 's/^#define[[:blank:]]FT_VERSION[[:blank:]]*\"\([^\"]*\)\".*/\1/p' fcst.h)"
+
+.PHONY: all tgt install uninstall clean extraclean 2debug 2release 2perf \
+ release-archive
diff --git a/fcst/fcst.h b/fcst/fcst.h
index 50f25b4a5..6067b84bd 100644
--- a/fcst/fcst.h
+++ b/fcst/fcst.h
@@ -26,7 +26,7 @@
#include "scst.h"
#endif
-#define FT_VERSION "0.3"
+#define FT_VERSION "3.1.0-pre"
#define FT_MODULE "fcst"
#define FT_MAX_HW_PENDING_TIME 20 /* max I/O time in seconds */
diff --git a/nightly/conf/nightly.conf b/nightly/conf/nightly.conf
index 9bb4b1048..de74deda5 100644
--- a/nightly/conf/nightly.conf
+++ b/nightly/conf/nightly.conf
@@ -3,13 +3,13 @@
ABT_DETAILS="x86_64"
ABT_JOBS=5
ABT_KERNELS=" \
-3.16.2 \
+3.16.3 \
3.15.10-nc \
-3.14.18-nc \
+3.14.19-nc \
3.13.11-nc \
-3.12.21-nc \
+3.12.28-nc \
3.11.10-nc \
-3.10.54-nc \
+3.10.55-nc \
3.9.11-nc \
3.8.13-nc \
3.7.10-nc \
diff --git a/scripts/rebuild-rhel-kernel-rpm b/scripts/rebuild-rhel-kernel-rpm
index f03da6df9..e4a96c1d7 100755
--- a/scripts/rebuild-rhel-kernel-rpm
+++ b/scripts/rebuild-rhel-kernel-rpm
@@ -383,7 +383,7 @@ patch -p1 ${rpmbuild_dir}/SPECS/kernel.spec <<'EOF' || exit $?
Source2001: cpupower.config
+Patch200: scst_exec_req_fifo.patch
-+#Patch201: put_page_callback.patch
++Patch201: put_page_callback.patch
+
# empty final patch to facilitate testing of kernel patches
Patch999999: linux-kernel-test.patch
@@ -393,7 +393,7 @@ patch -p1 ${rpmbuild_dir}/SPECS/kernel.spec <<'EOF' || exit $?
cp $RPM_SOURCE_DIR/kernel-%{version}-*.config .
+ApplyPatch scst_exec_req_fifo.patch
-+#ApplyPatch put_page_callback.patch
++ApplyPatch put_page_callback.patch
+
ApplyOptionalPatch linux-kernel-test.patch
diff --git a/scst/src/Makefile b/scst/src/Makefile
index 99dae97be..4d7088d57 100644
--- a/scst/src/Makefile
+++ b/scst/src/Makefile
@@ -95,9 +95,10 @@ all: $(SCST_INTF_VER_FILE)
scst:
$(MAKE) -C $(KDIR) SUBDIRS=$(shell pwd) BUILD_DEV=n
-MODS_VERS := $(shell ls Modules.symvers 2>/dev/null)
-# It's renamed in 2.6.18
-MOD_VERS := $(shell ls Module.symvers 2>/dev/null)
+# The file Modules.symvers has been renamed in the 2.6.18 kernel to
+# Module.symvers. Find out which name to use by looking in $(KDIR).
+MODULE_SYMVERS:=$(shell if [ -e $(KDIR)/Module.symvers ]; then \
+ echo Module.symvers; else echo Modules.symvers; fi)
install: all
@if [ -z "$(DESTDIR)" ] && \
@@ -116,14 +117,8 @@ install: all
install -m 644 ../include/scst_user.h $(INSTALL_DIR_H)
install -m 644 ../include/scst_const.h $(INSTALL_DIR_H)
install -m 644 ../include/scst_itf_ver.h $(INSTALL_DIR_H)
-ifneq ($(MODS_VERS),)
- rm -f $(INSTALL_DIR_H)/Module.symvers
- install -m 644 Modules.symvers $(INSTALL_DIR_H)
-endif
-ifneq ($(MOD_VERS),)
- rm -f $(INSTALL_DIR_H)/Modules.symvers
- install -m 644 Module.symvers $(INSTALL_DIR_H)
-endif
+ rm -f $(INSTALL_DIR_H)/$(MODULE_SYMVERS)
+ install -m 644 $(MODULE_SYMVERS) $(INSTALL_DIR_H)
-/sbin/depmod -b $(INSTALL_MOD_PATH)/ -a $(KVER)
mkdir -p $(DESTDIR)/var/lib/scst/pr
mkdir -p $(DESTDIR)/var/lib/scst/vdev_mode_pages
diff --git a/scst/src/dev_handlers/scst_vdisk.c b/scst/src/dev_handlers/scst_vdisk.c
index e1906b78e..64fa92490 100644
--- a/scst/src/dev_handlers/scst_vdisk.c
+++ b/scst/src/dev_handlers/scst_vdisk.c
@@ -119,6 +119,9 @@ static struct scst_trace_log vdisk_local_trace_tbl[] = {
#define DEF_TST SCST_TST_1_SEP_TASK_SETS
#define DEF_TMF_ONLY 0
+#define NO_CAW_LEN_LIM 0xff
+#define DEF_CAW_LEN_LIM 0xfe
+
/*
* Since we can't control backstorage device's reordering, we have to always
* report unrestricted reordering.
@@ -213,6 +216,10 @@ struct scst_vdisk_dev {
/* Unmap INQUIRY parameters */
uint32_t unmap_opt_gran, unmap_align, unmap_max_lba_cnt;
+ /* Block limits INQUIRY parameters */
+ uint8_t caw_len_lim;
+ struct mutex caw_mutex;
+
struct scst_device *dev;
struct list_head vdev_list_entry;
@@ -3464,7 +3471,7 @@ static int vdisk_block_limits(uint8_t *buf, struct scst_cmd *cmd,
buf[1] = 0xB0;
buf[3] = 0x3C;
buf[4] = 1; /* WSNZ set */
- buf[5] = 0xFF; /* No MAXIMUM COMPARE AND WRITE LENGTH limit */
+ buf[5] = virt_dev->caw_len_lim;
/* Optimal transfer granuality is PAGE_SIZE */
put_unaligned_be16(max_t(int, PAGE_SIZE / dev->block_size, 1), &buf[6]);
@@ -5593,6 +5600,17 @@ static void blockio_end_sync_io(struct bio *bio, int error)
#endif
}
+/**
+ * blockio_rw_sync() - read or write up to @len bytes from a block I/O device
+ *
+ * Returns:
+ * - A negative value if an error occurred.
+ * - Zero if len == 0.
+ * - A positive value <= len if I/O succeeded.
+ *
+ * Note:
+ * Increments *@loff with the number of bytes transferred upon success.
+ */
static ssize_t blockio_rw_sync(struct scst_vdisk_dev *virt_dev, void *buf,
size_t len, loff_t *loff, unsigned rw)
{
@@ -5643,15 +5661,26 @@ static ssize_t blockio_rw_sync(struct scst_vdisk_dev *virt_dev, void *buf,
bytes = min_t(size_t, PAGE_SIZE - off, buf + len - p);
q = is_vmalloc ? vmalloc_to_page(p) : virt_to_page(p);
rc = bio_add_page(bio, q, bytes, off);
- if (WARN_ON_ONCE(rc < bytes))
- goto free;
+ if (rc < bytes) {
+ if (rc <= 0 && p == buf) {
+ goto free;
+ } else {
+ if (rc > 0)
+ p += rc;
+ break;
+ }
+ }
}
submit_bio(rw, bio);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30)) && (LINUX_VERSION_CODE <= KERNEL_VERSION(3, 6, 0))
submitted = true;
#endif
wait_for_completion(&s.c);
- ret = (unsigned long)s.error ? : len;
+ ret = (unsigned long)s.error;
+ if (likely(ret == 0)) {
+ ret = p - buf;
+ *loff += ret;
+ }
free:
bio_put(bio);
@@ -5664,6 +5693,7 @@ out:
return ret;
}
+/* Note: Updates *@loff if reading succeeded. */
static ssize_t fileio_read_sync(struct file *fd, void *buf, size_t len,
loff_t *loff)
{
@@ -5688,6 +5718,7 @@ out:
return ret;
}
+/* Note: Updates *@loff if writing succeeded. */
static ssize_t fileio_write_sync(struct file *fd, void *buf, size_t len,
loff_t *loff)
{
@@ -5711,26 +5742,47 @@ out:
return ret;
}
+
+/* Note: Updates *@loff if reading succeeded except for NULLIO devices. */
static ssize_t vdev_read_sync(struct scst_vdisk_dev *virt_dev, void *buf,
size_t len, loff_t *loff)
{
- if (virt_dev->nullio)
+ ssize_t read, res;
+
+ if (virt_dev->nullio) {
return len;
- else if (virt_dev->blockio)
- return blockio_rw_sync(virt_dev, buf, len, loff, READ_SYNC);
- else
+ } else if (virt_dev->blockio) {
+ for (read = 0; read < len; read += res) {
+ res = blockio_rw_sync(virt_dev, buf + read, len - read,
+ loff, READ_SYNC);
+ if (res < 0)
+ return res;
+ }
+ return read;
+ } else {
return fileio_read_sync(virt_dev->fd, buf, len, loff);
+ }
}
+/* Note: Updates *@loff if reading succeeded except for NULLIO devices. */
static ssize_t vdev_write_sync(struct scst_vdisk_dev *virt_dev, void *buf,
size_t len, loff_t *loff)
{
- if (virt_dev->nullio)
+ ssize_t written, res;
+
+ if (virt_dev->nullio) {
return len;
- else if (virt_dev->blockio)
- return blockio_rw_sync(virt_dev, buf, len, loff, WRITE_SYNC);
- else
+ } else if (virt_dev->blockio) {
+ for (written = 0; written < len; written += res) {
+ res = blockio_rw_sync(virt_dev, buf + written,
+ len - written, loff, WRITE_SYNC);
+ if (res < 0)
+ return res;
+ }
+ return written;
+ } else {
return fileio_write_sync(virt_dev->fd, buf, len, loff);
+ }
}
static enum compl_status_e vdev_exec_verify(struct vdisk_cmd_params *p)
@@ -5855,6 +5907,16 @@ static enum compl_status_e vdisk_exec_caw(struct vdisk_cmd_params *p)
if (data_len == 0)
goto out;
+ if (virt_dev->caw_len_lim != NO_CAW_LEN_LIM &&
+ (data_len > virt_dev->caw_len_lim << dev->block_shift)) {
+ PRINT_ERROR("COMPARE AND WRITE: data length %u exceeds"
+ " limit %u << %u = %u", data_len,
+ virt_dev->caw_len_lim, dev->block_shift,
+ virt_dev->caw_len_lim << dev->block_shift);
+ scst_set_invalid_field_in_cdb(cmd, 13, 0);
+ goto out;
+ }
+
length = scst_get_buf_full(cmd, &caw_buf);
read_buf = vmalloc(data_len);
if (length < 0 || !read_buf) {
@@ -5872,6 +5934,8 @@ static enum compl_status_e vdisk_exec_caw(struct vdisk_cmd_params *p)
goto out;
}
+ mutex_lock(&virt_dev->caw_mutex);
+
loff = p->loff;
read = vdev_read_sync(virt_dev, read_buf, data_len, &loff);
if (read < data_len) {
@@ -5882,7 +5946,7 @@ static enum compl_status_e vdisk_exec_caw(struct vdisk_cmd_params *p)
else
scst_set_cmd_error(cmd,
SCST_LOAD_SENSE(scst_sense_read_error));
- goto out;
+ goto unlock;
}
if (memcmp(caw_buf, read_buf, data_len) != 0) {
@@ -5899,9 +5963,8 @@ static enum compl_status_e vdisk_exec_caw(struct vdisk_cmd_params *p)
* INFORMATION field.
*/
scst_set_cmd_error_and_inf(cmd,
- SCST_LOAD_SENSE(scst_sense_miscompare_error),
- p->loff + i);
- goto out;
+ SCST_LOAD_SENSE(scst_sense_miscompare_error), i);
+ goto unlock;
}
loff = p->loff;
@@ -5915,12 +5978,15 @@ static enum compl_status_e vdisk_exec_caw(struct vdisk_cmd_params *p)
else
scst_set_cmd_error(cmd,
SCST_LOAD_SENSE(scst_sense_write_error));
- goto out;
+ goto unlock;
}
if (p->fua)
- vdisk_fsync(loff, scst_cmd_get_data_len(cmd), cmd->dev,
+ vdisk_fsync(p->loff, scst_cmd_get_data_len(cmd), cmd->dev,
cmd->cmd_gfp_mask, cmd, false);
+unlock:
+ mutex_unlock(&virt_dev->caw_mutex);
+
out:
if (read_buf)
vfree(read_buf);
@@ -6154,6 +6220,8 @@ static int vdev_create(struct scst_dev_type *devt,
}
spin_lock_init(&virt_dev->flags_lock);
+ mutex_init(&virt_dev->caw_mutex);
+
virt_dev->vdev_devt = devt;
virt_dev->rd_only = DEF_RD_ONLY;
@@ -6163,6 +6231,7 @@ static int vdev_create(struct scst_dev_type *devt,
virt_dev->rotational = DEF_ROTATIONAL;
virt_dev->thin_provisioned = DEF_THIN_PROVISIONED;
virt_dev->tst = DEF_TST;
+ virt_dev->caw_len_lim = DEF_CAW_LEN_LIM;
virt_dev->blk_shift = DEF_DISK_BLOCK_SHIFT;
diff --git a/scst_local/scst_local.c b/scst_local/scst_local.c
index 31d18165c..771532619 100644
--- a/scst_local/scst_local.c
+++ b/scst_local/scst_local.c
@@ -1677,8 +1677,8 @@ static int scst_local_driver_probe(struct device *dev)
sess->shost = hpnt;
- hpnt->max_id = 0; /* Don't want more than one id */
- hpnt->max_lun = -1ll;
+ hpnt->max_id = 1; /* Don't want more than one id */
+ hpnt->max_lun = SCST_MAX_LUN;
/*
* Because of a change in the size of this field at 2.6.26
diff --git a/scstadmin/scstadmin.sysfs/scst-0.9.10/t/06-cont-on-err.t b/scstadmin/scstadmin.sysfs/scst-0.9.10/t/06-cont-on-err.t
index 2aa100c6a..883f020f3 100644
--- a/scstadmin/scstadmin.sysfs/scst-0.9.10/t/06-cont-on-err.t
+++ b/scstadmin/scstadmin.sysfs/scst-0.9.10/t/06-cont-on-err.t
@@ -46,7 +46,7 @@ sub testRestoreConfig {
system("$scstadmin -cont_on_err -no_lip -config $to_be_restored" .
" >/dev/null");
system("$scstadmin -write_config $tmpfilename1 >/dev/null");
- system("awk 'BEGIN {t = 0 } /^TARGET_DRIVER.*{\$/ { if (\$0 != \"TARGET_DRIVER scst_local {\") t = 1 } /^}\$/ { if (t == 1) t = 2 } /^\$/ { if (t == 2) { t = 3 } } /^./ { if (t == 3) { t = 0 } } { if (t == 0) print }' <$tmpfilename1 >$tmpfilename2");
+ system("awk 'BEGIN {t = 0 } /^# Automatically generated by SCST Configurator v/ { \$0 = \"# Automatically generated by SCST Configurator v...\" } /^TARGET_DRIVER.*{\$/ { if (\$0 != \"TARGET_DRIVER scst_local {\") t = 1 } /^}\$/ { if (t == 1) t = 2 } /^\$/ { if (t == 2) { t = 3 } } /^./ { if (t == 3) { t = 0 } } { if (t == 0) print }' <$tmpfilename1 >$tmpfilename2");
my $compare_result = system("diff -u $tmpfilename2 $expected");
ok($compare_result, 0);
if ($compare_result == 0) {
diff --git a/scstadmin/scstadmin.sysfs/scst-0.9.10/t/after-restore.conf b/scstadmin/scstadmin.sysfs/scst-0.9.10/t/after-restore.conf
index 77c6f5389..da8c75c37 100644
--- a/scstadmin/scstadmin.sysfs/scst-0.9.10/t/after-restore.conf
+++ b/scstadmin/scstadmin.sysfs/scst-0.9.10/t/after-restore.conf
@@ -1,4 +1,4 @@
-# Automatically generated by SCST Configurator v3.0.0-pre2.
+# Automatically generated by SCST Configurator v...
HANDLER vdisk_fileio {
diff --git a/scstadmin/scstadmin.sysfs/scstadmin b/scstadmin/scstadmin.sysfs/scstadmin
index 2d37936b7..98f783fcf 100755
--- a/scstadmin/scstadmin.sysfs/scstadmin
+++ b/scstadmin/scstadmin.sysfs/scstadmin
@@ -1751,6 +1751,8 @@ sub writeConfiguration {
}
}
+ $io->flush;
+ $io->sync;
close $io;
return 0;
diff --git a/srpt/Makefile b/srpt/Makefile
index 20e5709ea..555525018 100644
--- a/srpt/Makefile
+++ b/srpt/Makefile
@@ -87,7 +87,7 @@ all: src/$(MODULE_SYMVERS)
PRE_CFLAGS="$(OFED_CFLAGS) $(AUTOCONF_FLAGS)" \
KCFLAGS="$(AUTOCONF_FLAGS)" SCST_INC_DIR=$(SCST_INC_DIR) modules
-install: all src/ib_srpt.ko
+install: all
@[ -z "$(DESTDIR)$(INSTALL_MOD_PATH)" ] && \
find /lib/modules/$(KVER) -name ib_srpt.ko -exec rm {} \; ; \
true
diff --git a/srpt/README b/srpt/README
index ae06ffd62..0d805bdb3 100644
--- a/srpt/README
+++ b/srpt/README
@@ -38,6 +38,15 @@ Building and installing the SRP target driver is possible as follows:
fi
The ib_srpt kernel module supports the following parameters:
+
+* max_sge_delta (unsigned): Number to subtract from max_sge. Some but not
+ all HCA's allow to use up to max_sge S/G-list elements in RDMA
+ communication. The default value of this parameter is 3 and works with all
+ HCA's. If you know that the HCA's that are used by the ib_srpt driver allow
+ to use S/G-lists that are longer than max_sge - 3 then you can decrease this
+ parameter. Note: setting this parameter too low will cause SRP every login
+ to fail and will cause a message similar to the following to be logged on
+ the target system: "ib_srpt: RDMA t ... for idx ... failed with status 12".
* one_target_per_port (boolean) and
* use_node_guid_in_target_name (boolean)
ib_srpt can operate in one of the following three modes:
diff --git a/srpt/src/ib_srpt.c b/srpt/src/ib_srpt.c
index 4ec301ecc..437aa5e83 100644
--- a/srpt/src/ib_srpt.c
+++ b/srpt/src/ib_srpt.c
@@ -171,6 +171,10 @@ MODULE_PARM_DESC(srpt_service_guid,
"Using this value for ioc_guid, id_ext, and cm_listen_id"
" instead of using the node_guid of the first HCA.");
+static unsigned max_sge_delta = 3;
+module_param(max_sge_delta, uint, 0444);
+MODULE_PARM_DESC(max_sge_delta, "Number to subtract from max_sge.");
+
/*
* Note: changing any of the two constants below into SCST_CONTEXT_DIRECT is
* dangerous because it might cause IB completions to be processed too late
@@ -2151,19 +2155,7 @@ static int srpt_create_ch_ib(struct srpt_rdma_ch *ch)
qp_init->sq_sig_type = IB_SIGNAL_REQ_WR;
qp_init->qp_type = IB_QPT_RC;
qp_init->cap.max_send_wr = srpt_sq_size;
- /*
- * A quote from the OFED 1.5.3.1 release notes
- * (docs/release_notes/mthca_release_notes.txt), section "Known Issues":
- * In mem-free devices, RC QPs can be created with a maximum of
- * (max_sge - 1) entries only; UD QPs can be created with a maximum of
- * (max_sge - 3) entries.
- * A quote from the OFED 1.2.5 release notes
- * (docs/mthca_release_notes.txt), section "Known Issues":
- * In mem-free devices, RC QPs can be created with a maximum of
- * (max_sge - 3) entries only.
- */
- ch->max_sge = sdev->dev_attr.max_sge - 3;
- WARN_ON(ch->max_sge < 1);
+ ch->max_sge = max_t(int, 1, sdev->dev_attr.max_sge - max_sge_delta);
qp_init->cap.max_send_sge = ch->max_sge;
if (ch->using_rdma_cm) {
diff --git a/usr/fileio/Makefile b/usr/fileio/Makefile
index 6b193e219..6c8f68991 100644
--- a/usr/fileio/Makefile
+++ b/usr/fileio/Makefile
@@ -26,8 +26,9 @@ OBJS_F = $(SRCS_F:.c=.o)
#SRCS_C =
#OBJS_C = $(SRCS_C:.c=.o)
-SCST_INC_DIR := ../../scst/include
-#SCST_INC_DIR := $(PREFIX)/include/scst
+SCST_INC_DIR := $(shell if [ -e "$$PWD/../../scst" ]; \
+ then echo "$$PWD/../../scst/include"; \
+ else echo "$(DESTDIR)$(PREFIX)/include/scst"; fi)
INSTALL_DIR := $(DESTDIR)$(PREFIX)/bin/scst
CFLAGS += -O2 -Wall -Wextra -Wno-unused-parameter -Wstrict-prototypes \
diff --git a/www/downloads.html b/www/downloads.html
index 6d1253267..e7ce54f76 100644
--- a/www/downloads.html
+++ b/www/downloads.html
@@ -36,13 +36,8 @@
SCST Downloads
-
The latest stable version of SCST core is 2.2.1. The latest updates for it
- you can find it in the SVN branch 2.2.x.
-
-
SCST 3.0 release candidate is available for download from the SCST SVN branch 3.0.x. You can download it using either
- web-based SVN repository viewer or using anonymous access:
-
-
svn checkout svn://svn.code.sf.net/p/scst/svn/branches/3.0.x scst-3.0
+
The latest stable version of SCST is 3.0.0. The latest updates for it
+ you can find it in the SVN branch 3.0.x.
You can also download prebuilt SCST modules for
Scientific Linux CERN 5 (RHEL5-based),
@@ -87,9 +82,11 @@
+
+
-
+
diff --git a/www/handler_fileio_tgt.html b/www/handler_fileio_tgt.html
index f1e1c52c4..65e76ee9f 100644
--- a/www/handler_fileio_tgt.html
+++ b/www/handler_fileio_tgt.html
@@ -68,7 +68,7 @@
All the words about BLOCKIO mode from SCST's README file apply to
O_DIRECT mode as well.
- The latest stable version is 2.2.0. Requires SCST version 2.2.0 or higher.
+ The latest stable version is 3.0.0. Requires SCST version 3.0.0 or higher.
You can find the latest development version of this handler in the SCST SVN. See the download page how to setup
access to it.
- The latest stable version is 2.2.0.
+ The latest stable version is 3.0.0.
- It is on the preliminary stage. You can download it from the SCST SVN repository. See the download
- page how to setup access to it.
+
The latest stable version is 3.0.0. You can download the latest development version from the SCST SVN repository. See the download
+ page how to setup access to it.
- The latest stable version is 2.2.0. Requires Linux kernel version 2.6.18.x or higher and SCST version 2.2.0 or higher.
+
The latest stable version is 3.0.0. Requires Linux kernel version 2.6.18.x or higher and SCST version 3.0.0 or higher.
Tested mostly on i386 and x86_64, but should work on any other supported by Linux platform.
You can find the latest development version of this driver in the SCST SVN. See the download page how to setup
access to it.
diff --git a/www/target_iser.html b/www/target_iser.html
index cc9448569..8cb848f44 100644
--- a/www/target_iser.html
+++ b/www/target_iser.html
@@ -59,7 +59,8 @@
iSCSI Extensions for RDMA (iSER) driver for iSCSI-SCST
ISER extension for ISCSI-SCST has been developed by Yan Burman and Mellanox Technologies (thank you!).
- It is currently in a beta stage. You can download it from the "iser" SCST SVN branch.
+ Current version is 3.0.0. You can find the latest development version in the SCST SVN. See the download page how to setup
+ access to it.
This driver was made by Richard Sharpe.
- It is on the beta stage. The latest stabe version is 1.0.0. You can download
+
It is on the beta stage. The latest stabe version is 3.0.0. You can download
the latest development version from the SCST SVN repository. See the
download page how to setup access to it.
The latest stable version is 3.0.0. Requires Linux kernel version 2.6.26.x or higher and
SCST version 3.0.0 or higher.
- Driver in qla2x00t subdirectory is the old one, forked from qla2xxx from kernel 2.6.26. It is not maintained anymore.
-
- You can find the latest version of this driver in
+
Driver in qla2x00t subdirectory is the old one, forked from qla2xxx from kernel 2.6.26. It is not maintained anymore.
+ You can find the latest version of this driver in
git://git.qlogic.com/scst-qla2xxx.git. It is now maintained by QLogic, hence
located in the QLogic's git. This driver also supports FCoE. See SVN root README for instructions how to integrate it
into the SCST build tree.
diff --git a/www/target_srp.html b/www/target_srp.html
index 53ae21f5e..afc613f51 100644
--- a/www/target_srp.html
+++ b/www/target_srp.html
@@ -63,7 +63,7 @@
It is maintained by Bart Van Assche.
This driver is mainline Linux kernel ready and going to be pushed to it
together with other SCST patches.
- The latest stable version is 2.2.0.
+ The latest stable version is 3.0.0.