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

Reply via email to