LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Я не про кеш а про то что например список блоков, на которых расположена открытая инода, скорее всего не перечитывается с диска каждый раз при чтении/записи этой иноды. И если, допустим, перед отвалом был удалён один файл, создан на его месте другой, и всё это не смогло записаться на диск, то при перемонтировании в rw на лету запись нового файла будет вестись совсем не туда, куда нужно (по факту то этого нового файла вообще не будет на диске, а ядро будет туда писать как будто он есть). А потом, когда кто-то заставит ядро перечитать директорию с удалённым, оно обнаружит и его там на старом месте на тех же блоках куда только что писался новый, и вообще непонятно что будет.

Что бы это всё привести в консистентное состояние, надо всю рантайм информацию об открытых файлах принудительно сверить с состоянием диска и инвалидировать те, которых на диске нет, и скорректировать те, что есть, если метаданные на диске отличаются. Просто «выбросить всё» и прочитать заново нельзя - эти данные привязаны к открытым дескрипторам.

Исправление firkax, :

Я не про кеш а про то что например список блоков, на которых расположена открытая инода, скорее всего не перечитывается с диска каждый раз при чтении/записи этой иноды. И если, допустим, перед отвалом был удалён один файл, создан на его месте другой, и всё это не смогло записаться на диск, то при перемонтировании в rw на лету запись нового файла будет вестись совсем не туда, куда нужно (по факту то этого нового файла вообще не будет на диске, а ядро будет туда писать как будто он есть). А потом, когда кто-то заставит ядро перечитать директорию с удалённым, оно обнаружит и его там на старом месте на тех же блоках куда только что писался новый, и вообще непонятно что будет.

Что бы это всё привести в консистентное состояние, надо всю рантайм информацию об открытых файлах принудительно сверить с состоянием диска и инвалидировать те, которых на диске нет, и скорректировать те, что есть, если метаданные на диске отличаются.

Исправление firkax, :

Я не про кеш а про то что например список блоков, на которых расположена открытая инода, скорее всего не перечитывается с диска каждый раз при чтении/записи этой иноды. И если, допустим, перед отвалом был удалён один файл, создан на его месте другой, и всё это не смогло записаться на диск, то при перемонтировании в rw на лету запись нового файла будет вестись совсем не туда, куда нужно (по факту то этого нового файла вообще не будет на диске, а ядро будет туда писать как будто он есть). А потом, когда кто-то заставит ядро перечитать директорию с удалённым, оно обнаружит и его там на старом месте на тех же блоках куда только что писался новый, и вообще непонятно что будет.

Исправление firkax, :

Я не про кеш а про то что например список блоков, на которых расположена открытая инода, скорее всего не перечитывается с диска каждый раз при чтении/записи этой иноды. И если, допустим, перед отвалом был удалён один файл, создан на его месте другой, и всё это не смогло записаться на диск, то при перемонтировании в rw на лету запись нового файла будет вестись совсем не туда, куда нужно. А потом, когда кто-то заставит ядро перечитать директорию с удалённым, оно обнаружит и его там на старом месте на тех же блоках куда только что писался новый, и вообще непонятно что будет.

Исходная версия firkax, :

Я не про кеш а про то что например блоки, на которых расположена открытая инода, скорее всего не перечитываются с диска каждый раз при чтении/записи этой иноды. И если, допустим, перед отвалом был удалён один файл, создан на его месте другой, и всё это не смогло записаться на диск, то при перемонтировании в rw на лету запись нового файла будет вестись совсем не туда, куда нужно. А потом, когда кто-то заставит ядро перечитать директорию с удалённым, оно обнаружит и его там на старом месте на тех же блоках куда только что писался новый, и вообще непонятно что будет.