Commit Graph

160 Commits

Author SHA1 Message Date
Bart Van Assche
ffb2fb1f11 Updated SRPT documentation.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1379 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-06 12:44:47 +00:00
Bart Van Assche
001d47266c Updated to do list.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1378 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-06 12:37:21 +00:00
Bart Van Assche
0486e8404c - Moved two constants from ib_srpt.c to ib_srpt.h.
- Changed default value of srp_max_message_size from 4096 to 2116. This
  size corresponds to the size of an SRP_CMD request message containing
  an indirect buffer list with 128 elements.
- A warning is now printed when an SRP_CMD request is received containing
  more than one CDB -- this kind of messages is not yet supported.
- Switched back from multiple ib_dma_sync_single_for_cpu() calls to a
  single call because the latter results in better performance.
- An error message is now printed if a corrupt SRP_CMD request has been
  received. Before these were ignored silently.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1377 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-12-05 10:10:53 +00:00
Bart Van Assche
7a330f2e09 Should have been included in the previous commit (r1371).
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1372 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-30 10:59:40 +00:00
Bart Van Assche
b371630185 Avoid dangling pointer dereferences by resetting ioctx->scmnd in srpt_on_free_cmd().
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1371 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-30 09:51:17 +00:00
Bart Van Assche
7cdcbc8c69 Cleanup:
- Removed a spinlock that became superfluous.
- Fixed checkpatch and sparse complaints.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1370 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-28 18:40:15 +00:00
Bart Van Assche
418e7fb3d6 - Split srpt_find_channel into two functions: srpt_find_channel() and
srpt_release_channel_by_cmid().
- Removed tracing statements from srpt_unmap_sg_to_ib_sge() because this
  function is now invoked while performing I/O.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1369 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-28 17:20:22 +00:00
Bart Van Assche
ec2e199060 Bug fixes (some introduced in the previous revision, some long-standing):
- Fixed system lockup triggered by "rmmod ib_srpt" while the SRP was writing
  data. This lockup occurred because srpt_reset_ioctx() was not resetting
  the pointers to the memory it freed, which indirectly triggered a kernel
  oops in the IB interrupt handler.
- Fixed BUG() during "rmmod ib_srpt" triggered by calling scst_rx_cmd()
  after scst_unregister_session(). This has been fixed by making sure that
  the channel state is set to RDMA_CHANNEL_DISCONNECTING before calling
  scst_unregister_session().
Performance improvements:
- Simplified cmd_wait_list manipulation code.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1368 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-28 16:36:53 +00:00
Bart Van Assche
f50ce17866 Bug fixes:
- Fixed races on srpt_ioctx::state manipulation by declaring this variable
  atomic.
- Fixed races on srpt_rdma_ch::state manipulation by declaring this variable
  atomic.
- Fixed bug in srpt_abort_scst_cmd(): SRPT_STATE_DATA_IN was not yet handled.
- Fixed races on srpt_rdma_ch::cm_id destruction. Clearly documented which
  object owns the cm_id at which time.
Performance improvements:
- Eliminated the list of active commands (active_scmnd_list) because this
  list was a duplicated of a list already kept by the SCST core.
- Switched to double-checked locking in srpt_handle_new_iu(). This saves one
  spin_lock_irqsave() and one spin_unlock_irqrestore() call in the common
  case (that is, a live channel).
- Eliminated RDMA channel state tests in SCST command handling callback
  functions -- removed the function srpt_abort_if_disconnecting().


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1367 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-28 14:03:55 +00:00
Bart Van Assche
e6f5aa8865 Changes:
- The message that sense data is truncated is now generated via the
  PRINT_WARNING() macro instead of TRACE_DBG().
- Cleaned up code for sense data truncation.
- Compiles again on RHEL and CentOS systems.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1363 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-27 17:52:47 +00:00
Bart Van Assche
1065e2d317 Log sense data truncation when debugging is enabled.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1362 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-27 12:10:59 +00:00
Bart Van Assche
10530125a5 Whitespace-only change.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1354 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-23 08:40:51 +00:00
Bart Van Assche
495257b44e - Added counter that keeps track of the number of work requests posted on
the per-channel queue pair. This counter is used to prevent that
  ib_post_send() triggers a queue overflow.
- Fixed error handling in srpt_xfer_data(): srpt_unmap_sg_to_ib_sge() is now
  called before returning an error code.
- Simplified implementation of the sysfs attribute login_info.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1353 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-22 18:42:35 +00:00
Bart Van Assche
b9402438ff Updated to do list once more.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1346 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-18 07:22:30 +00:00
Bart Van Assche
b01b495735 Updated to do list.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1345 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-17 20:03:35 +00:00
Bart Van Assche
a57d10033f Added more comments.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1344 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-17 18:01:16 +00:00
Bart Van Assche
9d65e4fe05 Removed a BUILD_BUG_ON() statement that was too restrictive.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1343 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-17 18:00:23 +00:00
Bart Van Assche
9955ef7627 Since the expression "sizeof(*sense) + sizeof(*sense) % 4" did not make
sense, replaced this expression by "sizeof(*sense)" and a BUILD_BUG_ON()
statement that verifies that sizeof(*sense) is a multiple of four. Should
the first expression have been "roundup(sizeof(*sense), 4)" ?


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1336 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-15 13:14:40 +00:00
Bart Van Assche
bcec50e065 - Small performance improvement: ib_dma_sync_for_device() and
ib_dma_sync_for_cpu() calls do now only synchronize the data areas used.
- Removed per-command mutex again because it's not a full solution with
  regard to avoiding races between module unloading / IB error handling and
  SCST's command handling.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1335 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-15 13:11:46 +00:00
Bart Van Assche
4afbe006a5 Updated test instructions.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1333 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-11 18:56:05 +00:00
Bart Van Assche
5c208ca261 - Fixed races between command abortion code and regular command processing
code.
- Fixed the bug that new commands could be queued for a channel that was
  being closed.
- Bug fix: ib_dma_unmap_sg() is now called by srpt_xmit_response() when
  aborting commands.
- Changed default value of the kernel module parameter 'thread' from zero
  to one because using thread=0 can cause the Linux and the OFED SRP
  initiator to lock up -- see also
  http://bugzilla.kernel.org/show_bug.cgi?id=14235 and
  https://bugs.openfabrics.org/show_bug.cgi?id=1745.
- Made disconnect logging more detailed -- added cm_id in output.
- Changed argument type of second argument of srpt_release_channel() from
  int to bool.
- Eliminated srpt_abort_scst_cmd's 'tell_initiator' argument because this
  argument always has the same value (i.e. true).
- Simplified abortion of commands in state SRPT_STATE_NEW. Simplified
  implementation of srpt_on_free_cmd().


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1332 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-11 18:44:05 +00:00
Bart Van Assche
a6e1b94e5b - Changed default maximum control message size from 996 to 4096 bytes.
As a result, the maximum number of sg list elements that an initiator
  can pass in one message increased from 58 to 251.
- Added kernel module parameter srp_max_message_size, which allows to
  specify the maximum size of SRP control messages.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1328 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-07 11:56:51 +00:00
Bart Van Assche
cdbd65daeb Removed trailing whitespace.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1313 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-03 07:46:39 +00:00
Bart Van Assche
d5cd0c893a - Fixed uninitialized variable read that was introduced in r1307.
- Introduced new kernel module parameter srp_max_rdma_size. This parameter
  allows to configure the maximum size of SRP RDMA transfers.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1312 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-02 19:45:45 +00:00
Bart Van Assche
b9f64a7c61 - Fixed a bug introduced in the previous commit.
- Added more debug tracing related to command abortion.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1308 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-01 20:11:30 +00:00
Bart Van Assche
c9f49128bb Fixed the following issues found by Vladislav Bolkhovitin via source reading:
- Inserted tests such that ib_dma_unmap_sg() is never called with a NULL
  second argument.
- Fixed race conditions triggered by ioctx->state manipulations.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1307 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-11-01 17:01:08 +00:00
Bart Van Assche
b9a0eb9386 Updates for the OFED 1.5 + kernel 2.6.30 combination.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1306 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-10-31 13:06:39 +00:00
Bart Van Assche
ec836491e4 Should have been included in the previous commit.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1303 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-10-29 19:42:53 +00:00
Bart Van Assche
eb46362a7b Added more debug code.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1299 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-10-29 18:56:23 +00:00
Bart Van Assche
debe7f1152 Added and commented out compiler flags that make it easier to locate the statement that triggered a kernel oops.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1298 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-10-29 18:42:53 +00:00
Bart Van Assche
e83ed53e9b Updated for the 2.6.30 kernel + OFED combination.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1297 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-10-29 18:41:52 +00:00
Bart Van Assche
8ec85a34a4 Added to repository.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1295 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-10-29 18:41:08 +00:00
Bart Van Assche
1d0b2a972d Simplified OFED installation instructions.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1294 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-10-29 18:40:37 +00:00
Bart Van Assche
773146af26 Added and commented out -DCONFIG_SCST_TRACING.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1270 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-10-25 09:39:55 +00:00
Bart Van Assche
87be4a7213 More #undef CONFIG_SCST_PROC fixes.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1269 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-10-25 09:39:27 +00:00
Bart Van Assche
049293249b Made srpt compilation more silent.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1264 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-10-23 18:41:05 +00:00
Bart Van Assche
942aef8387 Compiles now with CONFIG_SCST_PROC undefined.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1255 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-10-23 10:56:44 +00:00
Bart Van Assche
77af82d2c3 Compiles again on RHEL 5 / CentOS 5 with CONFIG_SCST_DEBUG enabled.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1176 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-10-04 08:31:04 +00:00
Bart Van Assche
994b61e39b Added more error injection code.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1154 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-09-26 15:51:58 +00:00
Bart Van Assche
916dee314f Another bug fix for aborting SCST commands: commands in state
SRPT_STATE_NEW are now aborted properly too. Until now aborting an
SCST command that had state SRPT_STATE_NEW triggered a sBUG_ON()
statement in scst_tgt_cmd_done().


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1153 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-09-26 12:56:20 +00:00
Bart Van Assche
0ff548a598 Fixed a typo in the documentation: replaced ipsrpdm by ibsrpdm.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1140 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-09-25 08:00:00 +00:00
Bart Van Assche
267f3b1f79 Only report that a command already got aborted when SCSI management
debugging has been enabled.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1139 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-09-24 18:42:22 +00:00
Bart Van Assche
2a01729d4d Builds again when CONFIG_SCST_DEBUG has not been defined.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1129 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-09-23 06:50:49 +00:00
Bart Van Assche
18fcb11be3 Added error injection code: the kernel parameter processing_delay_in_us
allows to control by how much the srpt_completion() function (which runs
in interrupt context) will be delayed.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1128 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-09-22 19:18:45 +00:00
Bart Van Assche
9adc308a2a Since it is normal that the SCST core calls srpt_xmit_response() for
a command that has already been aborted, changed the message that
reports this from an error message to an informational message.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1123 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-09-21 18:43:15 +00:00
Bart Van Assche
d9abf60c23 Fixed typo in an error message.
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1119 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-09-19 19:01:30 +00:00
Bart Van Assche
1afa718390 Ported the OFED 1.5 commit http://www.openfabrics.org/git/?p=ofed_1_5/linux-2.6.git;a=commitdiff;h=ce223537aeb05c9e4c36eab2b509fb98a33ba359:
replaced dma_*map* calls by ib_dma_*map* calls. Added the conversion
of dma_sync_single_for_device() to ib_dma_sync_single_for_device().
This only changes the behavior of SRPT for those IB interfaces whose
driver implements the ib_dma_mapping_ops operations.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1118 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-09-19 18:22:22 +00:00
Bart Van Assche
9381444e7d Applied a modified version of OFED commit http://www.openfabrics.org/git/?p=ofed_1_5/linux-2.6.git;a=commitdiff;h=6b20b3fb9b51722f382d6bfe333ec5bb5c216e9f.
The OFED commit made a.o. ib_srpt.c compile on 2.6.30 and later kernels.
Although the SCST ib_srpt.c code already compiles on a 2.6.30 kernel, this
commit has been ported to SCST because the source code of the OFED
implementation is cleaner. This commit does not change any functionality
of SCST's SRPT.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1117 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-09-19 16:40:01 +00:00
Bart Van Assche
f048bf9956 Changed a PRINT_ERROR() statement into a PRINT_INFO() statement because
this statement is triggered during the normal logout / relogin procedure.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1116 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-09-18 19:03:24 +00:00
Bart Van Assche
0a7c9e1f67 Potential fix for the following kernel bug report:
------------[ cut here ]------------
 ib_srpt: srpt_xmit_response: tag= 26 channel in bad state 2
 scst: ***ERROR***: Target driver ib_srpt xmit_response() returned fatal error
 ib_srpt: srpt_xmit_response: tag= 38 channel in bad state 2
 scst: ***ERROR***: Target driver ib_srpt xmit_response() returned fatal error
 ib_srpt: srpt_xmit_response: tag= 27 channel in bad state 2
<repeated many times>
 kernel BUG at /root/scst/scst/src/scst_targ.c:3089!
 invalid opcode: 0000 [1] SMP
 CPU 0
...
 RIP: 0010:[<ffffffffa04759f6>]  [<ffffffffa04759f6>] scst_tgt_cmd_done+0x26/0x30 [scst]
 RSP: 0018:ffff88039ad27b50  EFLAGS: 00010297
 RAX: 0000000000000200 RBX: ffff8803ad9c68f8 RCX: 0000000000000000
 RDX: 00000000ffffffff RSI: 0000000000000000 RDI: ffff8803ad9c68f8
 RBP: ffff88039ad27b50 R08: 0000000000000000 R09: 0000000000000000
 R10: ffff88039ad277c0 R11: ffff88041ad278cf R12: ffff8803c2972180
 R13: ffff88039ada0000 R14: 0000000000000001 R15: ffff8803fb00c2b0
 FS:  0000000000000000(0000) GS:ffffffff807dd000(0000) knlGS:0000000000000000
 CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
 CR2: 00007f9281e64000 CR3: 0000000000201000 CR4: 00000000000006e0
 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
 Process ib_cm/0 (pid: 8299, threadinfo ffff88039ad26000, task ffff88039ad40000)
 Stack:  ffff88039ad27b80 ffffffffa04c0c47 ffff88039a8db900 ffff8803c2972180
  ffff8803fb00c240 ffff8803fb00c284 ffff88039ad27bc0 ffffffffa04c0d93
  ffff88042a4959c0 ffff88042a9d7800 ffff88042544da00 ffff88042a9d7898
 Call Trace:
  [<ffffffffa04c0c47>] srpt_abort_scst_cmd+0xd7/0x160 [ib_srpt]
  [<ffffffffa04c0d93>] srpt_release_channel+0xc3/0x190 [ib_srpt]
  [<ffffffffa04c0e82>] srpt_find_and_release_channel+0x22/0x30 [ib_srpt]
  [<ffffffffa04c227d>] srpt_cm_handler+0x6d/0xbb8 [ib_srpt]
  [<ffffffff80247526>] ? try_to_wake_up+0x126/0x2f0
  [<ffffffff802476fd>] ? default_wake_function+0xd/0x10
  [<ffffffff80267106>] ?  autoremove_wake_function+0x16/0x40
  [<ffffffff8023c99a>] ? __wake_up_common+0x5a/0x90
  [<ffffffff8023dece>] ? __wake_up+0x4e/0x70
  [<ffffffff80263271>] ? __queue_work+0x41/0x50
  [<ffffffff8026331d>] ? queue_work_on+0x4d/0x60
  [<ffffffff8026344f>] ? queue_work+0x1f/0x30
  [<ffffffff8026350d>] ? queue_delayed_work+0x2d/0x40
  [<ffffffffa0373255>] ? wait_for_response+0xd5/0xe0 [ib_mad]
  [<ffffffffa04b4e07>] cm_process_work+0x27/0x130 [ib_cm]
  [<ffffffffa04b5cf1>] cm_drep_handler+0xf1/0x180 [ib_cm]
  [<ffffffffa04b7790>] ? cm_work_handler+0x0/0x1b8 [ib_cm]
  [<ffffffffa04b7895>] cm_work_handler+0x105/0x1b8 [ib_cm]
  [<ffffffffa04b7790>] ? cm_work_handler+0x0/0x1b8 [ib_cm]
  [<ffffffff802628c2>] run_workqueue+0xc2/0x1a0
  [<ffffffff80262bcf>] worker_thread+0xaf/0x130
  [<ffffffff802670f0>] ? autoremove_wake_function+0x0/0x40
  [<ffffffff80262b20>] ? worker_thread+0x0/0x130
  [<ffffffff80266cbe>] kthread+0x4e/0x90
  [<ffffffff80213c99>] child_rip+0xa/0x11
  [<ffffffff80266c70>] ? kthread+0x0/0x90
  [<ffffffff80213c8f>] ? child_rip+0x0/0x11
 Code: 00 00 00 00 00 55 48 89 e5 e8 a7 cc d9 df 83 7f 28 78 75 17 80 67 2d f7 c7 47 28 0d 00 00 00 ba 01 00 00 00 e8 8c fc ff ff c9 c3 <0f> 0b eb fe 66 0f 1f 44 00 00 55 48 89 e5 41 54 53 e8 74 cc d9
 RIP  [<ffffffffa04759f6>] scst_tgt_cmd_done+0x26/0x30 [scst]
  RSP <ffff88039ad27b50>
 ---[ end trace a7f20725e9471e16 ]---


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1115 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2009-09-18 18:58:55 +00:00