statvfs() weirdness on alpha (RH-7.2 and CentOS-4.2)
Sergey Tikhonov
tsv at solvo.ru
Mon Nov 14 06:43:32 UTC 2005
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. :(
Regards,
--
Sergey Tikhonov
Solvo Ltd.
tsv at solvo.ru
More information about the axp-list
mailing list