Thread (12 messages) flat view 12 messages, 3 authors, 2007-08-17

Re: [GENETLINK]: Question: global lock (genl_mutex) possible refinement?

From: Patrick McHardy <hidden>
Date: 2007-07-20 14:01:49

[ Please quote and break your lines appropriately ]

Richard MUSIL wrote:
Patrick McHardy wrote:
quoted
The usual way to do this for auto-loading of modules that register
things that take a mutex that is already held during netlink queue
processing, like qdiscs, classifiers, .. is:

- look for <qdisc/classifier/...>, if not found:
- drop mutex (using the __ unlock variant to avoid reentering queue
processing)
- perform module loading (which takes the mutex and registers itself)
- grab mutex again
- look for <qdisc/classifier/...> again
- if not found return -ENOENT
- if found drop reference, return -EAGAIN

The caller is changed to handle -EAGAIN by replaying the entire
request. Your problem sounds very similar, look at net/sched/sch_api.c
for an example.

The aforementioned mutex is local to genetlink module, so I cannot temporarily drop it, call the stuff and grab it again (which was mine original thought too).
Export the lock/unlock/.. functions. You'll also need a new version
similar to __rtnl_unlock.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help