Commit Graph
180 Commits
Author SHA1 Message Date
Vladislav Bolkhovitin 906f4dfefb Merge t10-pi branch back
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@6192 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2015-05-01 04:21:56 +00:00
Bart Van Assche c32f79f6c1 Revert T10-PI support
The T10-PI patch (r6162) increases the time needed to run mkfs.ext4
over iSCSI from less than a second to several minutes. This is a
regression so revert the T10-PI patch until there is sufficient time
to find the root cause of this regression and to fix this regression.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@6171 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2015-03-31 09:51:24 +00:00
Vladislav Bolkhovitin a3ad8d1832 T10-PI support
Thanks to SanDisk and Emulex for supporting this work!

Tested with Emulex SDK Release 5.2.1



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@6162 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2015-03-28 05:22:47 +00:00
Vladislav Bolkhovitin cac086b68b scst: Kernel 4.0 build fix
Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@6157 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2015-03-26 04:11:21 +00:00
Vladislav Bolkhovitin fe38e4acb2 Copyrights updated
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@6146 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2015-03-19 00:01:03 +00:00
Bart Van Assche b158254766 scst_sysfs: return EINVAL on too big LUN
Signed-off-by: Sebastian Herbszt <herbszt@gmx.de>


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5961 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2015-01-09 12:23:25 +00:00
Bart Van Assche 548ea345b5 Build fixes for RHEL 6.6 kernel 2.6.32-504
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5886 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-11-26 13:38:52 +00:00
Vladislav Bolkhovitin 827e5b1461 scst, iscsi-scst: Add thread_pid attribute
For SCST devices with a short name determining which SCST command
threads serve a given LUN requires an (expensive) walk of the
process table. For SCST devices with a long name it is not possible
to determine unambiguously which command threads serve a given
LUN. Hence add a thread_pid sysfs attribute that makes it easy to
figure out which command threads serve a LUN.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5851 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-10-17 02:35:01 +00:00
Bart Van Assche a2b88e7894 Fix a kernel 3.16 checkpatch complaint about trailing semicolons
Avoid that the checkpatch tool included in Linux kernel v3.16 reports the
following warning:

    macros should not use a trailing semicolon

This patch does not change any functionality.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5724 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-08-22 07:19:55 +00:00
Vladislav Bolkhovitin 5a4571354b scst: Introduce scst_set_thr_cpu_mask()
This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5685 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-07-19 04:11:39 +00:00
Vladislav Bolkhovitin 12c4e0fe0a scst: Make access control group removal behavior configurable
SCST rejects removal of an access control group with one or more
sessions with error code -EBUSY. Make it easy to change this
behavior into forcibly closing sessions when an access control
group is removed.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5608 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-06-17 00:50:46 +00:00
Vladislav Bolkhovitin ca9b38693b scst: Switch from the cpu_*() to the cpumask_*() API
The cpus_*() functions were deprecated via patch "cpumask:
introduce new API, without changing anything" (November 2008,
commit ID 2d3854a37e8b). Hence switch from the cpus_*() API to
the cpumask_*() API.

This patch has the intended side effect of not adding the "[key]"
property to cpumask sysfs attributes that contain the default
cpumask. The current code namely reads uninitialized bits on
systems where nr_cpu_ids < NR_CPUS because cpus_equal() compares
more bits than those that were set by cpumask_copy().

Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5596 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-06-13 04:52:18 +00:00
Vladislav Bolkhovitin 3f2485ede0 scst: Add support for 64-bit LUNs
The datatype of scsi_device.lun will be changed from u32 into u64
in the near future. Update SCST accordingly. These changes have
been implemented such that these are compatible with 32-bit and
64-bit LUNs.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5587 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-06-11 20:57:03 +00:00
Vladislav Bolkhovitin e49da284e9 Prevent potential deadlock between scst_del_threads() and commands taking scst_mutex
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5532 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-05-20 23:39:57 +00:00
Vladislav Bolkhovitin f3820d5bc4 scst: Make pr path configurable
Make the path of the file in which persistent reservation information
is stored configurable via sysfs.

Signed-off-by: Bart Van Assche <bvanassche@acm.org> with some improvements and fixes



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5510 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-05-09 03:51:10 +00:00
Vladislav Bolkhovitin b7f80e0566 Avoid that the code for dumping the PR state triggers a race condition
Callers of scst_pr_dump_prs() must hold dev_pr_mutex.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5508 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-05-08 02:28:49 +00:00
Vladislav Bolkhovitin d6a46f9d73 scst_sysfs: Save the value of the 'preferred' attribute only if it has been set
The default value of the 'preferred' attribute is 0 (disabled). Hence
it is only necessary that scstadmin saves the value of that attribute
if it is not zero.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5502 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-05-02 02:56:19 +00:00
Vladislav Bolkhovitin 3430da5f9f Cleanup
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5384 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-03-26 03:18:36 +00:00
Vladislav Bolkhovitin ff2b53ff9b Black hole functionality added
Scst_mutex intentially used directly in the sysfs handler, because
comming sysfs improvements will allow that.



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5382 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-03-26 02:31:52 +00:00
Vladislav Bolkhovitin 927748befa [PATCH 2/2] scst_sysfs: Add I/O statistics per target
Although it is possible to obtain these statistics by iterating over
all sessions and by computing the sum of the per-target statistics,
make per-target statistics directly available such that these can be
retrieved easily.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5249 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-01-30 01:41:54 +00:00
Vladislav Bolkhovitin c905b530b7 [PATCH 1/2] scst_sysfs: Make it easier to add new target sysfs attributes
This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5248 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-01-30 01:40:48 +00:00
Vladislav Bolkhovitin 00851a7501 Merge of adding iSER web page and copyright updates from the iSER branch
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5241 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2014-01-28 05:17:26 +00:00
Vladislav Bolkhovitin 91a2c481a6 scst: Make it possible to inspect commands state
Signed-off-by: Bart Van Assche <bvanassche@acm.org>

with some improvements



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5108 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-11-14 04:27:31 +00:00
Bart Van Assche 0b2cc7ee29 scst_sysfs: Build fix for CONFIG_SCST_MEASURE_LATENCY
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5097 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-11-10 19:26:29 +00:00
Bart Van Assche ca37a3602a scst_sysfs: Fix build against non-debug kernel (follow-up for r5095)
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5096 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-11-10 18:06:52 +00:00
Vladislav Bolkhovitin 62fffa45dc scst_sysfs: Trigger a lockdep complaint if sysfs work
could trigger a deadlock

This patch causes lockdep to complain if sysfs work could trigger a deadlock.
As an example, for the patch below the following lockdep complaint is generated:

======================================================
[ INFO: possible circular locking dependency detected ]
3.12.0-rc7-dbg+ #5 Tainted: GF          O
-------------------------------------------------------
scst_mgmtd/7527 is trying to acquire lock:
 (scst_tgt_dev){+.+.+.}, at: [<ffffffffa01f9365>] scst_tgt_dev_sysfs_del+0x105/0x1a0 [scst]

but task is already holding lock:
 (&scst_mutex){+.+.+.}, at: [<ffffffffa01eaa46>] scst_free_session+0x56/0x2c0 [scst]

which lock already depends on the new lock.

the existing dependency chain (in reverse order) is:

-> #1 (&scst_mutex){+.+.+.}:
       [<ffffffff810be983>] lock_acquire+0x93/0x150
       [<ffffffff81619617>] mutex_lock_interruptible_nested+0x77/0x500
       [<ffffffffa01f1f9f>] scst_tgt_dev_process_thread_pid_show+0x5f/0x120 [scst]
       [<ffffffffa01f38d6>] scst_process_sysfs_works+0xe6/0x1d0 [scst]
       [<ffffffffa01f7af0>] sysfs_work_thread_fn+0x120/0x2b0 [scst]
       [<ffffffff8107482a>] kthread+0xea/0xf0
       [<ffffffff81625f6c>] ret_from_fork+0x7c/0xb0

-> #0 (scst_tgt_dev){+.+.+.}:
       [<ffffffff810bdc8a>] __lock_acquire+0x14fa/0x1a60
       [<ffffffff810be983>] lock_acquire+0x93/0x150
       [<ffffffffa01f20df>] scst_kobject_put_and_wait+0x6f/0x140 [scst]
       [<ffffffffa01f9365>] scst_tgt_dev_sysfs_del+0x105/0x1a0 [scst]
       [<ffffffffa01e9114>] scst_free_tgt_dev+0x84/0x210 [scst]
       [<ffffffffa01ea80b>] scst_sess_free_tgt_devs+0x6b/0x100 [scst]
       [<ffffffffa01eaa4e>] scst_free_session+0x5e/0x2c0 [scst]
       [<ffffffffa01ead4e>] scst_free_session_callback+0x9e/0x170 [scst]
       [<ffffffffa01d5a9a>] scst_global_mgmt_thread+0x24a/0x550 [scst]
       [<ffffffff8107482a>] kthread+0xea/0xf0
       [<ffffffff81625f6c>] ret_from_fork+0x7c/0xb0

other info that might help us debug this:

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&scst_mutex);
                               lock(scst_tgt_dev);
                               lock(&scst_mutex);
  lock(scst_tgt_dev);

 *** DEADLOCK ***

1 lock held by scst_mgmtd/7527:
 #0:  (&scst_mutex){+.+.+.}, at: [<ffffffffa01eaa46>] scst_free_session+0x56/0x2c0 [scst]

stack backtrace:
CPU: 1 PID: 7527 Comm: scst_mgmtd Tainted: GF          O 3.12.0-rc7-dbg+ #5
Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 07/31/2013
 ffffffff822efd40 ffff88007b7c1ac8 ffffffff8161464a ffffffff822efd40
 ffff88007b7c1b08 ffffffff81610d02 ffff88007b7c1b60 ffff8800692748c0
 0000000000000000 ffff880069274898 ffff880069274120 ffff8800692748c0
Call Trace:
 [<ffffffff8161464a>] dump_stack+0x4e/0x82
 [<ffffffff81610d02>] print_circular_bug+0x201/0x210
 [<ffffffff810bdc8a>] __lock_acquire+0x14fa/0x1a60
 [<ffffffff810be983>] lock_acquire+0x93/0x150
 [<ffffffffa01f9365>] ? scst_tgt_dev_sysfs_del+0x105/0x1a0 [scst]
 [<ffffffffa01f20df>] scst_kobject_put_and_wait+0x6f/0x140 [scst]
 [<ffffffffa01f9365>] ? scst_tgt_dev_sysfs_del+0x105/0x1a0 [scst]
 [<ffffffffa01f9365>] scst_tgt_dev_sysfs_del+0x105/0x1a0 [scst]
 [<ffffffffa01e9114>] scst_free_tgt_dev+0x84/0x210 [scst]
 [<ffffffffa01ea80b>] scst_sess_free_tgt_devs+0x6b/0x100 [scst]
 [<ffffffffa01eaa4e>] scst_free_session+0x5e/0x2c0 [scst]
 [<ffffffffa01ead4e>] scst_free_session_callback+0x9e/0x170 [scst]
 [<ffffffffa01d5a9a>] scst_global_mgmt_thread+0x24a/0x550 [scst]
 [<ffffffff81075850>] ? wake_up_atomic_t+0x30/0x30
 [<ffffffffa01d5850>] ? scst_register_session_non_gpl+0x20/0x20 [scst]
 [<ffffffff8107482a>] kthread+0xea/0xf0
 [<ffffffff81074740>] ? kthread_create_on_node+0x140/0x140
 [<ffffffff81625f6c>] ret_from_fork+0x7c/0xb0
 [<ffffffff81074740>] ? kthread_create_on_node+0x140/0x140



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5095 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-11-09 07:40:09 +00:00
Bart Van Assche 7eafb15fcb scst_sysfs: Follow-up for r5086
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5087 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-11-01 16:05:57 +00:00
Vladislav Bolkhovitin 2d874f7cb8 scst_sysfs: Introduce scst_kobject_put_and_wait()
This patch does not change any functionality other than the message
printed when it takes more than one second before the completion is
signalled.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@5086 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-10-31 04:44:52 +00:00
Vladislav Bolkhovitin fac009829c Cleanup and add scst_create_devt_attr() and scst_create_dev_attr() for symmetry
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4974 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-08-15 23:44:21 +00:00
Bart Van Assche 905acc6815 scst: Make scst_create_tgt_attr() return the correct error code
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4973 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-08-15 06:25:06 +00:00
Vladislav Bolkhovitin 24238e4654 Cleanup
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4971 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-08-15 05:43:27 +00:00
Vladislav Bolkhovitin f8f2580fcd From: Benjamin Black <Benjamin.Black@Emulex.Com>
There is not a way to specify an attribute that applies to only one
target or target driver. This patch provides such an interface.

Copyright (C) 2013  Emulex.  All rights reserved.

This software is provided as-is, without any express or implied warranty.  In
no event will Emulex be held liable for any damages arising from the use of
this software. Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it and redistribute it
freely. If you use this software in a product, an acknowledgment in the
product documentation would be appreciated, but is not required. This notice
may be removed from any source code distribution that includes all or any part
of the original software.



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4970 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-08-15 05:34:33 +00:00
Bart Van Assche 04b088b6c2 scst_sysfs: Fix a checkpatch complaint
Avoid that the checkpatch script included in kernel 3.10 reports the following:

WARNING: space prohibited before semicolon


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4917 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-07-22 18:31:51 +00:00
Vladislav Bolkhovitin 48fe99f3c0 Logging cleanup
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4913 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-07-06 00:45:05 +00:00
Vladislav Bolkhovitin 2093dd7561 Make it possible to forcibly close SRP and FC sessions via sysfs
That patch contains the following changes:
* Move the code for creating a "close_sess" sysfs attribute from iscsi-scst to
  the SCST core such that it becomes available for other target drivers. This
  does not change the functionality of iscsi-scst.
* Add code in ib_srpt and qla2x00t to allow a session to be forcibly closed from
  user space.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>




git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4852 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-05-18 00:52:46 +00:00
Vladislav Bolkhovitin 59c3619e85 ALUA checkpatch fix
Avoid that checkpatch complains about strict_strtoul().

Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4850 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-05-15 05:43:24 +00:00
Vladislav Bolkhovitin 12abbb8e40 Add ALUA command filtering
From Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4848 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-04-30 04:27:53 +00:00
Vladislav Bolkhovitin 1cbdfc1567 Better track latencies in us
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4819 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-03-26 21:50:25 +00:00
Vladislav Bolkhovitin 7ce3f66c1a scst_sysfs: Fix memory leaks in ALUA error paths
Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4797 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-03-15 01:24:18 +00:00
Vladislav Bolkhovitin 60cd734aef More micro-optimizations
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4786 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-03-05 01:23:48 +00:00
Bart Van Assche 1864d41919 scst_sysfs: Change one space into a tab because checkpatch complained about it
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4775 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-02-28 07:16:51 +00:00
Vladislav Bolkhovitin f5ed343084 trace_level help updated
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4773 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-02-27 02:56:32 +00:00
Vladislav Bolkhovitin 2c13f6b7e0 Logging cleanup: hide most verbose logs by default
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4772 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-02-27 02:50:14 +00:00
Vladislav Bolkhovitin 10ca1d2f20 Copyrights updated
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4767 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-02-20 02:05:29 +00:00
Vladislav Bolkhovitin d3813d3e1b Cleanups
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4765 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2013-02-20 01:20:56 +00:00
Bart Van Assche e038e81fb6 scst_sysfs: Add EAGAIN fault injection code.
To do: update scst/Makefile and scst/README with more information about the
CONFIG_SCST_DEBUG_SYSFS_EAGAIN configuration option.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4499 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2012-08-30 14:52:55 +00:00
Vladislav Bolkhovitin 7f16c1b4a2 scst: Fix race triggered by target unregistration
Without this patch it is possible that some target's sysfs attributes
can be called after release() callback returned, when, for instance,
tgt_priv is already set to NULL.



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4495 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2012-08-28 01:38:11 +00:00
Vladislav Bolkhovitin a72b347ccf scst_sysfs: Avoid NULL ptr deref. Fix online documentation
Avoid that the PRINT_ERROR() statement that complains about too many parameters
triggers a NULL pointer dereference. Also, fix the online documentation for the
LUN deletion command.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4483 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2012-08-27 21:42:33 +00:00
Vladislav Bolkhovitin 62b0629e6f scst: Spelling fix - inquery -> inquiry
Signed-off-by: Bart Van Assche <bvanassche@acm.org>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4478 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2012-08-27 20:36:54 +00:00
Vladislav Bolkhovitin cdb13cfc5f Cleanups
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@4456 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2012-08-08 18:00:51 +00:00