statvfs() weirdness on alpha (RH-7.2 and CentOS-4.2)

Sergey Tikhonov tsv at solvo.ru
Mon Nov 14 06:48:51 UTC 2005


Sergey Tikhonov wrote:

> Sergey Tikhonov wrote:
>
>> Bert de Bruijn wrote:
>>
>>>
>>> Somehow I get very strange readings from statvfs() on Alpha.
>>>
>>> On Intel
>>> $ python
>>>
>>>>>> import os
>>>>>> print os.statvfs('/')
>>>>>
>>>>>
>>>>>
>>> (4096, 4096, 1033182L, 234938L, 182454L, 525888L, 471255L, 471255L, 
>>> 0, 255)
>>>
>>> is correct. "df" with the same blocksize shows the same values
>>> $ df -B 4096 /
>>> Filesystem           4K-blocks      Used Available Use% Mounted on
>>> /dev/hdd1              1033182    798244    182454  82% /
>>>
>>> But on Alpha
>>> $ python
>>>
>>>>>> import os
>>>>>> print os.statvfs('/')
>>>>>
>>>>>
>>>>>
>>> (1024, 1024, 738193209530565, 551989197028090, 469096328178340, 0, 
>>> 0, 255, 0, 0)
>>>
>>> that can't be right, the whole / partition is only 500 MB:
>>> $ df -B 1024 /
>>> Filesystem           1K-blocks      Used Available Use% Mounted on
>>> /dev/sda2               497861    325987    146170  70% /
>>>
>>> 469096328178340 is not an integer multiple of 146170.
>>>
>>>
>>> BTW, this is not a python problem, perl Filesys::Statvfs has the 
>>> same issues.
>>>
>>>
>>> Can anybody shed a light on this ?
>>
>>
>>
>> It seems that it is a problem with python and perl since pure C call 
>> to glibc function returns correct values.
>> I'll check out since this doen't work in AC2 too.
>
>
> Got it. The problem is in glibc with statvfs/statvfs64 functions on 
> alpha (X86_64 doesn't have such problems).
> As far as I understood statvfs64 is mapped to statvfs function on 64 
> bit machines, but "struct statvfs" has 32 bits long
> fields on alpha if compiled without any specific 64bits macros and the 
> same fields become 64 bits long if compiled with
> -D_LARGEILE64_SOURCE -D_FILE_OFFSET_BITS=64. The problem is that glibc 
> is compiled with 32 bits long fields,
> but packages like python,perl,gnome uses the macros defined above 
> during building. I might be wrong in my findings, but after
> recompilation python and gnome packages started to work.
>
> For now I changed 64-bits fields in /usr/inclide/bits/typesizes.h 
> (__FSBLKCNT64_T_TYPE and __FSFILECNT64_T_TYPE) from
> from __S64_TYPE/__U64_TYPE to __S32_TYPE/__S64_TYPE. Making evething 
> 64-bits would require to rebuild whole AC2 tree. :(

Sorry: __S64_TYPE/__U64_TYPE to __S32_TYPE/__U32_TYPE

>
> Regards,
>


-- 
Sergey Tikhonov
Solvo Ltd.
tsv at solvo.ru




More information about the axp-list mailing list