[lttng-dev] [PATCH] Expose kernel tracer to user-space

Francis Giraldeau francis.giraldeau at gmail.com
Tue Jun 26 10:52:01 EDT 2012


Le 2012-06-26 08:40, Mathieu Desnoyers a écrit :
>> +/*
>> + * lttng_uevent_set_handler - set handler functions for uevent
>> + *
>> + * Access to handler code is protected with rwlock in order to
>> + * prevent the optional module to be removed while in use.
>> + */
>> +
>> +void lttng_uevent_set_handler(write_ops_t handler)
>> +{
>> +	write_lock(&uevent_rwlock);
> 
> write lock not necessary.
> 
> if (!lttng_uevent_set_handler)
>   release refcount in prior handler's module.
> 
> then:
> take a refcount on the module that contains the handler address.
> (explicit)


The function now looks like this:

void lttng_uevent_set_handler(struct file_operations *fops)
{
	if (lttng_uevent_handler) {
		module_put(lttng_uevent_handler->owner);
	}
	if (fops && try_module_get(fops->owner)) {
		lttng_uevent_handler = fops;
		return;
	}
	lttng_uevent_handler = NULL;
	return;
}

The problem with this approach is that lttng_uevent can't be unloaded
anymore:

  rmmod lttng_uevent
  ERROR: Module lttng_uevent is in use

The module lttng_uevent can't be unloaded without unloading the module
lttng_tracer. The function module_exit of lttng_uevent is never called,
such that there is a chicken-and-egg situation. This problem was solved
by using rwlock to access the handler pointer. In the rare event when
unload module would occur while a trace event is recorded, the write
lock was preventing to change the handler pointer while it's in use. But
maybe there is another way to do it?

Thanks!

Francis Giraldeau

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4476 bytes
Desc: Signature cryptographique S/MIME
URL: <http://lists.lttng.org/pipermail/lttng-dev/attachments/20120626/3dcfc15b/attachment.bin>


More information about the lttng-dev mailing list