sync does everything
dirsync does, plus more. Unfortunately this 'more' is a significant performance penalty. With
sync enabled, all disk I/O is immediately written to disk. With
dirsync, only directory operations are immediately written.
The only case I've seen where one might want to use
dirsync instead of
sync is in the case of network filesystems. When multiple boxes are working in a shared directory, they might try to create the file at around the same time. One box will create the file, but without
dirsync on, the file isn't visible to other boxes yet. With
dirsync on, the file will show up immediately, so the other servers at least know it exists and can now perform file locking on it.