ID:               40893
 Updated by:       [EMAIL PROTECTED]
 Reported By:      andrew at digicol dot de
-Status:           Open
+Status:           Feedback
 Bug Type:         Filesystem function related
 Operating System: Redhat EL4
 PHP Version:      4.4.5
 New Comment:

>From what I can see in df sources, it uses exactly the same logics as
PHP, so I don't really see how it's possible that you get correct values
with df, especially taking into account that the f_frsize is broken in
the same way there.

You might want to look at this RH bug:
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=146427
It says that RHEL3 U4 fixes it.


Previous Comments:
------------------------------------------------------------------------

[2007-03-22 15:38:21] andrew at digicol dot de

RedHat Linux:

strace /dot/dc/bin/php/bin/php -r 'echo
number_format(disk_total_space("/mnt")) . "\n";'
...
statfs("/mnt", {f_type="NFS_SUPER_MAGIC", f_bsize=32768,
f_blocks=9158253, f_bfree=5093458, f_bavail=5093458, f_files=0,
f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
...

SuSE Linux:

strace  php -r 'echo number_format(disk_total_space("/mnt")) . "\n";'
...
statfs("/mnt", {f_type="NFS_SUPER_MAGIC", f_bsize=32768,
f_blocks=9158253, f_bfree=5093458, f_bavail=5093458, f_files=0,
f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=32768}) = 0
...

Just in case this helps, "df -h" seems to invoke the a different system
call (statfs64, both systems are 32-bit, I am not an expert regarding
system calls). They result in the same f_bsize and fr_size values.
Unlike php, df draws the correct conclusions regarding total / free
space on both systems:

RedHat Linux:

strace df -h
...
statfs64("/mnt", 84, {f_type="NFS_SUPER_MAGIC", f_bsize=32768,
f_blocks=9158253, f_bfree=5093460, f_bavail=5093460, f_files=0,
f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
...

SuSE Linux:

strace df -h
...
statfs64("/mnt", 84, {f_type="NFS_SUPER_MAGIC", f_bsize=32768,
f_blocks=9158253, f_bfree=5093460, f_bavail=5093460, f_files=0,
f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=32768}) = 0
...

------------------------------------------------------------------------

[2007-03-22 15:21:36] [EMAIL PROTECTED]

If you're still able to reproduce it - try to trace it and figure out
which blocksize is reported by the system and which function is used -
statvfs() or statfs().

------------------------------------------------------------------------

[2007-03-22 15:17:43] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5.2-win32-latest.zip



------------------------------------------------------------------------

[2007-03-22 15:06:32] andrew at digicol dot de

PHP version seems to be irrelevant, but I was forced to choose a
version because of the bug category. I couldn't find the versions I
tried it on (4.3.9, 5.2.0) in the version drop-down.

------------------------------------------------------------------------

[2007-03-22 14:59:05] andrew at digicol dot de

Description:
------------
disk_total_space, disk_free_space reports wrong total and free space
for NFS-mounted filesystems on RedHat Linux.

This bug seems to be the related to #39520, if not the same. #39520 has
been rated as 'bogus' which I think is a mistake. Please re-consider.

The bug shows on RedHat Linux, but not SuSE Linux. This might
ultimately be considered as a RedHat bug or of the libraries used there,
but other commands (df) that use the statfs system call show the correct
file system size / free space. 

It may be argued (like in #39520) that the wrong block size parameter
is used to calculate total or free disk space. strace df -h shows RedHat
and SuSE report different f_frsize, but same f_bsize on the same NFS
share, but df reports the correct size on both.

Reproduce code:
---------------
Test: Mount a NFS share on a RedHat system and on a SuSE Linux system.

1) RedHat 2.6.9-34.EL, 32-bit
[EMAIL PROTECTED] /]# mount -t nfs 10.20.0.178:/dot/oracle_dump /mnt
[EMAIL PROTECTED] /]# df -h
Filesystem                   Size Used Avail Use% Mounted on
...
10.20.0.178:/dot/oracle_dump 280G 125G 156G 45% /mnt
[EMAIL PROTECTED] /]# /dot/dc/bin/php/bin/php -r
'echo_number_format(disk_total_space("/mnt")) . "\n";'
37,512,204,288    ==> Wrong size, seems to be real size / 8

2) SuSE Linux 9.3 32-bit
suse:/ # mount -t nfs 10.20.0.178:/dot/oracle_dump /mnt
suse:/ # df -h
Filesystem                   Size Used Avail Use% Mounted on
...
10.20.0.178:/dot/oracle_dump 280G 125G 156G 45% /mnt
suse:/ # php -r 'echo number_format(disk_total_space("/mnt")) . "\n";'
300,097,634,304    ==> Correct.


Expected result:
----------------
I would expect the result to be 300G on both systems.

Actual result:
--------------
Reports 300G on SuSE Linux, around 35G only on RedHat.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=40893&edit=1

Reply via email to