I've seen a few different questions about ls hanging. It's usually because they use the -l switch, which causes a stat on the file, which in turn is a bad symlink or pointing to an NFS mount or some such.
I have a local file (in an old copy of the Git source that somebody else unpacked, of all things) that causes stat to hang, but responds to CTRL-C. It also causes ls -l to hang, hard, such that it does not respond to kill (but does terminate on a kill -9).
It's not a symlink. The other files in the directory appear to stat without issue. I've recently rebooted the machine with forced fsck, which came out clean, and dmesg shows no disk-related messages. How can this be?