On 3/16/21 11:51 AM, John Reiser wrote: > On 3/16/21, David Howells wrote: >> John Reiser <jrei...@bitwagon.com> wrote: >> >>> See the manual page "man 2 getdents". >> >> Um, which bit? I don't see anything obvious to that end. > > On that manual page: > ===== > The system call getdents() reads several linux_dirent structures from the > directory > referred to by the open file descriptor fd into the buffer pointed to by dirp. > [snip]] > On success, the number of bytes read is returned.
But the original question was about the st_size returned stat, which is not calling getdents. Two different numbers, which mean 2 different things. > ===== > > So the return value is related to the size of the directory; the sum of the > values > returned before End-Of-File should be quite close to the .st_size of the > directory. Again, that's not at all correct. Counter-example on ext4: # stat -c %s dir 2547712 # ls -a1 dir . .. file # strace -v -egetdents ls dir getdents(3, [{d_ino=524289, d_off=4294967296, d_reclen=24, d_name=".", d_type=DT_DIR}, {d_ino=2, d_off=3358761300848251151, d_reclen=24, d_name="..", d_type=DT_DIR}, {d_ino=534290, d_off=9223372036854775807, d_reclen=24, d_name="file", d_type=DT_REG}], 32768) = 72 72 is not anywhere close to 2547712 > If a program is walking through the directory, reading all the entries via > getdents64(), > then .st_size of the directory is the only thing known in advance about the > total size. But it tells you nothing about how much is likely to be returned by getdents. You should not use st_size to infer anything about the amount of data which will be returned by getdents. POSIX does not define the meaning of st_size for directories, and different filesystems can do wildly different things. As Steve mentioned, st_blksize is your best hint for this purpose. -Eric _______________________________________________ devel mailing list -- devel@lists.fedoraproject.org To unsubscribe send an email to devel-le...@lists.fedoraproject.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org Do not reply to spam on the list, report it: https://pagure.io/fedora-infrastructure