From 7f8508da77a7cca2c41edff5ed8f5c38abdd68c4 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Sun, 18 Nov 2012 12:02:02 +0100 Subject: [PATCH] kmod: add two upstream patches for depmod (via Arch). --- ...lookup-by-relpath-instead-of-uncrelp.patch | 42 +++++++++++++++++++ ...2-depmod-fix-asserting-mod-kmod-NULL.patch | 30 +++++++++++++ srcpkgs/kmod/template | 2 +- 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/kmod/patches/0001-depmod-fix-hash-lookup-by-relpath-instead-of-uncrelp.patch create mode 100644 srcpkgs/kmod/patches/0002-depmod-fix-asserting-mod-kmod-NULL.patch diff --git a/srcpkgs/kmod/patches/0001-depmod-fix-hash-lookup-by-relpath-instead-of-uncrelp.patch b/srcpkgs/kmod/patches/0001-depmod-fix-hash-lookup-by-relpath-instead-of-uncrelp.patch new file mode 100644 index 00000000000..95eeba0414a --- /dev/null +++ b/srcpkgs/kmod/patches/0001-depmod-fix-hash-lookup-by-relpath-instead-of-uncrelp.patch @@ -0,0 +1,42 @@ +From 06294621a944e4611e15ce8201df80870e052e7d Mon Sep 17 00:00:00 2001 +From: Lucas De Marchi +Date: Fri, 16 Nov 2012 11:35:30 -0200 +Subject: [PATCH 1/2] depmod: fix hash lookup by relpath instead of uncrelpath + +We index modules in depmod by it's uncompressed relative path, not +relative path. We didn't notice this bug before since this function is +only triggered if we release a module to be replaced by one of higher +priority. + +Also fix a leftover log message referring to relpath instead of +uncrelpath. +--- + tools/depmod.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/tools/depmod.c b/tools/depmod.c +index cc9346f..aafe66b 100644 +--- tools/depmod.c ++++ tools/depmod.c +@@ -1114,7 +1114,7 @@ static int depmod_module_add(struct depmod *depmod, struct kmod_module *kmod) + mod->uncrelpath, mod); + if (err < 0) { + ERR("hash_add_unique %s: %s\n", +- mod->relpath, strerror(-err)); ++ mod->uncrelpath, strerror(-err)); + hash_del(depmod->modules_by_name, mod->modname); + goto fail; + } +@@ -1134,8 +1134,8 @@ static int depmod_module_del(struct depmod *depmod, struct mod *mod) + { + DBG("del %p kmod=%p, path=%s\n", mod, mod->kmod, mod->path); + +- if (mod->relpath != NULL) +- hash_del(depmod->modules_by_uncrelpath, mod->relpath); ++ if (mod->uncrelpath != NULL) ++ hash_del(depmod->modules_by_uncrelpath, mod->uncrelpath); + + hash_del(depmod->modules_by_name, mod->modname); + +-- +1.8.0 diff --git a/srcpkgs/kmod/patches/0002-depmod-fix-asserting-mod-kmod-NULL.patch b/srcpkgs/kmod/patches/0002-depmod-fix-asserting-mod-kmod-NULL.patch new file mode 100644 index 00000000000..5352a69d2d5 --- /dev/null +++ b/srcpkgs/kmod/patches/0002-depmod-fix-asserting-mod-kmod-NULL.patch @@ -0,0 +1,30 @@ +From 02c64df3c2b33880b18d3f4aba9fa8e48e5ca904 Mon Sep 17 00:00:00 2001 +From: Lucas De Marchi +Date: Fri, 16 Nov 2012 12:05:42 -0200 +Subject: [PATCH 2/2] depmod: fix asserting mod->kmod == NULL + +If we are replacing a lower priority module (due to its location), we +already created a kmod_module, but didn't open the file for reading its +symbols. This means mod->kmod won't be NULL, and this is just ok. Since +all the functions freeing stuff below the previous assert already takes +NULL into consideration, it's safe to just unref mod->kmod and let the +right thing happens. +--- + tools/depmod.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/depmod.c b/tools/depmod.c +index aafe66b..7bbdcd3 100644 +--- tools/depmod.c ++++ tools/depmod.c +@@ -977,7 +977,7 @@ static void mod_free(struct mod *mod) + { + DBG("free %p kmod=%p, path=%s\n", mod, mod->kmod, mod->path); + array_free_array(&mod->deps); +- assert(mod->kmod == NULL); ++ kmod_module_unref(mod->kmod); + kmod_module_info_free_list(mod->info_list); + kmod_module_dependency_symbols_free_list(mod->dep_sym_list); + free(mod->uncrelpath); +-- +1.8.0 diff --git a/srcpkgs/kmod/template b/srcpkgs/kmod/template index 590495f7de9..e0d3af30749 100644 --- a/srcpkgs/kmod/template +++ b/srcpkgs/kmod/template @@ -1,7 +1,7 @@ # Template file for 'kmod' pkgname=kmod version=11 -revision=1 +revision=2 build_style=gnu-configure configure_args="--with-zlib --with-xz" makedepends="pkg-config zlib-devel liblzma-devel libxslt"