[ofa-general] [PATCH][REPOST] drivers/infiniband/ulp/srpt: Fixtarget data corruption

Vu Pham vu at mellanox.com
Mon Jan 14 10:54:32 PST 2008


Vladislav Bolkhovitin wrote:
> Robert Pearson wrote:
>> Vlad,
>>
>> I think we agree. But, when we tried the experiment of running without 
>> the
>> local memory allocator scst hung when we did large IO operations. 
>> Probably
>> something simple.
> 
> Why do you think it scst hung, not something else? Do you have evidences 
> for that? ;) According to Vu, you can't simply switch to SCST memory 
> allocator, because IB hardware has very limited number of available SG 
> entries in commands (few tens), so for large request, where there are 
> too many SG entries, they should be "iomapped" using the corresponding 
> IB facility.


No - you can easily switch to SCST memory by set srpt's 
module parameter mem_element=0. There is limited number of 
sg entries per IB work request (29); however, the current 
srpt can submit several IB work requests to cover large sg 
entries IO.

-vu

> 
>> We can look harder. Next step for us is to sync up with Vu
>> on a few other changes in the works.
>>
>> Bob Pearson
>>
>> -----Original Message-----
>> From: general-bounces at lists.openfabrics.org
>> [mailto:general-bounces at lists.openfabrics.org] On Behalf Of Vladislav
>> Bolkhovitin
>> Sent: Saturday, January 12, 2008 3:51 AM
>> To: davem at systemfabricworks.com
>> Cc: vu at mellanox.com; general at lists.openfabrics.org
>> Subject: Re: [ofa-general] [PATCH][REPOST] drivers/infiniband/ulp/srpt:
>> Fixtarget data corruption
>>
>> davem at systemfabricworks.com wrote:
>>
>>> This is an updated version of [PATCH] drivers/infiniband/ulp/srpt: Fix
>>> target data corruption
>>>
>>> It was pointed out to me that the code to round up to a power of 2 was
>>> not as clean as it should be, plus I extracted two unrelated patches and
>>> submitted them separately.
>>>
>>> =====================================================================
>>>
>>>   Change the local buffer allocator to use a spin-lock protected linked
>>>   list instead of an array of atomic_t used/free variables.  The 
>>> atomic_t
>>>   code was open to a multi-thread race between test and set.  This has
>>>   been observed with the result that the same data buffer was used for
>>>   more than one SCSI operation, either writing the wrong data to the 
>>> disk
>>>   or sending the wrong data to the initiator.
>>
>>
>> I, as a main SCST developer and implementor, would suggest to 
>> completely remove internal memory management from the SRPT driver and 
>> use SCST memory management instead. It will provide the following 
>> advantages:
>>
>> 1. Simplify SRPT driver and completely remove such kind of bugs.
>>
>> 2. Make SRPT target driver compatible with scst_user module, i.e. will 
>> allow to use SRPT target driver with backstorage devices, implemented 
>> in user space. Usual example of such devices is a VTL (Virtual Tape 
>> Library).
>>
>> 3. (Most likely, since I'm not too familiar with SRPT drivers 
>> internals, but for me it looks like so) Allow SRPT driver to reliably 
>> work with many outstanding commands with big data transfer sizes (>=1MB)
>>
>> 4. Might improve performance by caching and reusing already allocated 
>> and "iomaped" to Infiniband hardware SG vectors. Vu knows the details, 
>> we discussed them with him. It will require some minor SCST 
>> modifications (extending its interface with target drivers), but I'm 
>> willing to make them if somebody ask for it.
>>
>> Vlad
>> _______________________________________________
>> general mailing list
>> general at lists.openfabrics.org
>> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
>>
>> To unsubscribe, please visit
>> http://openib.org/mailman/listinfo/openib-general
>>
>>
> 




More information about the general mailing list