Why is there a mismatch between df and du outputs?
One of the things that GFS has to address is a file that has been unlinked, but not deallocated, when the system dies. It does this by adding a marker into the journal saying there is a floating inode when a file is unlinked.
When the inode is finally deallocated, the marker is removed from the journal. After a crash, systems finds those markers in the "looking for log elements" stage on reboot. It then goes and deallocates those inodes. So, if a node crashed and has a journal that has been replayed, but not remounted, there might be free space tied up that way.
The other possible issue is that a system can not deallocate an inode until all machines in the cluster have close the file.
The systems may be holding open (cached) various unlinked inodes and preventing the free space from being reclaimed. These situations will result in a difference between du and df output; once the root cause of the problem is resoled, the du and df outputs should converge.