Merge branch 'svn-trunk'

This commit is contained in:
Bart Van Assche
2015-11-12 20:39:26 -08:00
75 changed files with 844 additions and 461 deletions
+18 -14
View File
@@ -31,12 +31,15 @@ For more information about each subproject see their README files.
QLogic target driver
====================
QLogic target driver in qla2x00t/ is the old one, forked from qla2xxx
from kernel 2.6.26. It is not maintained anymore and not built by
default by the common Makefile targets, like "all".
QLogic target driver qla2x00t is the old driver, forked from qla2xxx
several years ago. It is very stable, well tested and actively used in
many production setups. The ultimate goal is to have the mainstream
(git) QLogic target driver to be the main and the only QLogic target
driver, but, unfortunately, this driver not yet reached level of quality
and maturity of qla2x00t. We with QLogic are working toward it.
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.
You can find the latest version of the git driver in git://git.qlogic.com/scst-qla2xxx.git.
It is maintained by QLogic, hence located in the QLogic's git.
To integrate it into the SCST build tree you need:
@@ -45,19 +48,20 @@ 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. Symlink drivers/scsi/qla2xxx subdirectory in the cloned git tree to the
qla2x00t_git subdirectory
3. Optional for the in-tree build: symlink drivers/scsi/qla2xxx
subdirectory in the cloned git tree to the qla2x00t_git subdirectory
Thats all. Now run either "make all" to build the SCST core and all
target drivers with in-tree QLogic drivers, or the following command
Thats all. Now common and QLA specific root Makefile targets "magically"
start working with the new driver.
For detail instructions how to setup QLA target build environment see
its README or HOWTO. Run either "make all" to build the SCST core and
all target drivers with in-tree QLogic drivers, or the following command
with standalone QLogic drivers:
BUILD_2X_MODULE=y CONFIG_SCSI_QLA_FC=y CONFIG_SCSI_QLA2XXX_TARGET=y make all
and other common and QLA specific root Makefile targets "magically" start
working. For detail instructions how to setup QLA target build environment see
its README or HOWTO.
You can still build the old driver using qla_old* root Makefile targets.
In presence of qla2x00t_git subdirectory you can still build the
qla2x00t using qla_old* root Makefile targets.
Vladislav Bolkhovitin <vst@vlnb.net>, http://scst.sourceforge.net
+2 -1
View File
@@ -17,5 +17,6 @@ SRPT 1.0.0 450
2.2.x branch start 3981, which is a copy of r3979 on the 2.1.0.x branch
2.2.0 4102
2.2.1 4737 on the 2.2.x branch
3.0.x branch start 5534, which is a copy of trunk r5533.
3.0.x branch start 5534, which is a copy of trunk r5533
3.0.0 5815 on the 3.0.x branch
3.1.x branch start 6591, which is a copy of trunk r6590
+31 -24
View File
@@ -1,5 +1,5 @@
==============================================
SCST 2.x Installation on Gentoo Linux
SCST 3.x Installation on Gentoo Linux
==============================================
This howto will get you a working SCST installation on Gentoo Linux, it
@@ -15,12 +15,11 @@ Prerequisites:
- User with root privileges
- Read the official iSCSI-SCST howto for more options and information
Assumptions for this howto:
Assumptions for the examples used in this howto:
- User logged on as root
- Gentoo Sources version 2.6.39-r3 installed
- Manual build kernel without initramfs
- Gentoo AMD64 version
- Grub bootloader
- Grub 1 bootloader (use of GRUB2 should be an easy change)
- /boot on a separate partition
- One iSCSI target with 2 LUNS, both LUNS virtual disk files
- One iSCSI target with one LUN, LUN is a real device
@@ -29,17 +28,32 @@ When the above options differ from your environment/setup you will need
to change some of the commands provided in this howto for things to
work.
1. Download SCST.
1. Download the latest SCST version.
Choose to download a specific branch or the latest development version
a) Latest development version
cd /root
svn co https://scst.svn.sourceforge.net/svnroot/scst/trunk scst
svn checkout svn://svn.code.sf.net/p/scst/svn/trunk scst
b) Specific branch (3.0 used in example)
cd /root
svn checkout svn://svn.code.sf.net/p/scst/svn/branches/3.0.x scst
2. Patch the kernel (Optional but required for the best speed)
cd /usr/src/linux-2.6.39-gentoo-r3
patch -p1 < /root/scst/iscsi-scst/kernel/patches/put_page_callback-2.6.39.patch
If the SCST version downloaded above does not have the patches for the correct kernel
you can try the newest patches available, note the errors (if any) during the patch
and fix those manually by looking at the sourcefile.rej files generated by the patch
that list the failed changes. Use vi or nano to find and change the correct places for
the patch changes. (I had to change 2 lines in one source file and add 2 in another
when patching a 4.1.12 kernel with 3.18 patch files, so the majority of changes did
work perfectly)
cd /usr/src/linux
patch -p1 < /root/scst/iscsi-scst/kernel/patches/put_page_callback-3.18.patch
patch -p1 < /root/scst/scst/kernel/scst_exec_req_fifo-3.18.patch
make clean
@@ -49,6 +63,9 @@ work.
Select Networking support -> Networking options -> TCP/IP networking
Select Networking support -> Networking options -> TCP/IP zero-copy transfer completion notification
Select Device Drivers -> SCSI device support -> SCSI disk support
Select Device Drivers -> InfiniBand support
Select Device Drivers -> InfiniBand support -> InfiniBand SCSI RDMA Protocol
Select Device Drivers -> InfiniBand support -> iSCSI Extension for RDMA (iSER)
Select Enable the block layer -> IO Schedulers -> CFQ I/O Scheduler
Set Enable the Block layer -> IO Schedulers -> Default I/O Scheduler to 'CFQ'
Set Processor type and features -> Preemption Model to 'No Forced Preemption (Server)'
@@ -60,8 +77,8 @@ work.
4. Install the new kernel and reboot the system
mount /boot
cp arch/x86_64/boot/bzImage /boot/kernel-2.6.39-gentoo-r3-SCST
nano -w /boot/grub/grub.conf (add a new boot entry with the newly compiled kernel)
cp arch/x86_64/boot/bzImage /boot/kernel-4.1.12-gentoo-SCST
nano -w /boot/grub/grub.conf (GRUB1: add a new boot entry with the newly compiled kernel)
umount /boot
shutdown -r now
@@ -113,23 +130,13 @@ to all ip's
8. Run SCST automatically at startup
For SCST 2.1 SVN version r3805 and newer do:
rc-update add scst default
For SCST 2.0 and for a SVN version before r3805 and Gentoo with the old baselayout without OpenRC do:
rc-update add scst default
For SCST 2.0 and for a SVN version before r3805 and you have the new Gentoo baselayout do:
echo "/etc/init.d/scst start" >> /etc/local.d/scst.start
echo "/etc/init.d/scst stop" >> /etc/local.d/scst.stop
chmod 775 /etc/local.d/scst.*
(the SCST init script doesn't work with openRC and changing it would be a lot of work so local.d is used as an easy workaround)
9. Using SCST access control (optional)
9. Using SCST accesscontrol (optional)
SCST listens on all the targets IP addresses and allows access to any
initiators per default. There are a couple of ways to restict access and
initiators per default. There are a couple of ways to restrict access and
here I will give some examples. For the full documentation see the
README file in the scst/iscsi-scst/ directory
@@ -137,7 +144,7 @@ To make a target accessible on only one IP address do:
scstadmin -set_tgt_attr iqn.2011-08.nl.feka:storage.vdisk1 -driver iscsi -attributes allowed_portal=192.168.100.15
(Remember the IP address is the address of the target machine, not of
the allowed initiator, you can add multiple entries on the same target
by repeating the above command, you can also use the wildcards * and ?
by repeating the above command, you can also use the wild cards * and ?
where the ? stands for any single digit)
To make targets only accessible by specific inititators add a group to
@@ -162,7 +169,7 @@ Notes
==============================================
SCST's vdisk_fileio handler will use a default blocksize of 512b, this
is the only safe option for vmware ESXi or older windows versions, for
is the only safe option for VMware ESXi or older windows versions, for
best performance with newer windows versions a blocksize of 4096 will be
much faster.
+2 -2
View File
@@ -116,10 +116,10 @@ void conn_info_show(struct seq_file *seq, struct iscsi_session *session)
"[%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x]",
NIP6(inet6_sk(sk)->daddr));
#elif LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
snprintf(buf, sizeof(buf), "[%p6]",
snprintf(buf, sizeof(buf), "[%pI6]",
&inet6_sk(sk)->daddr);
#else
snprintf(buf, sizeof(buf), "[%p6]",
snprintf(buf, sizeof(buf), "[%pI6]",
&sk->sk_v6_daddr);
#endif
break;
+2 -2
View File
@@ -3318,9 +3318,9 @@ static ssize_t iscsi_tcp_get_initiator_ip(struct iscsi_conn *conn,
#else
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) && \
(!defined(RHEL_MAJOR) || RHEL_MAJOR -0 < 7)
pos = scnprintf(buf, size, "[%p6]", &inet6_sk(sk)->daddr);
pos = scnprintf(buf, size, "[%pI6]", &inet6_sk(sk)->daddr);
#else
pos = scnprintf(buf, size, "[%p6]", &sk->sk_v6_daddr);
pos = scnprintf(buf, size, "[%pI6]", &sk->sk_v6_daddr);
#endif
#endif
break;
+1 -1
View File
@@ -444,7 +444,7 @@ static ssize_t isert_get_initiator_ip(struct iscsi_conn *conn,
"[%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x]",
NIP6(((struct sockaddr_in6 *)&ss)->sin6_addr));
#else
pos = scnprintf(buf, size, "[%p6]",
pos = scnprintf(buf, size, "[%pI6]",
&((struct sockaddr_in6 *)&ss)->sin6_addr);
#endif
break;
+4 -4
View File
@@ -4,19 +4,19 @@ ABT_DETAILS="x86_64"
ABT_JOBS=5
ABT_KERNELS=" \
4.3 \
4.2.5-nc \
4.1.12-nc \
4.2.6-nc \
4.1.13-nc \
4.0.9-nc \
3.19.7-nc \
3.18.19-nc \
3.17.8-nc \
3.16.7-nc \
3.15.10-nc \
3.14.56-nc \
3.14.57-nc \
3.13.11-nc \
3.12.44-nc \
3.11.10-nc \
3.10.92-nc \
3.10.93-nc \
3.9.11-nc \
3.8.13-nc \
3.7.10-nc \
+1 -1
View File
@@ -140,7 +140,7 @@ extern size_t qla2xxx_del_vtarget(u64 port_name);
#endif /*((LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)) || \
defined(FC_VPORT_CREATE_DEFINED))*/
extern void qla_unknown_atio_work_fn(struct delayed_work *work);
extern void qla_unknown_atio_work_fn(struct work_struct *work);
#else /* CONFIG_SCSI_QLA2XXX_TARGET */
+1 -2
View File
@@ -1505,8 +1505,7 @@ qla2x00_model_desc_show(struct device *dev, struct device_attribute *attr,
char *buf)
{
scsi_qla_host_t *vha = shost_priv(class_to_shost(dev));
return scnprintf(buf, PAGE_SIZE, "%s\n",
vha->hw->model_desc ? vha->hw->model_desc : "");
return scnprintf(buf, PAGE_SIZE, "%s\n", vha->hw->model_desc);
}
static ssize_t
+2 -1
View File
@@ -1378,7 +1378,8 @@ qla2x00_fdmi_rhba(scsi_qla_host_t *vha)
/* Hardware version. */
eiter = (struct ct_fdmi_hba_attr *) (entries + size);
eiter->type = cpu_to_be16(FDMI_HBA_HARDWARE_VERSION);
strcpy(eiter->a.hw_version, ha->adapter_id);
strlcpy(eiter->a.hw_version, ha->adapter_id,
sizeof(eiter->a.hw_version));
alen = strlen(eiter->a.hw_version);
alen += (alen & 3) ? (4 - (alen & 3)) : 4;
eiter->len = cpu_to_be16(4 + alen);
+2 -1
View File
@@ -2190,7 +2190,8 @@ qla2x00_set_model_info(scsi_qla_host_t *vha, uint8_t *model, size_t len,
qla2x00_model_name[index * 2 + 1],
sizeof(ha->model_desc) - 1);
} else {
strcpy(ha->model_number, def);
strlcpy(ha->model_number, def,
sizeof(ha->model_number));
}
}
if (IS_FWI2_CAPABLE(ha))
+4
View File
@@ -1222,7 +1222,11 @@ qla82xx_pinit_from_rom(scsi_qla_host_t *vha)
ql_log(ql_log_info, vha, 0x0072,
"%d CRB init values found in ROM.\n", n);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0)
buf = kmalloc_array(n, sizeof(struct crb_addr_pair), GFP_KERNEL);
#else
buf = kmalloc(n * sizeof(struct crb_addr_pair), GFP_KERNEL);
#endif
if (buf == NULL) {
ql_log(ql_log_fatal, vha, 0x010c,
"Unable to allocate memory.\n");
+3 -4
View File
@@ -2386,10 +2386,10 @@ EXPORT_SYMBOL(qla2xxx_del_vtarget);
#endif /*((LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)) || \
defined(FC_VPORT_CREATE_DEFINED))*/
void qla_unknown_atio_work_fn(struct delayed_work *work)
void qla_unknown_atio_work_fn(struct work_struct *work)
{
struct qla_hw_data *ha = container_of(work, struct qla_hw_data,
unknown_atio_work);
unknown_atio_work.work);
qla_target.tgt_try_to_dequeue_unknown_atios(ha);
return;
}
@@ -2661,8 +2661,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
mutex_init(&base_vha->tgt_mutex);
mutex_init(&base_vha->tgt_host_action_mutex);
INIT_LIST_HEAD(&ha->unknown_atio_list);
INIT_DELAYED_WORK(&ha->unknown_atio_work,
(void (*)(struct work_struct *))qla_unknown_atio_work_fn);
INIT_DELAYED_WORK(&ha->unknown_atio_work, qla_unknown_atio_work_fn);
qla_clear_tgt_mode(base_vha);
#endif /* CONFIG_SCSI_QLA2XXX_TARGET */
+3 -1
View File
@@ -304,7 +304,9 @@ done
scst_03_public_headers="scst/include/scst.h scst/include/scst_const.h \
scst/include/scst_event.h scst/include/backport.h"
scst_04_main="scst/src/scst_main.c scst/src/scst_module.c scst/src/scst_priv.h"
scst_04_main="scst/src/scst_main.c scst/src/scst_module.c scst/src/scst_priv.h \
scst/src/scst_copy_mgr.c scst/src/scst_dlm.c scst/src/scst_dlm.h \
scst/src/scst_event.c scst/src/scst_no_dlm.c"
scst_05_targ="scst/src/scst_targ.c"
scst_06_lib="scst/src/scst_lib.c"
scst_07_pres="scst/src/scst_pres.h scst/src/scst_pres.c"
+1 -1
View File
@@ -30,7 +30,7 @@ SCST supports the following I/O modes:
* User space mode using scst_user device handler, which allows to
implement in the user space high performance virtual SCSI
devices. Comparing with fully in-kernel dev handlers this mode has
very low overhead (few %%)
very low overhead (few %%).
* "Performance" device handlers, which provide in pseudo pass-through
mode a way for direct performance measurements without overhead of
+5
View File
@@ -24,6 +24,11 @@ SCST supports the following I/O modes:
caching between application and disk or need the large block
throughput.
* User space mode using scst_user device handler, which allows to
implement in the user space high performance virtual SCSI
devices. Comparing with fully in-kernel dev handlers this mode has
very low overhead (few %%).
* "Performance" device handlers, which provide in pseudo pass-through
mode a way for direct performance measurements without overhead of
actual data transferring from/to underlying SCSI device.
+26 -2
View File
@@ -187,6 +187,15 @@ static inline bool cpumask_equal(const cpumask_t *src1p,
}
#endif
/* <linux/dlm.h> */
/* See also commit 0f8e0d9a317406612700426fad3efab0b7bbc467 */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 28)
enum {
DLM_LSFL_NEWEXCL = 0
};
#endif
/* <linux/fs.h> */
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 9, 0) && \
@@ -255,7 +264,9 @@ static inline void hex2bin(u8 *dst, const char *src, size_t count)
}
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 39)
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 39) && \
LINUX_VERSION_CODE != KERNEL_VERSION(2, 6, 38) && \
(!defined(RHEL_MAJOR) || RHEL_MAJOR -0 < 6)
static inline int __must_check kstrtoull(const char *s, unsigned int base,
unsigned long long *res)
{
@@ -281,6 +292,16 @@ static inline int __must_check kstrtol(const char *s, unsigned int base,
}
#endif
/* <linux/kmod.h> */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 23)
enum umh_wait {
UMH_NO_WAIT = -1, /* don't wait at all */
UMH_WAIT_EXEC = 0, /* wait for the exec, but not the process */
UMH_WAIT_PROC = 1, /* wait for the process to complete */
};
#endif
/* <linux/list.h> */
#ifndef __list_for_each
@@ -427,7 +448,10 @@ static inline void sg_set_page(struct scatterlist *sg, struct page *page,
(__flags), NULL, NULL)
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 4, 0)
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 4, 0) && \
!(LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 52) && \
LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)) && \
(!defined(RHEL_MAJOR) || RHEL_MAJOR -0 < 6)
static inline void *kmalloc_array(size_t n, size_t size, gfp_t flags)
{
if (size != 0 && n > ULONG_MAX / size)
+5 -1
View File
@@ -1975,7 +1975,11 @@ struct scst_session {
*/
struct list_head sess_cm_list_id_list;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
struct work_struct sess_cm_list_id_cleanup_work;
#else
struct delayed_work sess_cm_list_id_cleanup_work;
#endif
/* sysfs release completion */
struct completion *sess_kobj_release_cmpl;
@@ -2761,7 +2765,7 @@ struct scst_device {
unsigned int dev_unregistering:1;
/*
* Set if ext blocking is pending. It if just shortcut for
* Set if ext blocking is pending. It is just shortcut for
* !list_empty(&dev->ext_blockers_list) to save a cache miss.
*/
unsigned int ext_blocking_pending:1;
+4
View File
@@ -63,7 +63,11 @@ struct scst_event_entry {
int *pqueued_events_cnt;
union {
struct work_struct scst_event_queue_work;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
struct work_struct event_timeout_work;
#else
struct delayed_work event_timeout_work;
#endif
};
struct scst_event event;
+13 -10
View File
@@ -1,14 +1,17 @@
EXTRA_CFLAGS += -Iinclude/scst -Wno-unused-parameter
EXTRA_CFLAGS += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_proc.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/ iscsi-scst/ qla2xxx-target/ srpt/ \
scst_local/
scst_local/
+12 -9
View File
@@ -1,14 +1,17 @@
ccflags-y += -Iinclude/scst -Wno-unused-parameter
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_proc.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/ iscsi-scst/ qla2xxx-target/ srpt/ \
scst_local/
+12 -9
View File
@@ -1,14 +1,17 @@
ccflags-y += -Iinclude/scst -Wno-unused-parameter
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_proc.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/ iscsi-scst/ qla2xxx-target/ srpt/ \
scst_local/
+12 -9
View File
@@ -1,14 +1,17 @@
ccflags-y += -Iinclude/scst -Wno-unused-parameter
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/ iscsi-scst/ qla2xxx-target/ srpt/ \
scst_local/
+12 -9
View File
@@ -1,14 +1,17 @@
ccflags-y += -Iinclude/scst -Wno-unused-parameter
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/ iscsi-scst/ qla2xxx-target/ srpt/ \
scst_local/
+12 -9
View File
@@ -1,14 +1,17 @@
ccflags-y += -Iinclude/scst -Wno-unused-parameter
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/ iscsi-scst/ qla2xxx-target/ srpt/ \
scst_local/
+12 -9
View File
@@ -1,14 +1,17 @@
ccflags-y += -Iinclude/scst -Wno-unused-parameter
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/ iscsi-scst/ qla2xxx-target/ srpt/ \
scst_local/
+12 -9
View File
@@ -1,14 +1,17 @@
ccflags-y += -Iinclude/scst -Wno-unused-parameter
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/ iscsi-scst/ qla2xxx-target/ srpt/ \
scst_local/
+12 -9
View File
@@ -1,14 +1,17 @@
ccflags-y += -Iinclude/scst -Wno-unused-parameter
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/ iscsi-scst/ qla2xxx-target/ srpt/ \
scst_local/
+12 -9
View File
@@ -1,14 +1,17 @@
ccflags-y += -Iinclude/scst -Wno-unused-parameter
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/ iscsi-scst/ qla2xxx-target/ srpt/ \
scst_local/
+12 -8
View File
@@ -1,13 +1,17 @@
ccflags-y += -Iinclude/scst -Wno-unused-parameter
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+12 -8
View File
@@ -1,13 +1,17 @@
ccflags-y += -Iinclude/scst -Wno-unused-parameter
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+11 -7
View File
@@ -1,13 +1,17 @@
ccflags-y += -Wno-unused-parameter
scst-y += scst_main.o
scst-y += scst_pres.o
scst-y += scst_targ.o
scst-y += scst_lib.o
scst-y += scst_sysfs.o
scst-y += scst_mem.o
scst-y += scst_tg.o
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/
+2
View File
@@ -888,9 +888,11 @@ static void dev_user_flush_dcache(struct scst_user_cmd *ucmd)
for (i = 0; (bufflen > 0) && (i < buf_ucmd->num_data_pages); i++) {
struct page *page __attribute__((unused));
page = buf_ucmd->data_pages[i];
#ifdef ARCH_HAS_FLUSH_ANON_PAGE
struct vm_area_struct *vma = find_vma(current->mm, start);
if (vma != NULL)
flush_anon_page(vma, page, start);
#endif
+33 -11
View File
@@ -11,7 +11,11 @@
#include <asm/unaligned.h>
#include <linux/delay.h>
#ifdef INSIDE_KERNEL_TREE
#include <scst/scst.h>
#else
#include "scst.h"
#endif
#include "scst_priv.h"
#include "scst_pres.h"
@@ -179,14 +183,18 @@ typedef void (*scst_cm_retry_fn_t)(struct scst_cmd *cmd);
struct scst_cm_retry {
struct scst_cmd *cm_retry_cmd;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
struct work_struct cm_retry_work;
#else
struct delayed_work cm_retry_work;
#endif
scst_cm_retry_fn_t cm_retry_fn;
};
static void scst_cm_retry_work_fn(struct delayed_work *work)
static void scst_cm_retry_work_fn(struct work_struct *work)
{
struct scst_cm_retry *retry = container_of(work, struct scst_cm_retry,
cm_retry_work);
cm_retry_work.work);
TRACE_ENTRY();
@@ -276,7 +284,7 @@ try_retry:
next_retry_time = cur_time + SCST_CM_RETRIES_WAIT;
TRACE_DBG("Retrying cmd %p (imm_retry %d, next_retry_time %ld, "
"cur_time %ld, " "start_time %ld, max_retry_time %ld): going "
"cur_time %ld, start_time %ld, max_retry_time %ld): going "
"to sleep", cmd, imm_retry, next_retry_time, cur_time,
start_time, max_retry_time);
@@ -295,8 +303,7 @@ try_retry:
}
retry->cm_retry_cmd = cmd;
__scst_cmd_get(cmd);
INIT_DELAYED_WORK(&retry->cm_retry_work,
(void (*)(struct work_struct *))scst_cm_retry_work_fn);
INIT_DELAYED_WORK(&retry->cm_retry_work, scst_cm_retry_work_fn);
retry->cm_retry_fn = retry_fn;
if (imm_retry) {
@@ -356,7 +363,7 @@ static int scst_cm_setup_this_data_descr(struct scst_cmd *ec_cmd)
EXTRACHECKS_BUG_ON(priv->cm_cur_data_descr > priv->cm_data_descrs_cnt);
if (priv->cm_cur_data_descr == priv->cm_data_descrs_cnt) {
TRACE_DBG("No more data desriptors for ec_cmd %p", ec_cmd);
TRACE_DBG("No more data descriptors for ec_cmd %p", ec_cmd);
res = -ENOENT;
goto out;
}
@@ -727,6 +734,7 @@ static void scst_cm_store_list_id_details(struct scst_cmd *ec_cmd)
l->cm_status = ec_cmd->status;
if (scst_sense_valid(ec_cmd->sense)) {
int len = ec_cmd->sense_valid_len;
if (len > sizeof(l->cm_sense)) {
PRINT_WARNING("EC command's sense is "
"too big (%d) with max allowed "
@@ -1327,6 +1335,7 @@ static void scst_cm_gen_reads(struct scst_cmd *ec_cmd)
while (1) {
int rc;
while ((priv->cm_left_to_read > 0) &&
(priv->cm_cur_in_flight < SCST_MAX_IN_FLIGHT_INTERNAL_COMMANDS)) {
int blocks;
@@ -1795,6 +1804,7 @@ bool scst_cm_check_block_all_devs(struct scst_cmd *cmd)
if (unlikely(res)) {
struct scst_cmd *blocked_cmd = e->cm_fcmd;
list_for_each_entry(e, &d->cm_sorted_devs_list,
cm_sorted_devs_list_entry) {
if (e->cm_fcmd == blocked_cmd)
@@ -1839,6 +1849,7 @@ void scst_cm_abort_ec_cmd(struct scst_cmd *ec_cmd)
list_for_each_entry(ip, &p->cm_internal_cmd_list,
cm_internal_cmd_list_entry) {
struct scst_cmd *c = ip->cm_cmd;
TRACE_MGMT_DBG("Aborting (f)cmd %p", c);
set_bit(SCST_CMD_ABORTED, &c->cmd_flags);
}
@@ -1981,10 +1992,16 @@ out_unlock_free:
goto out;
}
void sess_cm_list_id_cleanup_work_fn(struct delayed_work *work)
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
void sess_cm_list_id_cleanup_work_fn(void *p)
{
struct scst_session *sess = p;
#else
void sess_cm_list_id_cleanup_work_fn(struct work_struct *work)
{
struct scst_session *sess = container_of(work,
struct scst_session, sess_cm_list_id_cleanup_work);
struct scst_session, sess_cm_list_id_cleanup_work.work);
#endif
struct scst_cm_list_id *l, *t;
unsigned long cur_time = jiffies;
unsigned long flags;
@@ -2513,6 +2530,7 @@ static int scst_cm_dev_register(struct scst_device *dev)
for (i = 0; i < SESS_TGT_DEV_LIST_HASH_SIZE; i++) {
struct scst_tgt_dev *tgt_dev;
struct list_head *head = &scst_cm_sess->sess_tgt_dev_list[i];
list_for_each_entry(tgt_dev, head, sess_tgt_dev_list_entry) {
if (tgt_dev->dev == dev) {
PRINT_ERROR("Copy Manager already registered "
@@ -2578,6 +2596,7 @@ static void scst_cm_dev_unregister(struct scst_device *dev)
for (i = 0; i < SESS_TGT_DEV_LIST_HASH_SIZE; i++) {
struct scst_tgt_dev *tgt_dev;
struct list_head *head = &scst_cm_sess->sess_tgt_dev_list[i];
list_for_each_entry(tgt_dev, head, sess_tgt_dev_list_entry) {
if (tgt_dev->dev == dev) {
scst_acg_del_lun(scst_cm_tgt->default_acg,
@@ -2632,6 +2651,7 @@ static bool scst_cm_check_access_acg(const char *initiator_name,
list_for_each_entry(acg_dev, &acg->acg_dev_list, acg_dev_list_entry) {
if (acg_dev->dev == dev) {
struct scst_acn *acn;
if (default_acg)
goto found;
list_for_each_entry(acn, &acg->acn_list, acn_list_entry) {
@@ -2957,6 +2977,7 @@ skip_fcmd_create:
#if defined(CONFIG_SCST_DEBUG) || defined(CONFIG_SCST_EXTRACHECKS)
{
struct scst_cm_dev_entry *tp = NULL;
list_for_each_entry(t, &priv->cm_sorted_devs_list, cm_sorted_devs_list_entry) {
TRACE_DBG("t %p, cm dev %p", t, t->cm_fcmd->dev);
if (tp != NULL) {
@@ -3045,7 +3066,7 @@ static int scst_cm_parse_b2b_seg_descr(struct scst_cmd *ec_cmd,
scst_cm_set_seg_err_sense(ec_cmd, 0xD, 2, seg_num, 6);
goto out_err;
}
if (tgt_des->read_only){
if (tgt_des->read_only) {
PRINT_WARNING("Target descriptor refers to read-only device");
scst_cm_set_seg_err_sense(ec_cmd, 0, 0, seg_num, 6);
goto out_err;
@@ -3125,6 +3146,7 @@ static void scst_cm_free_ec_priv(struct scst_cmd *ec_cmd, bool unblock_dev)
list_for_each_entry_safe(ip, it, &p->cm_internal_cmd_list,
cm_internal_cmd_list_entry) {
struct scst_cmd *c = ip->cm_cmd;
scst_cm_del_free_from_internal_cmd_list(c, unblock_dev);
__scst_cmd_put(c);
}
@@ -3526,8 +3548,8 @@ static int scst_cm_mgmt(struct scst_sysfs_work_item *work)
d->scsi_dev->channel == channel &&
d->scsi_dev->id == id &&
d->scsi_dev->lun == lun) {
dev = d;
break;
dev = d;
break;
}
}
if (dev == NULL) {
+79 -29
View File
@@ -572,7 +572,8 @@ static int scst_dlm_update_nodeids(struct scst_pr_dlm_data *pr_dlm)
static const char comms_dir[] = "/sys/kernel/config/dlm/cluster/comms";
struct file *comms;
char *p, *entries = kzalloc(1, GFP_KERNEL);
uint32_t nodeid, *new;
unsigned long nodeid;
uint32_t *new;
int i, ret, num_nodes;
char path[256], buf[64];
@@ -612,7 +613,9 @@ static int scst_dlm_update_nodeids(struct scst_pr_dlm_data *pr_dlm)
pr_dlm->nodeid = new;
pr_dlm->participants = num_nodes;
for (i = 0, p = entries; *p; i++, p += strlen(p) + 1) {
nodeid = simple_strtoul(p, NULL, 0);
ret = kstrtoul(p, 0, &nodeid);
if (WARN_ON_ONCE(ret < 0))
continue;
snprintf(path, sizeof(path), "%s/%s/local", comms_dir, p);
if (scst_read_file(path, buf, sizeof(buf)) >= 0 &&
strcmp(buf, "1\n") == 0)
@@ -1077,10 +1080,16 @@ static void scst_dlm_pre_bast(void *bastarg, int mode)
queue_work(pr_dlm->from_wq, &pr_dlm->pre_upd_work);
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_pre_join_work(void *p)
{
struct scst_pr_dlm_data *pr_dlm = p;
#else
static void scst_pre_join_work(struct work_struct *work)
{
struct scst_pr_dlm_data *pr_dlm = container_of(work,
struct scst_pr_dlm_data, pre_join_work);
#endif
dlm_lockspace_t *ls;
mutex_lock(&pr_dlm->ls_mutex);
@@ -1094,10 +1103,16 @@ static void scst_pre_join_work(struct work_struct *work)
mutex_unlock(&pr_dlm->ls_mutex);
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_pre_upd_work(void *p)
{
struct scst_pr_dlm_data *pr_dlm = p;
#else
static void scst_pre_upd_work(struct work_struct *work)
{
struct scst_pr_dlm_data *pr_dlm = container_of(work,
struct scst_pr_dlm_data, pre_upd_work);
#endif
dlm_lockspace_t *ls;
mutex_lock(&pr_dlm->ls_mutex);
@@ -1128,10 +1143,16 @@ static void scst_dlm_post_bast(void *bastarg, int mode)
* Note: the node that has invoked scst_trigger_lvb_update() holds PR_LOCK
* in EX mode and waits until this function has finished.
*/
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_copy_to_dlm_work(void *p)
{
struct scst_pr_dlm_data *pr_dlm = p;
#else
static void scst_copy_to_dlm_work(struct work_struct *work)
{
struct scst_pr_dlm_data *pr_dlm = container_of(work,
struct scst_pr_dlm_data, copy_to_dlm_work);
#endif
struct scst_device *dev = pr_dlm->dev;
dlm_lockspace_t *ls;
int res;
@@ -1195,10 +1216,16 @@ unlock_ls:
* scst_pr_init_tgt_dev() and scst_pr_clear_tgt_dev() in scst_pres.c protect
* these manipulations by locking the PR data structures for writing.
*/
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_copy_from_dlm_work(void *p)
{
struct scst_pr_dlm_data *pr_dlm = p;
#else
static void scst_copy_from_dlm_work(struct work_struct *work)
{
struct scst_pr_dlm_data *pr_dlm = container_of(work,
struct scst_pr_dlm_data, copy_from_dlm_work);
#endif
struct scst_device *dev = pr_dlm->dev;
dlm_lockspace_t *ls;
int res = -ENOENT;
@@ -1250,10 +1277,16 @@ static void scst_dlm_post_ast(void *astarg)
}
/* Tell other nodes to refresh their local state from the lock value blocks. */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_reread_lvb_work(void *p)
{
struct scst_pr_dlm_data *pr_dlm = p;
#else
static void scst_reread_lvb_work(struct work_struct *work)
{
struct scst_pr_dlm_data *pr_dlm = container_of(work,
struct scst_pr_dlm_data, reread_lvb_work);
#endif
dlm_lockspace_t *ls;
struct scst_lksb pr_lksb;
int res;
@@ -1275,10 +1308,16 @@ unlock_ls:
}
/* Tell other nodes to update the DLM lock value blocks. */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_lvb_upd_work(void *p)
{
struct scst_pr_dlm_data *pr_dlm = p;
#else
static void scst_lvb_upd_work(struct work_struct *work)
{
struct scst_pr_dlm_data *pr_dlm = container_of(work,
struct scst_pr_dlm_data, lvb_upd_work);
#endif
dlm_lockspace_t *ls;
struct scst_lksb lksb;
int res;
@@ -1320,47 +1359,58 @@ create_st_wq(const char *fmt, ...)
*/
static int scst_pr_dlm_init(struct scst_device *dev, const char *cl_dev_id)
{
struct scst_pr_dlm_data *pr_dlm;
int res = -ENOMEM;
compile_time_size_checks();
dev->pr_dlm = kzalloc(sizeof(*dev->pr_dlm), GFP_KERNEL);
if (!dev->pr_dlm)
pr_dlm = kzalloc(sizeof(*dev->pr_dlm), GFP_KERNEL);
if (!pr_dlm)
goto out;
dev->pr_dlm->dev = dev;
mutex_init(&dev->pr_dlm->ls_cr_mutex);
mutex_init(&dev->pr_dlm->ls_mutex);
dev->pr_dlm->data_lksb.lksb.sb_lvbptr = dev->pr_dlm->lvb;
INIT_WORK(&dev->pr_dlm->pre_join_work, scst_pre_join_work);
INIT_WORK(&dev->pr_dlm->pre_upd_work, scst_pre_upd_work);
INIT_WORK(&dev->pr_dlm->copy_from_dlm_work, scst_copy_from_dlm_work);
INIT_WORK(&dev->pr_dlm->copy_to_dlm_work, scst_copy_to_dlm_work);
INIT_WORK(&dev->pr_dlm->lvb_upd_work, scst_lvb_upd_work);
INIT_WORK(&dev->pr_dlm->reread_lvb_work, scst_reread_lvb_work);
dev->pr_dlm->latest_lscr_attempt = jiffies - 100 * HZ;
dev->pr_dlm = pr_dlm;
pr_dlm->dev = dev;
mutex_init(&pr_dlm->ls_cr_mutex);
mutex_init(&pr_dlm->ls_mutex);
pr_dlm->data_lksb.lksb.sb_lvbptr = pr_dlm->lvb;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
INIT_WORK(&pr_dlm->pre_join_work, scst_pre_join_work, pr_dlm);
INIT_WORK(&pr_dlm->pre_upd_work, scst_pre_upd_work, pr_dlm);
INIT_WORK(&pr_dlm->copy_from_dlm_work, scst_copy_from_dlm_work, pr_dlm);
INIT_WORK(&pr_dlm->copy_to_dlm_work, scst_copy_to_dlm_work, pr_dlm);
INIT_WORK(&pr_dlm->lvb_upd_work, scst_lvb_upd_work, pr_dlm);
INIT_WORK(&pr_dlm->reread_lvb_work, scst_reread_lvb_work, pr_dlm);
#else
INIT_WORK(&pr_dlm->pre_join_work, scst_pre_join_work);
INIT_WORK(&pr_dlm->pre_upd_work, scst_pre_upd_work);
INIT_WORK(&pr_dlm->copy_from_dlm_work, scst_copy_from_dlm_work);
INIT_WORK(&pr_dlm->copy_to_dlm_work, scst_copy_to_dlm_work);
INIT_WORK(&pr_dlm->lvb_upd_work, scst_lvb_upd_work);
INIT_WORK(&pr_dlm->reread_lvb_work, scst_reread_lvb_work);
#endif
pr_dlm->latest_lscr_attempt = jiffies - 100 * HZ;
res = -ENOMEM;
dev->pr_dlm->cl_dev_id = kstrdup(cl_dev_id, GFP_KERNEL);
if (!dev->pr_dlm->cl_dev_id)
pr_dlm->cl_dev_id = kstrdup(cl_dev_id, GFP_KERNEL);
if (!pr_dlm->cl_dev_id)
goto err_free;
dev->pr_dlm->from_wq = create_st_wq("%s_from_dlm", dev->virt_name);
if (IS_ERR(dev->pr_dlm->from_wq)) {
res = PTR_ERR(dev->pr_dlm->from_wq);
dev->pr_dlm->from_wq = NULL;
pr_dlm->from_wq = create_st_wq("%s_from_dlm", dev->virt_name);
if (IS_ERR(pr_dlm->from_wq)) {
res = PTR_ERR(pr_dlm->from_wq);
pr_dlm->from_wq = NULL;
goto err_free;
}
dev->pr_dlm->to_wq = create_st_wq("%s_to_dlm", dev->virt_name);
if (IS_ERR(dev->pr_dlm->to_wq)) {
res = PTR_ERR(dev->pr_dlm->to_wq);
dev->pr_dlm->to_wq = NULL;
pr_dlm->to_wq = create_st_wq("%s_to_dlm", dev->virt_name);
if (IS_ERR(pr_dlm->to_wq)) {
res = PTR_ERR(pr_dlm->to_wq);
pr_dlm->to_wq = NULL;
goto err_free;
}
dev->pr_dlm->upd_wq = create_st_wq("%s_upd_dlm", dev->virt_name);
if (IS_ERR(dev->pr_dlm->upd_wq)) {
res = PTR_ERR(dev->pr_dlm->upd_wq);
dev->pr_dlm->upd_wq = NULL;
pr_dlm->upd_wq = create_st_wq("%s_upd_dlm", dev->virt_name);
if (IS_ERR(pr_dlm->upd_wq)) {
res = PTR_ERR(pr_dlm->upd_wq);
pr_dlm->upd_wq = NULL;
goto err_free;
}
+39 -3
View File
@@ -88,10 +88,16 @@ out:
return res;
}
static void scst_event_timeout_fn(struct delayed_work *work)
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_event_timeout_fn(void *p)
{
struct scst_event_entry *event_entry = p;
#else
static void scst_event_timeout_fn(struct work_struct *work)
{
struct scst_event_entry *event_entry = container_of(work,
struct scst_event_entry, event_timeout_work);
struct scst_event_entry, event_timeout_work.work);
#endif
TRACE_ENTRY();
@@ -198,8 +204,14 @@ static void __scst_event_queue(struct scst_event_entry *event_entry)
break;
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
INIT_WORK(&new_event_entry->event_timeout_work,
scst_event_timeout_fn,
new_event_entry);
#else
INIT_DELAYED_WORK(&new_event_entry->event_timeout_work,
(void (*)(struct work_struct *))scst_event_timeout_fn);
scst_event_timeout_fn);
#endif
if (new_event_entry->event_notify_fn != NULL) {
new_event_entry->event.event_id = atomic_inc_return(&base_event_id);
if (new_event_entry->event_timeout == 0)
@@ -245,10 +257,16 @@ done:
return;
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_event_queue_work_fn(void *p)
{
struct scst_event_entry *e = p;
#else
static void scst_event_queue_work_fn(struct work_struct *work)
{
struct scst_event_entry *e = container_of(work,
struct scst_event_entry, scst_event_queue_work);
#endif
TRACE_ENTRY();
@@ -264,7 +282,11 @@ void scst_event_queue(uint32_t event_code, const char *issuer_name,
{
TRACE_ENTRY();
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
INIT_WORK(&e->scst_event_queue_work, scst_event_queue_work_fn, e);
#else
INIT_WORK(&e->scst_event_queue_work, scst_event_queue_work_fn);
#endif
TRACE_DBG("Scheduling event entry %p", e);
@@ -1042,7 +1064,11 @@ static const struct file_operations scst_event_fops = {
int scst_event_init(void)
{
int res = 0;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 21)
struct class_device *class_member;
#else
struct device *dev;
#endif
TRACE_ENTRY();
@@ -1060,6 +1086,15 @@ int scst_event_init(void)
goto out_class;
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 21)
class_member = class_device_create(scst_event_sysfs_class, NULL,
MKDEV(scst_event_major, 0), NULL,
SCST_EVENT_NAME);
if (IS_ERR(class_member)) {
res = PTR_ERR(class_member);
goto out_chrdev;
}
#else
dev = device_create(scst_event_sysfs_class, NULL,
MKDEV(scst_event_major, 0),
NULL,
@@ -1068,6 +1103,7 @@ int scst_event_init(void)
res = PTR_ERR(dev);
goto out_chrdev;
}
#endif
#ifdef CONFIG_EVENTS_WAIT_TEST
sysfs_create_file(kernel_kobj, &event_wait_test_attr.attr);
+62 -20
View File
@@ -76,7 +76,11 @@
static DEFINE_SPINLOCK(scst_global_stpg_list_lock);
static LIST_HEAD(scst_global_stpg_list);
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_put_acg_work(void *p);
#else
static void scst_put_acg_work(struct work_struct *work);
#endif
static void scst_del_acn(struct scst_acn *acn);
static void scst_free_acn(struct scst_acn *acn, bool reassign);
@@ -4149,7 +4153,11 @@ static void scst_init_order_data(struct scst_order_data *order_data)
return;
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_ext_blocking_done_fn(void *p);
#else
static void scst_ext_blocking_done_fn(struct work_struct *work);
#endif
static int scst_dif_none(struct scst_cmd *cmd);
#ifdef CONFIG_SCST_DIF_INJECT_CORRUPTED_TAGS
@@ -4184,7 +4192,11 @@ int scst_alloc_device(gfp_t gfp_mask, struct scst_device **out_dev)
INIT_LIST_HEAD(&dev->dev_tgt_dev_list);
INIT_LIST_HEAD(&dev->dev_acg_dev_list);
INIT_LIST_HEAD(&dev->ext_blockers_list);
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
INIT_WORK(&dev->ext_blockers_work, scst_ext_blocking_done_fn, dev);
#else
INIT_WORK(&dev->ext_blockers_work, scst_ext_blocking_done_fn);
#endif
dev->dev_double_ua_possible = 1;
dev->queue_alg = SCST_QUEUE_ALG_1_UNRESTRICTED_REORDER;
@@ -4783,13 +4795,19 @@ struct scst_acg_put_work {
struct scst_acg *acg;
};
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_put_acg_work(void *p)
{
struct scst_acg_put_work *put_work = p;
#else
static void scst_put_acg_work(struct work_struct *work)
{
struct scst_acg_put_work *put_work =
container_of(work, typeof(*put_work), work);
#endif
struct scst_acg *acg = put_work->acg;
kfree(work);
kfree(put_work);
kref_put(&acg->acg_kref, scst_release_acg);
}
@@ -4803,7 +4821,11 @@ void scst_put_acg(struct scst_acg *acg)
return;
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
INIT_WORK(&put_work->work, scst_put_acg_work, put_work);
#else
INIT_WORK(&put_work->work, scst_put_acg_work);
#endif
put_work->acg = acg;
/*
@@ -6278,11 +6300,12 @@ static int scst_ws_sg_init(struct scatterlist **ws_sg, int ws_sg_cnt,
static int scst_ws_sg_tails_get(struct scst_data_descriptor *where, struct scst_write_same_priv *wsp)
{
int i;
uint64_t n;
TRACE_ENTRY();
for (i = 0; where[i].sdd_blocks != 0; i++) {
if (where[i].sdd_blocks / wsp->ws_max_each != 0) {
if (where[i].sdd_blocks >= wsp->ws_max_each) {
wsp->ws_sg_full_cnt = wsp->ws_max_each;
break;
}
@@ -6297,8 +6320,10 @@ static int scst_ws_sg_tails_get(struct scst_data_descriptor *where, struct scst_
sizeof(*wsp->ws_sg_tails)*i);
return -ENOMEM;
}
for (i = 0; where[i].sdd_blocks != 0; i++)
wsp->ws_sg_tails[i].sg_cnt = where[i].sdd_blocks % wsp->ws_max_each;
for (i = 0; where[i].sdd_blocks != 0; i++) {
n = where[i].sdd_blocks;
wsp->ws_sg_tails[i].sg_cnt = do_div(n, wsp->ws_max_each);
}
TRACE_EXIT();
return 0;
@@ -6884,11 +6909,13 @@ struct scst_session *scst_alloc_session(struct scst_tgt *tgt, gfp_t gfp_mask,
INIT_LIST_HEAD(&sess->init_deferred_cmd_list);
INIT_LIST_HEAD(&sess->init_deferred_mcmd_list);
INIT_LIST_HEAD(&sess->sess_cm_list_id_list);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
INIT_DELAYED_WORK(&sess->sess_cm_list_id_cleanup_work,
(void (*)(struct work_struct *))sess_cm_list_id_cleanup_work_fn);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20))
sess_cm_list_id_cleanup_work_fn);
INIT_DELAYED_WORK(&sess->hw_pending_work, scst_hw_pending_work_fn);
#else
INIT_WORK(&sess->sess_cm_list_id_cleanup_work,
sess_cm_list_id_cleanup_work_fn, sess);
INIT_WORK(&sess->hw_pending_work, scst_hw_pending_work_fn, sess);
#endif
@@ -7225,7 +7252,7 @@ void scst_stpg_del_unblock_next(struct scst_cmd *cmd)
EXTRACHECKS_BUG_ON(!cmd->cmd_on_global_stpg_list);
TRACE_DBG("STPG cmd %p: unblocking next", cmd);
TRACE_DBG("STPG cmd %p done: unblocking next", cmd);
list_del(&cmd->global_stpg_list_entry);
cmd->cmd_on_global_stpg_list = 0;
@@ -13140,8 +13167,6 @@ void scst_unblock_dev(struct scst_device *dev)
break;
}
local_irq_restore_nort(flags);
dev->strictly_serialized_cmd_waiting = 0;
}
sBUG_ON(dev->block_count < 0);
@@ -14280,10 +14305,16 @@ void __scst_ext_blocking_done(struct scst_device *dev)
return;
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_ext_blocking_done_fn(void *p)
{
struct scst_device *dev = p;
#else
static void scst_ext_blocking_done_fn(struct work_struct *work)
{
struct scst_device *dev = container_of(work, struct scst_device,
ext_blockers_work);
#endif
TRACE_ENTRY();
@@ -14338,15 +14369,15 @@ static void scst_sync_ext_blocking_done(struct scst_device *dev,
return;
}
int scst_ext_block_dev(struct scst_device *dev, bool sync,
ext_blocker_done_fn_t done_fn, const uint8_t *priv, int priv_len)
int scst_ext_block_dev(struct scst_device *dev, ext_blocker_done_fn_t done_fn,
const uint8_t *priv, int priv_len, int flags)
{
int res;
struct scst_ext_blocker *b;
TRACE_ENTRY();
if (sync)
if (flags & SCST_EXT_BLOCK_SYNC)
priv_len = sizeof(void *);
b = kzalloc(sizeof(*b) + priv_len, GFP_KERNEL);
@@ -14357,8 +14388,8 @@ int scst_ext_block_dev(struct scst_device *dev, bool sync,
goto out;
}
TRACE_MGMT_DBG("New (%d) %s ext blocker %p for dev %s", dev->ext_blocks_cnt+1,
sync ? "sync" : "async", b, dev->virt_name);
TRACE_MGMT_DBG("New %d ext blocker %p for dev %s (flags %x)",
dev->ext_blocks_cnt+1, b, dev->virt_name, flags);
spin_lock_bh(&dev->dev_lock);
@@ -14374,10 +14405,15 @@ int scst_ext_block_dev(struct scst_device *dev, bool sync,
} else
scst_block_dev(dev);
if (flags & SCST_EXT_BLOCK_STPG) {
WARN_ON(dev->stpg_ext_blocked);
dev->stpg_ext_blocked = 1;
}
dev->ext_blocks_cnt++;
TRACE_DBG("ext_blocks_cnt %d", dev->ext_blocks_cnt);
if (sync && (dev->on_dev_cmd_count == 0)) {
if ((flags & SCST_EXT_BLOCK_SYNC) && (dev->on_dev_cmd_count == 0)) {
TRACE_DBG("No commands to wait for sync blocking (dev %s)",
dev->virt_name);
spin_unlock_bh(&dev->dev_lock);
@@ -14387,7 +14423,7 @@ int scst_ext_block_dev(struct scst_device *dev, bool sync,
list_add_tail(&b->ext_blockers_list_entry, &dev->ext_blockers_list);
dev->ext_blocking_pending = 1;
if (sync) {
if (flags & SCST_EXT_BLOCK_SYNC) {
DECLARE_WAIT_QUEUE_HEAD_ONSTACK(w);
b->ext_blocker_done_fn = scst_sync_ext_blocking_done;
@@ -14421,7 +14457,7 @@ out:
return res;
out_free_success:
sBUG_ON(!sync);
sBUG_ON(!(flags & SCST_EXT_BLOCK_SYNC));
kfree(b);
goto out_success;
}
@@ -14438,8 +14474,14 @@ void scst_ext_unblock_dev(struct scst_device *dev, bool stpg)
}
if ((dev->ext_blocks_cnt == 1) && dev->stpg_ext_blocked && !stpg) {
TRACE_DBG("Can not unblock internal STPG ext block (dev %s)",
dev->virt_name);
/*
* User space is sending too many unblock calls during
* STPG processing
*/
TRACE_MGMT_DBG("Can not unblock internal STPG ext block "
"(dev %s, ext_blocks_cnt %d, stpg_ext_blocked %d, stpg %d)",
dev->virt_name, dev->ext_blocks_cnt,
dev->stpg_ext_blocked, stpg);
goto out_unlock;
}
@@ -14454,7 +14496,7 @@ void scst_ext_unblock_dev(struct scst_device *dev, bool stpg)
spin_unlock_bh(&dev->dev_lock);
TRACE_DBG("Ext unblock (dev %s): still pending...",
dev->virt_name);
rc = scst_ext_block_dev(dev, true, NULL, NULL, 0);
rc = scst_ext_block_dev(dev, NULL, NULL, 0, SCST_EXT_BLOCK_SYNC);
if (rc != 0) {
/* Oops, have to poll */
PRINT_WARNING("scst_ext_block_dev(dev %s) failed, "
-1
View File
@@ -2683,7 +2683,6 @@ static int __init init_scst(void)
goto out_thread_free;
#endif
PRINT_INFO("SCST version %s loaded successfully (max mem for "
"commands %dMB, per device %dMB)", SCST_VERSION_STRING,
scst_max_cmd_mem, scst_max_dev_cmd_mem);
+13 -4
View File
@@ -410,7 +410,10 @@ static inline int scst_dlm_new_lockspace(const char *name, int namelen,
uint32_t flags,
int lvblen)
{
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31)
return dlm_new_lockspace((char *)name, namelen, lockspace, flags,
lvblen);
#elif LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
return dlm_new_lockspace(name, namelen, lockspace, flags, lvblen);
#else
return dlm_new_lockspace(name, NULL, flags, lvblen, NULL, NULL, NULL,
@@ -722,8 +725,10 @@ bool __scst_check_blocked_dev(struct scst_cmd *cmd);
void __scst_check_unblock_dev(struct scst_cmd *cmd);
void scst_check_unblock_dev(struct scst_cmd *cmd);
int scst_ext_block_dev(struct scst_device *dev, bool sync,
ext_blocker_done_fn_t done_fn, const uint8_t *priv, int priv_len);
#define SCST_EXT_BLOCK_SYNC 1
#define SCST_EXT_BLOCK_STPG 2
int scst_ext_block_dev(struct scst_device *dev, ext_blocker_done_fn_t done_fn,
const uint8_t *priv, int priv_len, int flags);
void scst_ext_unblock_dev(struct scst_device *dev, bool stpg);
void __scst_ext_blocking_done(struct scst_device *dev);
void scst_ext_blocking_done(struct scst_device *dev);
@@ -868,7 +873,11 @@ void scst_cm_free_descriptors(struct scst_cmd *cmd);
int scst_cm_ext_copy_exec(struct scst_cmd *cmd);
int scst_cm_rcv_copy_res_exec(struct scst_cmd *cmd);
void sess_cm_list_id_cleanup_work_fn(struct delayed_work *work);
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
void sess_cm_list_id_cleanup_work_fn(void *p);
#else
void sess_cm_list_id_cleanup_work_fn(struct work_struct *work);
#endif
void scst_cm_free_pending_list_ids(struct scst_session *sess);
bool scst_cm_check_block_all_devs(struct scst_cmd *cmd);
+3 -3
View File
@@ -3567,10 +3567,10 @@ static ssize_t scst_dev_block_store(struct kobject *kobj,
"data_len %d)", dev->virt_name, sync, data_start, data_len);
if (sync)
res = scst_ext_block_dev(dev, true, NULL, NULL, 0);
res = scst_ext_block_dev(dev, NULL, NULL, 0, SCST_EXT_BLOCK_SYNC);
else
res = scst_ext_block_dev(dev, false, scst_sysfs_ext_blocking_done,
data_start, data_len);
res = scst_ext_block_dev(dev, scst_sysfs_ext_blocking_done,
data_start, data_len, 0);
if (res != 0)
goto out;
+1
View File
@@ -547,6 +547,7 @@ void __scst_check_unblock_dev(struct scst_cmd *cmd)
TRACE_BLOCK("Strictly serialized cmd waiting: "
"unblocking dev %s", dev->virt_name);
scst_unblock_dev(dev);
dev->strictly_serialized_cmd_waiting = 0;
}
}
+24 -14
View File
@@ -397,13 +397,24 @@ out:
struct scst_alua_retry {
struct scst_cmd *alua_retry_cmd;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
struct work_struct alua_retry_work;
#else
struct delayed_work alua_retry_work;
#endif
};
static void scst_alua_transitioning_work_fn(struct delayed_work *work)
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void scst_alua_transitioning_work_fn(void *p)
{
struct scst_alua_retry *retry = container_of(work, struct scst_alua_retry,
alua_retry_work);
struct scst_alua_retry *retry = p;
#else
static void scst_alua_transitioning_work_fn(struct work_struct *work)
{
struct scst_alua_retry *retry =
container_of(work, struct scst_alua_retry,
alua_retry_work.work);
#endif
struct scst_cmd *cmd = retry->alua_retry_cmd;
TRACE_ENTRY();
@@ -468,8 +479,13 @@ static int scst_tg_accept_transitioning(struct scst_cmd *cmd)
/* No get is needed, because cmd is sync here */
retry->alua_retry_cmd = cmd;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
INIT_WORK(&retry->alua_retry_work,
scst_alua_transitioning_work_fn, retry);
#else
INIT_DELAYED_WORK(&retry->alua_retry_work,
(void (*)(struct work_struct *))scst_alua_transitioning_work_fn);
scst_alua_transitioning_work_fn);
#endif
cmd->already_transitioning = 1;
schedule_delayed_work(&retry->alua_retry_work, HZ/2);
res = SCST_ALUA_CHECK_DELAYED;
@@ -1852,17 +1868,11 @@ int scst_tg_set_group_info(struct scst_cmd *cmd)
atomic_inc(&wait->stpg_wait_left);
spin_lock_bh(&dev->dev_lock);
WARN_ON(dgd->dev->stpg_ext_blocked);
dgd->dev->stpg_ext_blocked = 1;
spin_unlock_bh(&dev->dev_lock);
rc = scst_ext_block_dev(dgd->dev, false,
scst_stpg_ext_blocking_done, (uint8_t *)&wait,
sizeof(wait));
rc = scst_ext_block_dev(dgd->dev, scst_stpg_ext_blocking_done,
(uint8_t *)&wait, sizeof(wait), SCST_EXT_BLOCK_STPG);
if (rc != 0) {
TRACE_DBG("scst_ext_block_dev() returned %d, "
"stepping back (cmd %p)", rc, cmd);
TRACE_DBG("scst_ext_block_dev() failed "
"with %d, reverting (cmd %p)", rc, cmd);
wait->status = rc;
wait->dg = dg;
atomic_dec(&wait->stpg_wait_left);
@@ -24,6 +24,7 @@ sub addTargets {
my $all_hw_tgt = 1;
for my $driver (@{$drivers}) {
next if $driver eq 'copy_manager';
my ($targets, $errorString) = $SCST->targets($driver);
for my $target (@{$targets}) {
if ($SCST->targetType($driver, $target) !=
+2
View File
@@ -1423,6 +1423,8 @@ sub writeConfiguration {
}
foreach my $driver (sort keys %{$CURRENT{'assign'}}) {
next if $driver eq 'copy_manager';
my $driver_buff;
my ($drv_attrs, $errorString) = $SCST->driverAttributes($driver);
-2
View File
@@ -18,8 +18,6 @@
#
SHELL=/bin/bash
# Decide to use which kernel src. If not specified, is current running kernel.
#export KDIR=/usr/src/linux-2.6
FILEIO_DIR=fileio
STPGD_DIR=stpgd
+2 -1
View File
@@ -65,10 +65,11 @@ char *app_name;
# endif
#endif /* DEBUG */
bool log_daemon = false;
unsigned long trace_flag = DEFAULT_LOG_FLAGS;
#endif /* defined(DEBUG) || defined(TRACING) */
bool log_daemon = false;
#define DEF_BLOCK_SHIFT 9
#define THREADS 7
+2 -1
View File
@@ -82,9 +82,10 @@ extern char *app_name;
#define __LOG_PREFIX NULL
#endif
extern bool log_daemon;
#if defined(DEBUG) || defined(TRACING)
extern bool log_daemon;
extern unsigned long trace_flag;
extern int debug_init(void);