Commit Graph

349 Commits

Author SHA1 Message Date
Lucas De Marchi
08600ee579 libkmod-module: probe: return -EEXIST if told to do so
Commit "af9572c lib/module: check initstate before inserting module"
removed the check for "we should return -EEXIST" and moved it back to
the start of the function. The problem with this is the following
scenario:

- We check if module is in kernel -> no
- We insert the dependencies
					<-- External program loads
					the module
- We check if module is in kernel -> yes
- We return 0, when we should return -EEXIST
2012-02-06 12:54:42 -02:00
Lucas De Marchi
814a57babf libkmod-module: probe: rename flag to be more meaningful 2012-02-06 12:46:39 -02:00
Dan McGee
9a252c218a Fix simple grammar issue 2012-02-05 02:15:15 -02:00
Ambroz Bizjak
a2c7d3e8b0 Fix unaligned memory access in hash function
Use a function to properly get an unsigned short from memory that is
possibly unaligned.

Note that it implicitly fixes a small bug in the hash function that
was introduced when modifying the eina code: the line "hash ^= key[2]
<< 18;" is supposed to be accessing the 3rd byte of the remainder of
the input, but when 'it' was introduced, 'key' ('data' in eina code)
was no longer incremented, so this ended up accessing the 3rd byte of
the input from the beginning. This is fixed by iterating over 'key',
like the eina code does.

Before this patch depmod was failing on ARMv5 and possibly others that
don't have unaligned access. They do not calculate correctly the
dependencies as shown below:

[root@alarm ~]# modinfo bridge
filename: /lib/modules/2.6.39.4/kernel/net/bridge/bridge.ko
version: 2.3
license: GPL
srcversion: 6B583530AE2B39C7E2317BF
depends: stp,llc
vermagic: 2.6.39.4 preempt mod_unload ARMv5
[root@alarm ~]# depmod
[root@alarm ~]# cat /lib/modules/2.6.39.4/modules.dep |grep bridge
kernel/net/bridge/bridge.ko:
[root@alarm ~]#

See how modinfo properly lists the dependencies, but modules.dep which
depmod generates does not contain them. As a result, most kernel
modules fail to load because their dependencies are not loaded by
modprobe.
2012-02-03 18:15:01 -02:00
Dave Reisner
af9572c6d7 lib/module: check initstate before inserting module
This applies to both the high level probe_insert_module() and the
underlying insert_module() functions. By checking module initstate prior
to inserting a module, we can avoid a lot of needless work just to find
out that the init_module call fails with EEXIST.

This implements a helper function, module_is_inkernel, to return a
boolean value describing if a module is live, coming, or builtin.
2012-02-03 09:10:13 -05:00
Dave Reisner
7bede7b6a8 whitespace fix -- no logical code changes 2012-02-02 19:52:37 -02:00
Gustavo Sverzut Barbieri
dfa96f1545 improve logging to mention context.
Just printing the errno string such as "%m\n" is not enough to help
debug or users understand the problem.

Change to provide more context on the failing operation.
2012-01-31 22:01:00 -02:00
Gustavo Sverzut Barbieri
e3cb0900dd improve log when debugging.
Some messages may happen more than once in the same function and
discovering the line is hard. Now we print the actual log priority
that exposed the message as well as filename and line.

NOTE: We should consider printing the log priority in the non-debug
version as well.
2012-01-31 22:01:00 -02:00
Lucas De Marchi
9226ddad2c libkmod: organize public header 2012-01-31 17:23:35 -02:00
Lucas De Marchi
4bc1895674 Prepare for API bump 2012-01-31 16:05:02 -02:00
Lucas De Marchi
7aed46088e libkmod-module: probe: remove useless KMOD_PROBE_STOP_ON_COMMAND 2012-01-31 14:08:57 -02:00
Lucas De Marchi
3bc92e8949 libkmod-module: probe: return -EEXIST if told to stop on already loaded 2012-01-31 14:08:57 -02:00
Lucas De Marchi
4c1ffb75d4 libkmod-module: probe: add flag to dry-run 2012-01-31 14:08:57 -02:00
Lucas De Marchi
7c10c69c72 libkmod-module: probe: add flag to ignore loaded modules
We need a way to tell libkmod to ignore loaded modules, so modprobe can
tell it to dry-run and show dependencies. However there's a conflict
with two flags. KMOD_PROBE_STOP_ON_ALREADY_LOADED prevails if passed
together with KMOD_PROBE_IGNORE_LOADED.
2012-01-31 14:08:57 -02:00
Lucas De Marchi
6bd0713deb libkmod-module: probe: add print_action callback
This allows to implement dry-run in modprobe without exporting
kmod_module_get_probe_list().
2012-01-31 14:08:57 -02:00
Lucas De Marchi
d851e9a144 libkmod-module: probe: add room in flags for future extension
Breaking flags is one of the reasons next version will need to bump ABI.
In future we don't want to bump it just because of this.
2012-01-30 20:05:34 -02:00
Lucas De Marchi
48b10305cb libkmod-module: probe: ignore-command flag can't be used in return 2012-01-30 20:05:34 -02:00
Lucas De Marchi
79d6c7d764 libkmod-module: probe: remove useless flag to stop on failure
We always want to stop if module failed to loaded due to unknown reason.
2012-01-30 20:05:34 -02:00
Lucas De Marchi
5f3514731e libkmod-module: probe: add flag to stop loading on already loaded
It's not as simple as tell user to check if the module is loaded before
calling this function. Due to race conditions, module might not be
loaded before the function call, but fail later because another process
inserted it.
2012-01-30 20:05:34 -02:00
Lucas De Marchi
9c7f3ad0a4 libkmod-module: split creation of new modules to share code
Share code of module creation among the several new functions. With this
we let the alias/modname/path parsing to the separate functions, and the
rest with the common one.

This fixes the issue of alias names not being able to contain dots.
2012-01-30 20:05:34 -02:00
Lucas De Marchi
9901cfe242 Partially fix parsing of alias with dots
Alias names may contain dots. However since kmod_module_from_alias()
still calls kmod_module_new_from_name(), the bug is not entirely fixed,
and will be completely corrected in a later patch.
2012-01-30 20:05:33 -02:00
Lucas De Marchi
89e92487bc libkmod-module: probe: add flag to ignore commands 2012-01-30 20:05:33 -02:00
Lucas De Marchi
b1a51256a9 libkmod-module: probe: change insertion to cover more use cases
Split kmod_module_probe_insert_module() in 2:
	1) Get list of modules to be loaded
	2) Iterate the list, loading the module

With this in future we will be able to cover use cases of modprobe,
that has a logic a bit more complicated.

With this we also change the logic to detect dependency loops: instead
of checking the recursion every STEP times, we now keep a field in
kmod_module, marking it as visited. We simply ignore already visited
modules and thus we break loops.
2012-01-30 20:05:33 -02:00
Lucas De Marchi
ece09aac7f libkmod-module: add visited field
This field can be used to iterate the modules, controlling whether we
are revisiting a certain module. A function to clear the values in all
modules is needed since when we are iterating, we don't know if the
module is created anew or if it's picked from the pool. Therefore we
can't know if the field is true because of a previous iteration or if
the module was indeed already visited.
2012-01-30 13:52:22 -02:00
Pedro Pedruzzi
647200fb5a libkmod: Fix handling of square brackets expressions in function alias_normalize 2012-01-28 12:19:25 -02:00
Lucas De Marchi
ea17e2b043 elf: privately export kmod_elf_get_section()
This function is used to find a certain section in ELF file. It will be
used to get the modname from an ELF file.
2012-01-26 16:05:05 -02:00
Lucas De Marchi
434f32ca8d libkmod-list: allow to append an empty list 2012-01-17 21:16:23 -02:00
Thierry Vignaud
eff917c0d2 WEXITSTATUS is defined in sys/wait.h
Fix compiling with dietlibc:

../libkmod/libkmod-module.c:858:2: warning: implicit declaration of function 'WEXITSTATUS' [-Wimplicit-function-declaration]
../libkmod/libkmod-module.c:858:2: warning: nested extern declaration of 'WEXITSTATUS' [-Wnested-externs]
(...)
kmod-modprobe.c:(.text.command_do+0x157): undefined reference to `WEXITSTATUS'
2012-01-17 17:33:07 -02:00
Lucas De Marchi
6068aaaea8 Check if struct stat has mtim member
Not all libc's have a mtim member in struct stat (dietlibc doesn't).
Change ts_usec() to receive a struct stat as parameter and implement it
accordingly for both cases.
2012-01-17 12:22:55 -02:00
Lucas De Marchi
09e9ae58b6 modprobe: flush stdout before dumping indexes
Index dump doesn't use stdio.h function and instead call write()
directly on STDOUT_FILENO file descriptor. Therefore we need to flush
stdio buffers before calling it, to be sure the configuration dump will
appear before index's.
2012-01-17 10:11:03 -02:00
Lucas De Marchi
0224482e62 Add doc to kmod_dump_index 2012-01-16 16:44:25 -02:00
Lucas De Marchi
758428a75f libkmod: dump index files
Provide a function to dump the index files to a certain fd. It could be
more optimized (particularly the functions to dump the index that were
copied and pasted from m-i-t), but it seems like the only user of it is
'modprobe -c', used for debugging purposes. So, keep it as is.
2012-01-16 16:05:46 -02:00
Lucas De Marchi
f1cbf3cfe2 libkmod-util: add helper function to write to fd 2012-01-16 16:05:46 -02:00
Lucas De Marchi
7a973b0cb0 libkmod-util: adhere to coding style 2012-01-16 16:05:46 -02:00
Lucas De Marchi
b08314f7b7 libkmod: export enum kmod_index and rename members 2012-01-16 16:05:36 -02:00
Lucas De Marchi
63be91cbd5 libkmod: store prefix of each index
Prefix is useful when dumping the index (to be added later).
2012-01-16 16:04:32 -02:00
Lucas De Marchi
2f47c7fae9 Update documentation with recent changes 2012-01-14 12:16:48 -02:00
Lucas De Marchi
2e092e19a7 kmod_new(): deal with relative paths for dirname 2012-01-14 02:32:25 -02:00
Lucas De Marchi
6b04ef324a config: let softdeps dump their data 2012-01-13 11:12:41 -02:00
Lucas De Marchi
0017862911 config: add exported iterator functions
Config iterators are useful to get each configuration list, remember its
type and how to get their key/value pair.

softdeps don't have the value yet, because they are stored as string
vectors.
2012-01-13 11:12:41 -02:00
Lucas De Marchi
8b5ee61872 libkmod-private: allow to get aliases from config 2012-01-13 11:12:41 -02:00
Lucas De Marchi
e3ebcff7a4 build-sys: fix clean rule removing tracked files 2012-01-12 14:21:22 -02:00
Lucas De Marchi
0ad5dd0837 config: deprecate 'include' and 'config' commands 2012-01-11 00:29:34 -02:00
Lucas De Marchi
ba998b9c9e Fix error code returned on module removal 2012-01-11 00:08:14 -02:00
Lucas De Marchi
83121fdea6 config: be reliable againt syntax errors in configs 2012-01-10 15:00:07 -02:00
Lucas De Marchi
ecced7dd77 doc: fix out of tree build 2012-01-09 13:32:31 -02:00
Lucas De Marchi
6681951bbe doc: organize sections 2012-01-09 05:28:57 -02:00
Lucas De Marchi
646b83b841 doc: add gtk-doc to generate documentation
Current limitation is horrible no support to sections: we have to to
have separate header files or to maintain the libkmod-sections.txt file.
We are doing the latter.
2012-01-09 05:28:57 -02:00
Lucas De Marchi
db74ceec80 doc: fix broken links to other functions 2012-01-09 03:45:48 -02:00
Lucas De Marchi
e1daa4f54b doc: fix order of param descriptions 2012-01-09 03:30:10 -02:00