All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Kent <raven@themaw.net>
To: Jim Carter <jimc@math.ucla.edu>
Cc: autofs@linux.kernel.org
Subject: Re: clients suddenly start hanging (was: (no subject))
Date: Sun, 18 May 2008 12:07:54 +0800	[thread overview]
Message-ID: <1211083674.3118.5.camel@raven.themaw.net> (raw)
In-Reply-To: <20080515215941.6221B21124E@simba.math.ucla.edu>


On Thu, 2008-05-15 at 14:59 -0700, Jim Carter wrote:
> Thread 4 (Thread 0x79aeeb90 (LWP 8592)):
> #0  0xffffe410 in __kernel_vsyscall ()
> #1  0xb7ecb817 in poll () from /lib/libc.so.6
> #2  0x8000a343 in handle_mounts (arg=0x800bd540) at automount.c:909
> #3  0xb7f4e192 in start_thread () from /lib/libpthread.so.0
> #4  0xb7ed502e in clone () from /lib/libc.so.6
> 
> Thread 3 (Thread 0x78ee9b90 (LWP 11528)):
> #0  0xffffe410 in __kernel_vsyscall ()
> #1  0xb7f52566 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
> #2  0x800215b7 in master_notify_submount (ap=0x8004e8a8, 
>     path=0x800a9630 "/net/bamboo45", state=ST_EXPIRE) at master.c:908
> #3  0x8000c90d in expire_proc_indirect (arg=0x800825e8) at indirect.c:468
> #4  0xb7f4e192 in start_thread () from /lib/libpthread.so.0
> #5  0xb7ed502e in clone () from /lib/libc.so.6

This does look like an execution order dependency.
Please try this patch in addition to the ones you're using.

autofs-5.0.3 - take submount submount lock before waiting

From: Ian Kent <raven@themaw.net>

Take the submount lock before issuing the nextstate() call to ensure
the child can't signal completion before the parent waits. Also add
cancellation cleanup for both mutexes.
---

 lib/master.c |   26 +++++++++++++++++++-------
 1 files changed, 19 insertions(+), 7 deletions(-)


diff --git a/lib/master.c b/lib/master.c
index e506661..40441ca 100644
--- a/lib/master.c
+++ b/lib/master.c
@@ -845,6 +845,20 @@ int master_submount_list_empty(struct autofs_point *ap)
 	return res;
 }
 
+static void mounts_mutex_cleanup(void *arg)
+{
+	struct autofs_point *ap = (struct autofs_point *) arg;
+	mounts_mutex_unlock(ap);
+	return;
+}
+
+static void submount_mutex_cleanup(void *arg)
+{
+	struct autofs_point *ap = (struct autofs_point *) arg;
+	submount_mutex_unlock(ap);
+	return;
+}
+
 int master_notify_submount(struct autofs_point *ap, const char *path, enum states state)
 {
 	struct list_head *head, *p;
@@ -853,6 +867,7 @@ int master_notify_submount(struct autofs_point *ap, const char *path, enum state
 	size_t plen = strlen(path);
 	int status, ret = 1;
 
+	pthread_cleanup_push(mounts_mutex_cleanup, ap);
 	mounts_mutex_lock(ap);
 
 	head = &ap->submounts;
@@ -889,19 +904,16 @@ int master_notify_submount(struct autofs_point *ap, const char *path, enum state
 		}
 
 		/* Now we have a submount to expire */
-
+		pthread_cleanup_push(submount_mutex_cleanup, ap);
+		submount_mutex_lock(ap);
 		state_mutex_lock(this);
-
 		if (this->state == ST_SHUTDOWN) {
 			state_mutex_unlock(this);
 			break;
 		}
-
 		nextstate(this->state_pipe[1], state);
-
 		state_mutex_unlock(this);
 
-		submount_mutex_lock(ap);
 		thid = this->thid;
 		ap->submount_signaled = MASTER_SUBMNT_WAIT;
 		while (ap->submount_signaled == MASTER_SUBMNT_WAIT) {
@@ -916,12 +928,12 @@ int master_notify_submount(struct autofs_point *ap, const char *path, enum state
 				fatal(status);
 		} else
 			ret = 0;
-		submount_mutex_unlock(ap);
+		pthread_cleanup_pop(1);
 
 		break;
 	}
 
-	mounts_mutex_unlock(ap);
+	pthread_cleanup_pop(1);
 
 	return ret;
 }

  parent reply	other threads:[~2008-05-18  4:07 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-23 18:50 (no subject) Jim Carter
2008-04-23 20:04 ` Jeff Moyer
2008-04-24  3:10   ` Ian Kent
2008-04-24 16:52   ` clients suddenly start hanging (was: (no subject)) Jim Carter
2008-04-26  1:17   ` Jim Carter
2008-04-26  5:34     ` Ian Kent
2008-04-26 18:48       ` Jim Carter
2008-04-27  5:52         ` Ian Kent
2008-04-26 22:16       ` Jim Carter
2008-04-28  6:26 ` [PATCH 1/2] autofs4 - fix execution order race in mount request code Ian Kent
2008-05-08  4:52   ` clients suddenly start hanging (was: (no subject)) Jim Carter
2008-05-08  6:13     ` Ian Kent
2008-05-11  4:14       ` Jim Carter
2008-05-11  7:57         ` Ian Kent
2008-05-15 21:59           ` Jim Carter
2008-05-16  3:00             ` Ian Kent
2008-05-18  4:07             ` Ian Kent [this message]
2008-05-21  6:58               ` Ian Kent
2008-05-22 21:42               ` Jim Carter
2008-05-23  2:35                 ` Ian Kent
2008-05-26  0:34                   ` Jim Carter
2008-06-12  3:20                     ` Ian Kent
2008-06-12  4:50 [PATCH 00/10] Kernel patch series Ian Kent
2008-06-12  4:50 ` [PATCH 01/10] autofs4 - check for invalid dentry in getpath Ian Kent
2008-06-12  4:50 ` [PATCH 02/10] autofs4 - fix sparse warning in waitq.c:autofs4_expire_indirect() Ian Kent
2008-06-12  4:50 ` [PATCH 03/10] autofs4 - fix incorrect return from root.c:try_to_fill_dentry() Ian Kent
2008-06-12  4:51 ` [PATCH 04/10] autofs4 - fix mntput, dput order bug Ian Kent
2008-06-12  4:51 ` [PATCH 05/10] autofs4 - don't make expiring dentry negative Ian Kent
2008-06-12  4:51 ` [PATCH 06/10] autofs4 - use look aside list for lookups Ian Kent
2008-06-12  4:51 ` [PATCH 07/10] autofs4 - don't release directory mutex if called in oz_mode Ian Kent
2008-06-12  4:51 ` [PATCH 08/10] autofs4 - use lookup intent flags to trigger mounts Ian Kent
2008-06-12  4:51 ` [PATCH 09/10] autofs4 - use struct qstr in waitq.c Ian Kent
2008-06-12  4:51 ` [PATCH 10/10] autofs4 - fix pending mount race Ian Kent
2008-06-14  1:13 ` [PATCH 00/10] Kernel patch series Jim Carter
2008-06-14  3:30   ` Ian Kent
2008-06-14  3:42     ` Ian Kent
2008-06-19  0:40       ` clients suddenly start hanging (was: (no subject)) Jim Carter
2008-06-19  3:14         ` Ian Kent
2008-06-19 17:08           ` Jim Carter
2008-06-19 18:34           ` Jim Carter
2008-06-20  4:09             ` Ian Kent
2008-06-21  1:02               ` Jim Carter
2008-06-21  3:12                 ` Ian Kent
2008-06-23  3:49                   ` Jim Carter
2008-06-23  4:46                     ` Ian Kent
2008-06-24  3:08                       ` Ian Kent
2008-06-24 17:02                         ` Stephen Biggs
2008-06-24 23:39                         ` Jim Carter
2008-06-25  3:33                           ` Ian Kent
2008-06-25  5:00                             ` Ian Kent
2008-06-23  4:15                   ` Ian Kent

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1211083674.3118.5.camel@raven.themaw.net \
    --to=raven@themaw.net \
    --cc=autofs@linux.kernel.org \
    --cc=jimc@math.ucla.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.