Fix a bug in sblock() that has existed since revision 1.1 from BSD:
correctly return an error if M_NOWAIT is passed to sblock() and the
operation might block. This remarkably subtle macro bug appears to
be responsible for quite a few undiagnosed socket buffer corruption
and mbuf-related kernel panics.
This bug has already been fixed in 7-CURRENT as part of the move to
using sx(9) locks to serialize simultaneous socket I/O, but is an
MFC candidate for all earlier FreeBSD -STABLE branches.
MFC after: 2 weeks
Found by: Isilon
Submitted by: jeff
Tested by: jhb, Yahoo!