I suspect that df -P does not give you real OS block size. In below example df -P gives you count of 512 bytes blocks , but df -k gives you output in 1024 bytes blocks on the same system.
So , what is OS block size in this case?
% df -P
Filesystem 512-blocks Used Available Capacity Mounted on
/dev/hd4 262144 43224 218920 17% /
/dev/hd2 4194304 3789888 404416 91% /usr
Below is an abstract from man pages for du command:
The block count includes indirect blocks of each file. Block count is calculated in 512-byte units independent of the cluster size used by the system .
Specifying the -k flag calculates the block count in 1024-byte units
Another words du command can not be used to determine OS block size.
One, who thinks that the other one who thinks that know and does not know, does not know either!