Em vez de ir ao dentry - inode - superblock - id do dispositivo.
Eu recebo o ID do dispositivo usando o getattr (..) no dentry.
Minha solução é tirada do patch Suse no assunto (depois de muita digitação no google).
Estou monitorando eventos de operações de arquivos (VFS).
Eu tenho um problema com o sistema de arquivos BTRFS, BTRFS está usando subvolumes, Todos os diretórios de hierarquia mais altos em btrfs tem o mesmo inode (256/512).
História curta:
Quando recebo um evento de operação de arquivo, recebo o caminho e, em seguida, o resolvo para inode.
Ao resolver quero dizer: dado um caminho, eu recebo seu dentry (user_path () chamada), do dentry eu puxo: dEntry- > d_inode- > i_ino
O problema é que recebo o mesmo inode para diretórios diferentes no mesmo dispositivo.
Eu acho que o BTRFS tem algum tipo de camada de abstração, que cria um número de inode "virtual" (os idênticos são virtuais) - não há como dois inodes idênticos no mesmo ID de dispositivo.
Prova de problema com o ID do dispositivo:
Código: resolução do ID do dispositivo: para um determinado caminho (/ home) - > Obtenha o dentry com user_path, depois dEntry- > d_inode- > i_sb- > s_dev OU eu executo o comando:
"grep btrfs /proc/self/mountinfo | less"
saída:
/proc/self/mountinfo return inode 29 also: 34 18 0:29 /home /home rw,noatime,nodiratime shared:19 - btrfs /dev/md127 rw,nospace_cache,subvolid=257,subvol=/home
root@nas-B9-43-AA:/# stat /home
File: '/home'
Size: 90 Blocks: 0 IO Block: 4096 directory
Device: 21h/33d Inode: 256 Links: 1
root@nas-B9-43-AA:/# mountpoint -d /home
0:33
Então eu recebo 29 e 33 como identificação de dispositivo.
Vamos chamar id de dispositivo 29 "id real" "e 33 é" id virtual ".
Existe uma maneira de obter o id real do código do kernel?
Eu estou procurando por substituição para dEntry- > d_inode- > i_sb- > s_dev .. para obter o mesmo id que recebemos do modo de usuário.
Eu estou no Debian 7
Em vez de ir ao dentry - inode - superblock - id do dispositivo.
Eu recebo o ID do dispositivo usando o getattr (..) no dentry.
Minha solução é tirada do patch Suse no assunto (depois de muita digitação no google).
Tags kernel btrfs devices linux filesystems