This fixes some issues reported on linux-cluster. Essentially, the
previous code was deadlocking in some cases, primarily, when you run
the sync command. That's because sync does a down_read on the
s_umount semaphore. The deadlock was caused by some code I removed
with the port to the 2.6.20 kernel. However, I removed it because
s_umount was needed in the down state for unmounts. That's because
the diaper device isn't managed by the normal mount path in vfs.
I also fixed a kernel panic I discovered in testing when trying to mount
an invalid fs; for example, trying to mount a gfs2 file system as gfs.