Qual é o significado da seguinte declaração da página de manual do fsync
Chamar fsync() não garante necessariamente que a entrada no diretório que contém o arquivo também alcançou o disco. Para isso, também é necessário um fsync() explícito em um descritor de arquivo para o diretório.
Isso significa que o fsync não atualizará os metadados do diretório quando eu chamar o fsync em um arquivo?
Outra citação para o mesmo problema é (do Livro de programação do sistema Linux de Robert Love):
Nenhuma das funções garante que quaisquer entradas de diretório atualizadas que contenham o arquivo sejam sincronizadas com o disco. Isso implica que, se o link de um arquivo foi atualizado recentemente, os dados do arquivo podem alcançar com êxito o disco, mas não a entrada do diretório associado, tornando o arquivo inacessível.
Por que os dados de um arquivo precisam alcançar um link de diretório? Corrija-me se estiver errado, mas os diretórios contêm apenas o nome do arquivo e o número do inode desse arquivo. Os dados reais estão no arquivo. Qual é o significado de "os dados alcançarão o arquivo, mas não o link do diretório"?
Isso significa:
a entrada de diretório associada pode não alcançar o disco com sucesso
Isso pode ser uma preocupação ao criar um novo arquivo.
Eu ignoraria a generalização para "link de um arquivo", a menos que você saiba que links físicos estão sendo criados.
Sim. Ou melhor, você não pode confiar nisso. (É possível que algumas implementações sempre o atualizem antes do retorno do fsync.)