LINUX.ORG.RU

отменить кеширование записи и чтения данных из файла в примонтированом разделe файловой сисиемы

 


0

3

суть проблемы. сделал девайс который через usb прикидывается usb mass storage, система его автомонтирует и все бы нечего.. но. девай является не хранилищем данных, а массивом датчиком и регистров управления интерфейс которых реализован как файлы. запись еще как то работает, а вот чтение нет, при обращении к файлу на чтение происходит однократное чтение из девайса, далее фс решает что если она не писала в файл то и читать с девайса - трата времени, и берет данные из кеша. пробывал при монтировании передавать флаги , ничего не помогает. есть вариан нагородить через fuse, но мне кажется должен быть в ядре способ объяснить как работать с разделом.

Ответ на: комментарий от anonymous

спасибо, это наверно както заработает. но мне нужно именно изменить политку для раздела - открывать файлы будут процессы которые я не контролинрую, например например текстовый редактор, нужно чтобы работало как /sys, fuse позволяет это сделать но это деать тоже самый функционал только без кеширования, вобщем странненько, должен быть способ..

klen_s ()

прикидывается usb mass storage

далее фс решает что если она не писала в файл то и читать с девайса - трата времени, и берет данные из кеша.

Вот и обновляй время модификации эмулируемого файла на устройстве, когда обновились данные с датчика.

gag ★★★★★ ()
Последнее исправление: gag (всего исправлений: 1)
Ответ на: комментарий от gag

Вот и обновляй время модификации эмулируемого файла на устройстве, когда обновились данные с датчика.

как? чтобы fs узнала обновление даты она должна прочитать атрибуты файла из девайса, но она это не будет делать потому что думает чтто она едиственная кто может что то отмодифицировать, так не подет, единственный способ - изменить поведение fs. HID мне не нужен, ни к чему он не приспособлен кроме мышек джойстиков и кнопочек.

klen_s ()
Ответ на: комментарий от anonymous

man mount

sync

All I/O to the filesystem should be done synchronously. In the case of media with a limited number of write cycles (e.g. some flash drives), sync may cause life-cycle shortening.

UPD: Хотя, может, из-за кеша эти I/O не будут сгенерированы вообще.

gag ★★★★★ ()
Последнее исправление: gag (всего исправлений: 1)
Ответ на: комментарий от klen_s

Нет проблемы в драйвере, он следует стандарту.

FAT не может монтироваться однoвременно несколькими серверами. Если ФС примонтирована, но ваше устройство меняет данные на лету — оно не соответствует ни FAT, ни USB Mass Storage. Ваше устройство не должно трогать содержимое ФС, когда она примонтирована хостом.

То, чего вы хотите — невозможно. Маскимум, что можно сделать — это установить периодичность сброса кэша. Вы и сам нагуглите, как это делается.

i586 ()

суть проблемы. сделал девайс который через usb прикидывается usb mass storage

Файловая система ставит в соответствие файлам их смещения относительно начала устройства.

/mnt/sensor_file лежит по смещению sensor_offset в /dev/you_device.

Напиши то же самое в виде драйвера на fuse, который при записи/чтении файла будет писать/читать по смещениям, а на заголовки и метаданные fat32 забей.

ttnl ★★★★★ ()

Не нужно «есть с ножа», но если деваться некуда, то примерно так:

  • обязательно open() с O_DIRECT (ну и с аналогичными флажками в mustdie);
  • в девайте эмулируйте файл максимального размера и при чтении выдавайте инфу блоками подходящего фиксированного размера по степени 2 игнорируя старшие разряды смещения.
  • соответственно приложение должно «просто читать» файл этими блоками последовательно и переходить к началу когда упрется в «конец» псевдо-файла.

Эта схемa будет работать везде.

Но чтобы работало из «любого текстового редактора» придется сделать свою либу, которая отследит обращение к «вашему» файлу и все сделает правильно, а потом посредством LD_PRELOAD подменять read(), readv() и mmap().

Deleted ()