lkml.org 
[lkml]   [2004]   [Nov]   [17]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRe: modprobe + request_module() deadlock
FromRusty Russell <>
DateThu, 18 Nov 2004 14:48:22 +1100
On Wed, 2004-11-17 at 23:29 +0100, Johannes Stezenbach wrote:
> Hi,
> 
> it seems that modprobe in newer versions of module-init-tools
> (here: 3.1-pre6) gets an exclusive lock on the module's .ko file:
> 
>                 struct flock lock;
>                 lock.l_type = F_WRLCK;
>                 lock.l_whence = SEEK_SET;
>                 lock.l_start = 0;
>                 lock.l_len = 1;
>                 fcntl(fd, F_SETLKW, &lock);
> 
> This leads to a deadlock when the loaded module calls
> request_module() in its module_init() function, to load
> a module which in turn depends on the first module.

My bug, I think.  Does this help?

Rusty.

--- modprobe.c.~70~	2004-09-30 20:16:19.000000000 +1000
+++ modprobe.c	2004-11-18 14:44:57.000000000 +1100
@@ -735,6 +735,11 @@
 		       strip_vermagic, strip_modversion);
 	}
 
+	/* Don't do ANYTHING if already in kernel. */
+	if (!ignore_proc
+	    && module_in_kernel(newname ?: mod->modname, NULL) == 1)
+		goto exists_error;
+
 	fd = lock_file(mod->filename);
 	if (fd < 0) {
 		error("Could not open '%s': %s\n",
@@ -742,11 +747,6 @@
 		goto out_optstring;
 	}
 
-	/* Don't do ANYTHING if already in kernel. */
-	if (!ignore_proc
-	    && module_in_kernel(newname ?: mod->modname, NULL) == 1)
-		goto exists_error;
-
 	command = find_command(mod->modname, commands);
 	if (command && !ignore_commands) {
 		/* It might recurse: unlock. */
@@ -799,7 +799,7 @@
 	if (first_time)
 		error("Module %s already in kernel.\n",
 		      newname ?: mod->modname);
-	goto out_unlock;
+	goto out_optstring;
 }
 
 /* Do recursive removal. */
-- 
A bad analogy is like a leaky screwdriver -- Richard Braakman

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:08    [from the cache]
©2003-2008