2016-04-15 10 views
6

Я пишу драйвер устройства блока Linux, который получает запросы через функцию, зарегистрированную с помощью blk_init_queue().Заказ заказа драйвера блока блока Linux - RaW?

Мое устройство переупорядочивает запросы и как таковое, чтобы избежать конфликтов после чтения, необходимо дождаться завершения write(lba x) перед выдачей read(lba x).

Моего вопрос: держать ли блок слой Linux дорожки Сырцовых конфликтов и она будет не вопрос read(lba x) пока она получила завершение запроса (через __blk_end_request_all(req r)) для предыдущего write(lba x), или я должен сделать это в моем Водитель?

ответ

0

Согласно приведенной ниже статье, драйверы блочных устройств Linux теперь могут произвольно переупорядочивать запросы, уровень файловой системы отвечает за предотвращение опасностей и внедрение барьеров. https://lwn.net/Articles/400541/

Исключение составляют запросы REQ_FLUSH и REQ_FUA для устройств, реализующих кэширование с обратной записью. В случае, если эти флаги установлены, некоторые требования к порядку должны быть приведены в действие драйвером устройства blk. https://www.kernel.org/doc/Documentation/block/writeback_cache_control.txt

В частности, не существуют следующие требования заказа:

  • Нет запись данных, REQ_FLUSH - не имеет никакого заказ ограничения кроме требования присущего FLUSH (ранее завершенных Пишет должен быть на средства массовой информации при завершении FLUSH).

  • Запись данных, REQ_FLUSH - FLUSH должен быть заполнен перед записью данных . то есть. данные записи не должны быть записаны на носитель до того, как все предыдущие записи находятся на носителе.

  • Запись данных, REQ_FUA - Запись должна быть выполнена до того, как FLUSH выйдет - т.е. данные записи должны быть на диске вместе с ранее выполненными .

  • Запись данных, REQ_FLUSH | REQ_FUA - Запись данных не должна записываться в носитель до того, как все предыдущие записи находятся на носителе & & данные записи должны быть на носителе при биообработке. Обычно это , упорядоченный как FLUSH write FLUSH.

[из Linux-fsdevel: http://www.spinics.net/lists/linux-fsdevel/msg45616.html] рассылки