pipe generates inodes with ino > 4G
The pipe() syscall generates inode pairs with an arbitrary inode number. This number is simply generated by incrementing a counter on each call. After 4G pipe calls, the inode number can't be represented in 32 bits anymore. This causes 32 bit applications doing an fstat to fail with EOVERFLOW. I suggest to simply wrap the inode number at 32 bits.
In our case, it was the postfix mailq doing an fstat on its stdout that failed.
fifogetid() is the function that generates the inode number.