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
*/
next prev parent 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox