[JAUNTY SRU] UBUNTU: SAUCE: added memory barrier to prevent a reference counter leak.

Manoj Iyer manoj.iyer at canonical.com
Thu Jul 23 19:23:39 UTC 2009


SRU JUSTIFICATION

IMPACT: disk corruption due to a concurrent h_refcounter update which 
produced a reference counter leak, and later error from ext3

FIX: launchpad bug #209346, is caused by atleast three known factors.
1. File system inconsistency
2. Hardware problems
3. Misplaced memory barrier

As noted by a contributer to this bug, the Red Hat errata suggests a fix 
to the memory barrier issue, which this patch addresses. This patch fixes 
only one of the reasons users are seeing data corruption on 64bit Jaunty 
systems, and does not address the other two known reasons.

TEST: This patch was reported to work for one(3) of the 3 causes of disk 
corruption.

The following changes since commit 
80a926a9ba2b651ddd717c3ed4f6429b6bb4020b:
   Matthew Garrett (1):
         UBUNTU: SAUCE: ACPI: Populate DIDL before registering ACPI video 
device on Intel

are available in the git repository at:

   git://kernel.ubuntu.com/manjo/ubuntu-jaunty.git lp209346

Manoj Iyer (1):
       UBUNTU: SAUCE: added memory barrier to prevent a reference counter 
leak.

  fs/buffer.c |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)


>From 7b75d3934b7641f74d42e007a2da52d06f4248c0 Mon Sep 17 00:00:00 2001
From: Manoj Iyer <manoj.iyer at canonical.com>
Date: Thu, 23 Jul 2009 13:59:20 -0500
Subject: [PATCH] UBUNTU: SAUCE: added memory barrier to prevent a reference counter leak.

OriginalLocation: http://rhn.redhat.com/errata/RHSA-2009-0331.html
BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/209346

launchpad bug #209346, is caused by atleast three known factors.
1. File system inconsistency
2. Hardware problems
3. Misplaced memory barrier

As noted by a contributer to this bug, the Red Hat errata suggests a fix to
the memory barrier issue, which this patch addresses. This patch fixes only
one of the reasons users are seeing data corruption on 64bit Jaunty systems,
and does not address the other two known reasons.

Signed-off-by: Manoj Iyer <manoj.iyer at canonical.com>
---
  fs/buffer.c |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/fs/buffer.c b/fs/buffer.c
index 7e16a78..ea2a654 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -76,6 +76,7 @@ EXPORT_SYMBOL(__lock_buffer);

  void unlock_buffer(struct buffer_head *bh)
  {
+	smp_mb__before_clear_bit();
  	clear_bit_unlock(BH_Lock, &bh->b_state);
  	smp_mb__after_clear_bit();
  	wake_up_bit(&bh->b_state, BH_Lock);
-- 
1.6.3.3


Cheers
--- manjo




More information about the kernel-team mailing list