Detecting and understanding crash-consistency bugs across the parallel I/O stack