Как fstrim не страдает от условий гонки? - PullRequest
0 голосов
/ 12 января 2020

Насколько я понимаю, утилита fstrim в GNU / Linux - это просто утилита, а не модуль ядра; как избежать гонок между обнаружением того, что данный блок не используется и введением команды ioctl (2) FITRIM для его TRIM?

1 Ответ

1 голос
/ 12 января 2020

На это легко ответить, прочитав источник.

Утилита fstrim не имеет никакого отношения к выяснению, какие блоки используются или не используются, и не имеет кода для выполнения каких-либо действий. в своем роде. Он просто вызывает FITRIM ioctl для всего диапазона устройства, указанного в параметрах -o и -l, или по умолчанию для всего устройства (start = 0, len = ULLONG_MAX). Понятно, что ядро ​​должно обрезать только неиспользуемые блоки в этом диапазоне, и ядро ​​должно выяснить, какие блоки это блокируют, при необходимости. Как вы говорите, было бы почти невозможно сделать это из пространства пользователя, не рискуя гонками или тупиками.

Здесь - код ядра, который обрабатывает усечение для ext4. Я не эксперт по fs-коду, но кажется очевидным, что происходит какая-то блокировка.

...