If you have a data structure which is only ever accessed from
       user context, then you can use a simple mutex
       (include/linux/mutex.h) to protect it.  This
       is the most trivial case: you initialize the mutex.  Then you can
       call mutex_lock_interruptible() to grab the mutex,
       and mutex_unlock() to release it.  There is also a 
       mutex_lock(), which should be avoided, because it 
       will not return if a signal is received.
     
       Example: net/netfilter/nf_sockopt.c allows 
       registration of new setsockopt() and 
       getsockopt() calls, with
       nf_register_sockopt().  Registration and 
       de-registration are only done on module load and unload (and boot 
       time, where there is no concurrency), and the list of registrations 
       is only consulted for an unknown setsockopt()
       or getsockopt() system call.  The 
       nf_sockopt_mutex is perfect to protect this,
       especially since the setsockopt and getsockopt calls may well
       sleep.