It seems that readdir()/getdents() fill d_type from the underlying filesystem, not respecting bind mounts of non-directories: $ touch mount_point $ sudo mount --bind /dev/null mount_point $ find -name mount_point -type c $ find -name mount_point -type f ./mount_point (Requires a fairly recent GNU findutils to reproduce, older ones always call stat().) I've seen similar discussions about d_ino being for the underlying file, not the mount point, which people have said is technically a POSIX violation but also unlikely to be fixed. Is the same true of d_type? And is there some workaround a program could use to get the actual type without the overhead of a whole stat() call? For example, a way to tell whether a directory entry is a mount point? For reference, the relevant findutils bug is https://savannah.gnu.org/bugs/?54913. (Please keep me cc'd, I'm not subscribed to lkml or fsdevel. Thanks!) -- Tavian Barnes