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.