Sim. O código relevante está em sb_prepare_remount_readonly
(como no Linux 4.0, o código pode ser organizado de forma diferente em outras versões). A lógica é:
- Para cada instância do monte:
- Se essa instância não for somente leitura:
- Impede que qualquer novo gravador se registre (
MNT_WRITE_HOLD
). - Se houver gravadores registrados, defina o sinalizador de erro (return
EBUSY
).
- Impede que qualquer novo gravador se registre (
- Se essa instância não for somente leitura:
- Se houver arquivos removidos (inode count = 0), mas ainda não excluídos (ainda presentes porque o arquivo está aberto), defina o sinalizador de erro.
- Se o sinalizador de erro não estiver definido, marque a partição como somente leitura.
- Para cada instância do monte:
- Pare de impedir que os escritores se registrem.
Gravadores registrados são arquivos abertos para gravação, bem como operações contínuas que gravam metadados ( mkdir
, chmod
, etc.). Confira as chamadas para mnt_want_write
que é onde a contagem de escritores registrados é incrementada.
O design do sistema garante que uma remontagem somente leitura seja uma barreira de registro de gravação: se for bem-sucedida, não haverá gravador registrado, em particular, não pode haver nenhum arquivo aberto para gravação no momento da operação de remontagem . Após a remontagem, nenhum arquivo pode ser aberto para gravação, portanto, ainda não há arquivos abertos para gravação.