Giant is being deprecated, so this patch replaces it with a mutex called nfsinfolock_mtx.
A couple of malloc(..M_WAITOK)s are moved to places where the lock isn't held.
I also noticed that the code that does the wakeup() on p_nlminfo only held the PROC_LOCK(),
which wan not held for the code that used Giant.
As such, it seemed somewhat racey (although I doubt the NLM daemon would ever respond
quickly enough to beat the call to tsleep()).
I used a msleep(..PDROP) instead of the tsleep() and wrapped the code that does the wakeup()
with the nfsinfolock_mtx.
I cannot see anywhere else that the code that held Giant sleeps, so I think this is ok.