[Devel] unlock range

Alexander Morozov amorozov на etersoft.ru
Пн Сен 26 10:02:32 MSD 2011


> Я сейчас работаю над механизмом кэширования блокировок в cifs и заодно
> переписываю код. Сейчас код unlock в cifs работает следующим образом:
> берутся все блокировки, которые входят в заданный диапазон и снимаются
> по очереди. Это неправильно с точки зрения семантики работы жёстких
> блокировок в стиле Windows, где unlock должен найти именно указанную в
> запросе блокировку и снять только её.
> 
> В данном месте модуль пытается сэмулировать posix семантику, правда
> только для одного дескриптора (согласно posix, следует снимать сразу
> блокировки со всех дескрипторов). В итоге получается какая-то
> неправильная эмуляция. К тому же насколько я помню, мы тестировали
> WINE, когда блокировки снимаются со всех дескрипторов и получилось не
> очень.
> 
> Соответственно, вопрос в следующем: использует ли WINE возможно задать
> большую область и сразу снять несколько блокировок или нет?

Если работающая под WINE программа поставила две перекрывающиеся блокировки и 
снимает одну из них, то WINE не снимает всю блокировку, а только ту её часть, 
которая не перекрывается со второй блокировкой. Т.е., например, если у нас 
стоят блокировки [0,10] и [5,15], то при снятии программой блокировки [5,15] 
WINE снимает [11,15].
Такого, чтобы при запросе на разблокирование [0,10] и [5,15] сразу снималась 
блокировка с [0,15] нет, это получаются два отдельных вызова, которые 
обрабатываются последовательно.


Подробная информация о списке рассылки Devel