[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