XFS nerozlišuje medzi súbormi a adresármi v dirent
Dnes som sa pár hodín pokúšal rozbehať nastavenie časovej zóny pomocou connman. Po rozobratí zdrojového kódu connman som zistil prečo detekcia časovej zóny nefunguje. XFS pri použití volania readdir vôbec nerozlišuje medzi adresármi a súbormi.
Súborový systém xfs vracia pri volaní readdir položku d_type
vždy DT_UNKNOWN
. V takýchto prípadoch sa musí pre zistenie typu súboru hrabnúť priamo na inode cez fstat, čo ale connman nerobí.
Na ukážku správania xfs prikladám zdroják malého testovacieho program:
#include <sys/stat.h> #include <dirent.h> #include <stdlib.h> #include <stdio.h> int main(int argc, char *argv[]) { DIR *dir = opendir(argv[1]); struct dirent *d; while ((d = readdir(dir))) { printf("%s ", d->d_name); switch (d->d_type) { case DT_UNKNOWN: printf("UNKNOWN"); break; case DT_FIFO: printf("FIFO"); break; case DT_CHR: printf("CHR"); break; case DT_DIR: printf("DIR"); break; case DT_BLK: printf("BLK"); break; case DT_REG: printf("REG"); break; case DT_LNK: printf("LNK"); break; case DT_SOCK: printf("SOCK"); break; case DT_WHT: printf("WHT"); break; } printf("\n"); } return 0; }
Spustiť sa dá cez ./program /cesta/k/adresáru
.
Pre môj testovací adresár:
ls -lh celkom 0 drwxr-xr-x 2 mirec mirec 6 okt 26 09:48 adresar prw-r--r-- 1 mirec mirec 0 okt 26 09:48 fifo -rw-r--r-- 1 mirec mirec 0 okt 26 09:48 subor
Vyzerá výpis nasledovne:
./a.out /home/mirec/test . DIR .. DIR adresar UNKNOWN subor UNKNOWN fifo UNKNOWN
Takže v prípade, že by ste niekedy na nejakom embedded zariadení používali connman odporúčam veľkým oblúkom sa vyhnúť xfs.
Pre pridávanie komentárov sa musíte prihlásiť.
A je to korektné správanie?
Ako sa to tak vezme. Ak jednoducho atribút nie je v inode adresára tak je to správanie OK (je síce potrebné ručne hrabnúť na súbor cez fstat, ale to by musel inak robiť aj sám FS). Je to síce nepríjemné, rozbíja to softvér, ale je to skôr chyba v softvéri (v tomto prípade connman).
Podľa toho čo som pozeral, tak sa takto správa kvôli výkonnosti systému, je zaujímavé že ostatné FS vracajú korektné informácie. Ešte by bolo zaujímavé zistiť či Btrfs nemá rovnaký problém, pretože mi prídu v určitých parametroch príbuzné.