kernel - Fix possible race in syncache
* syncache_timer_handler() can block while dropping a syncache entry,
potentially causing the next pointer it uses in its list iteration
to become stale.
* Use a list marker to keep tabs on the list position instead of using
a next pointer.
* Remove critical sections, callouts do not preempt and syncache
routines can only be entered from protocol threads or callouts.
* Document the callout code as not preempting other threads.
Reported-by: Peter Avalos <pavalos@theshell.com>