All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Ingo Molnar <mingo@elte.hu>
Cc: LKML <linux-kernel@vger.kernel.org>
Subject: Re: [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-07
Date: Thu, 07 Apr 2005 17:21:50 -0400	[thread overview]
Message-ID: <1112908910.22577.54.camel@localhost.localdomain> (raw)
In-Reply-To: <1112358445.28076.23.camel@localhost.localdomain>

On Fri, 2005-04-01 at 07:27 -0500, Steven Rostedt wrote:
> On Fri, 2005-04-01 at 07:19 +0200, Ingo Molnar wrote:
> > * Steven Rostedt <rostedt@goodmis.org> wrote:
> > 
> > > > could you send me your latest patch for the bit-spin issue? My main 
> > > > issue was cleanliness, so that the patch doesnt get stuck in the -RT 
> > > > tree forever.
> > > 
> > > I think that's the main problem. Without changing the design of the 
> > > ext3 system, I don't think there is a clean patch.  The implementation 
> > > that I finally settled down with was to make the j_state and 
> > > j_journal_head locks two global locks. I had to make a few 
> > > modifications to some spots to avoid deadlocks, but this worked out 
> > > well. The problem I was worried about was this causing too much 
> > > overhead. So the ext3 buffers would have to contend with each other. I 
> > > don't have any tests to see if this had too much of an impact.
> > 
> > yeah - i think Andrew said that a global lock at that particular place 
> > might not be that much of an issue.
> > 
> 
> OK, I'll start stripping it out of my kernel today and make a clean
> patch for you.
> 

Ingo, I haven't forgotten about this, I just been heavily bug wacking
lately and just haven't had the time to do this. 

I've pulled out both the lock_bh_state and lock_bh_journal_head and made
them two global locks.  I haven't noticed any slowing down here, but
then again I haven't ran any real benchmarks.  There's a BH flag set to
know when the lock is pending on a specific buffer head.

I don't know how acceptable this patch is. Take a look and if you have
any better ideas then let me know.  I prefer this patch over the
wait_on_bit patch I sent you earlier since this patch still accounts for
priority inheritance, as the wait_on_bits don't.

-- Steve

Index: include/linux/jbd.h
===================================================================
--- include/linux/jbd.h	(revision 113)
+++ include/linux/jbd.h	(working copy)
@@ -313,47 +313,100 @@
 BUFFER_FNS(RevokeValid, revokevalid)
 TAS_BUFFER_FNS(RevokeValid, revokevalid)
 BUFFER_FNS(Freed, freed)
+#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT)
+BUFFER_FNS(State,state)
 
-static inline struct buffer_head *jh2bh(struct journal_head *jh)
+extern spinlock_t journal_bh_state_lock;
+extern spinlock_t journal_bh_journal_lock;
+
+static inline void jbd_lock_bh_state(struct buffer_head *bh)
 {
-	return jh->b_bh;
+	spin_lock(&journal_bh_state_lock);
+	BUG_ON(buffer_state(bh));
+	set_buffer_state(bh);
+	__acquire(journal_bh_state_lock);
 }
 
-static inline struct journal_head *bh2jh(struct buffer_head *bh)
+static inline int jbd_trylock_bh_state(struct buffer_head *bh)
 {
-	return bh->b_private;
+	if (!spin_trylock(&journal_bh_state_lock)) 
+		return 0;
+
+	BUG_ON(buffer_state(bh));
+	set_buffer_state(bh);
+	__acquire(journal_bh_state_lock);
+	return 1;
 }
 
+static inline int jbd_is_locked_bh_state(struct buffer_head *bh)
+{
+	return buffer_state(bh);
+}
+
+static inline void jbd_unlock_bh_state(struct buffer_head *bh)
+{
+	BUG_ON(!buffer_state(bh));
+	clear_buffer_state(bh);
+	spin_unlock(&journal_bh_state_lock);
+	__release(journal_bh_state_lock);
+}
+
+static inline void jbd_lock_bh_journal_head(struct buffer_head *bh)
+{
+	spin_lock(&journal_bh_journal_lock);
+	__acquire(journal_bh_journal_lock);
+}
+
+static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh)
+{
+	spin_unlock(&journal_bh_journal_lock);
+	__release(journal_bh_journal_lock);
+}
+
+#else  /* ! (CONFIG_SMP || CONFIG_DEBUG_SPINLOCK || CONFIG_PREEMPT) */
+
 static inline void jbd_lock_bh_state(struct buffer_head *bh)
 {
-	bit_spin_lock(BH_State, &bh->b_state);
+	__acquire(journal_bh_state_lock);
 }
 
 static inline int jbd_trylock_bh_state(struct buffer_head *bh)
 {
-	return bit_spin_trylock(BH_State, &bh->b_state);
+	__acquire(journal_bh_state_lock);
+	return 1;
 }
 
 static inline int jbd_is_locked_bh_state(struct buffer_head *bh)
 {
-	return bit_spin_is_locked(BH_State, &bh->b_state);
+	return 1;
 }
 
 static inline void jbd_unlock_bh_state(struct buffer_head *bh)
 {
-	bit_spin_unlock(BH_State, &bh->b_state);
+	__release(journal_bh_state_lock);
 }
 
 static inline void jbd_lock_bh_journal_head(struct buffer_head *bh)
 {
-	bit_spin_lock(BH_JournalHead, &bh->b_state);
+	__acquire(journal_bh_journal_lock);
 }
 
 static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh)
 {
-	bit_spin_unlock(BH_JournalHead, &bh->b_state);
+	__release(journal_bh_journal_lock);
 }
+#endif /* (CONFIG_SMP || CONFIG_DEBUG_SPINLOCK || CONFIG_PREEMPT) */
 
+static inline struct buffer_head *jh2bh(struct journal_head *jh)
+{
+	return jh->b_bh;
+}
+
+static inline struct journal_head *bh2jh(struct buffer_head *bh)
+{
+	return bh->b_private;
+}
+
 struct jbd_revoke_table_s;
 
 /**
Index: fs/jbd/journal.c
===================================================================
--- fs/jbd/journal.c	(revision 113)
+++ fs/jbd/journal.c	(working copy)
@@ -82,6 +82,14 @@
 
 static int journal_convert_superblock_v1(journal_t *, journal_superblock_t *);
 
+#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT)
+spinlock_t journal_bh_state_lock = SPIN_LOCK_UNLOCKED;
+spinlock_t journal_bh_journal_lock = SPIN_LOCK_UNLOCKED;
+
+EXPORT_SYMBOL(journal_bh_state_lock);
+EXPORT_SYMBOL(journal_bh_journal_lock);
+#endif
+
 /*
  * Helper function used to manage commit timeouts
  */



  reply	other threads:[~2005-04-07 21:22 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-03-19 19:16 [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-00 Ingo Molnar
2005-03-20  0:24 ` Lee Revell
2005-03-21 15:42   ` K.R. Foley
2005-03-20  1:33 ` Lee Revell
2005-03-20  1:50   ` K.R. Foley
2005-03-20  4:32     ` Lee Revell
2005-03-20 22:40       ` Paul E. McKenney
2005-03-20 17:45 ` Paul E. McKenney
2005-03-21  8:53   ` Ingo Molnar
2005-03-21  9:01     ` Ingo Molnar
2005-03-21  9:06       ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-01 Ingo Molnar
2005-03-21 23:10         ` Magnus Naeslund(t)
2005-03-22  5:40           ` Paul E. McKenney
2005-03-22  8:50             ` Ingo Molnar
2005-03-22 13:56             ` Magnus Naeslund(t)
2005-03-23  5:46               ` Paul E. McKenney
2005-03-22  5:43         ` Paul E. McKenney
2005-03-22  7:24           ` Ingo Molnar
2005-03-22  9:23             ` Ingo Molnar
2005-03-22  9:32               ` Ingo Molnar
2005-03-22 10:01                 ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-05 Ingo Molnar
2005-03-22 11:28                   ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-07 Ingo Molnar
2005-03-22 15:06                     ` K.R. Foley
2005-03-22 18:05                     ` Magnus Naeslund(t)
2005-03-23  6:16                     ` Paul E. McKenney
2005-03-23  6:33                       ` Ingo Molnar
2005-03-23  6:37                         ` Ingo Molnar
2005-03-24  6:06                           ` Paul E. McKenney
2005-03-23  7:16                         ` Ingo Molnar
2005-03-23  7:54                           ` Steven Rostedt
2005-03-23  7:58                             ` Ingo Molnar
2005-03-23  8:29                           ` Peter Zijlstra
2005-03-23  9:03                             ` Ingo Molnar
2005-03-24  6:45                               ` Paul E. McKenney
2005-03-23 21:46                           ` Ingo Molnar
2005-03-24  6:59                             ` Paul E. McKenney
2005-03-24  6:38                           ` Paul E. McKenney
2005-03-23  9:38                         ` Herbert Xu
2005-03-23  9:49                           ` Herbert Xu
2005-03-24  6:52                             ` Paul E. McKenney
2005-03-24  5:28                         ` Paul E. McKenney
2005-03-24  5:34                           ` Ingo Molnar
2005-03-24  7:46                             ` Paul E. McKenney
2005-03-24  8:31                             ` Steven Rostedt
2005-03-24  8:47                               ` Steven Rostedt
2005-03-24 10:45                                 ` Ingo Molnar
2005-03-24 11:39                                 ` Ingo Molnar
2005-03-24 14:33                                   ` Steven Rostedt
2005-03-24 17:51                                     ` Ingo Molnar
2005-03-24 18:17                                     ` Ingo Molnar
2005-03-24 23:05                                   ` Esben Nielsen
2005-03-25  6:19                                     ` Ingo Molnar
2005-03-26 16:31                                       ` Steven Rostedt
2005-03-26 19:11                                         ` Ingo Molnar
2005-03-26 16:04                                     ` Steven Rostedt
2005-03-30  6:31                                       ` Steven Rostedt
2005-03-30  6:50                                         ` Ingo Molnar
2005-03-30 16:46                                           ` Steven Rostedt
2005-03-30 19:44                                             ` Esben Nielsen
2005-03-30 19:56                                               ` Steven Rostedt
2005-03-30 21:39                                                 ` Steven Rostedt
2005-03-30 21:43                                                   ` Steven Rostedt
2005-03-31 11:03                                                   ` Ingo Molnar
2005-03-31 12:03                                                     ` Esben Nielsen
2005-03-31 12:14                                                       ` Steven Rostedt
2005-03-31 13:33                                                         ` Ingo Molnar
2005-03-31 12:22                                                     ` Steven Rostedt
2005-03-31 12:36                                                     ` Steven Rostedt
2005-03-31 12:58                                                       ` Steven Rostedt
2005-03-31 13:28                                                         ` Ingo Molnar
2005-03-31 12:49                                                     ` Steven Rostedt
2005-03-31 14:10                                                       ` Ingo Molnar
2005-03-31 17:41                                                         ` Steven Rostedt
2005-03-31 17:49                                                           ` Ingo Molnar
2005-03-31 18:17                                                             ` Gene Heskett
2005-03-31 21:00                                                               ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-07 (update) Gene Heskett
2005-03-31 20:22                                                             ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-07 Steven Rostedt
2005-04-01  0:59                                                             ` Steven Rostedt
2005-04-01  4:43                                                               ` Ingo Molnar
2005-04-01  5:13                                                                 ` Steven Rostedt
2005-04-01  5:19                                                                   ` Ingo Molnar
2005-04-01 12:27                                                                     ` Steven Rostedt
2005-04-07 21:21                                                                       ` Steven Rostedt [this message]
2005-04-10 10:31                                                                         ` Ingo Molnar
2005-04-10 15:06                                                                           ` Steven Rostedt
2005-03-24 10:42                               ` Ingo Molnar
2005-03-23  9:40                       ` Herbert Xu
2005-03-23  9:48                         ` Herbert Xu
2005-03-23  5:23                   ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-05 Paul E. McKenney
2005-03-23  4:48                 ` [patch] Real-Time Preemption, -RT-2.6.12-rc1-V0.7.41-01 Paul E. McKenney
2005-03-23  6:21                   ` Ingo Molnar
2005-03-22  8:59           ` Ingo Molnar

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=1112908910.22577.54.camel@localhost.localdomain \
    --to=rostedt@goodmis.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    /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.