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