xfs-masters
[Top] [All Lists]

[xfs-masters] Re: filesystem corruption on xfs after 2.6.25-rc1 (bisecte

To: xfs-masters@xxxxxxxxxxx
Subject: [xfs-masters] Re: filesystem corruption on xfs after 2.6.25-rc1 (bisected, powerpc related?)
From: Eric Sandeen <sandeen@xxxxxxxxxxx>
Date: Tue, 26 Feb 2008 12:05:59 -0800
Cc: "Rafael J. Wysocki" <rjw@xxxxxxx>, Christoph Hellwig <hch@xxxxxx>, xfs@xxxxxxxxxxx, johannes@xxxxxxxxxxxxxxxx, linux-kernel Mailing List <linux-kernel@xxxxxxxxxxxxxxx>
In-reply-to: <20080226114419.GA5353@soziologie.ch>
References: <20080225112310.GA5516@soziologie.ch> <200802260052.57875.rjw@sisk.pl> <20080225235703.GA17530@lst.de> <200802260113.57875.rjw@sisk.pl> <20080226114419.GA5353@soziologie.ch>
Reply-to: xfs-masters@xxxxxxxxxxx
Sender: xfs-masters-bounce@xxxxxxxxxxx
User-agent: Thunderbird 2.0.0.9 (Macintosh/20071031)
Gaudenz Steinlin wrote:
> On Tue, Feb 26, 2008 at 01:13:56AM +0100, Rafael J. Wysocki wrote:
>> On Tuesday, 26 of February 2008, Christoph Hellwig wrote:
>>> On Tue, Feb 26, 2008 at 12:52:56AM +0100, Rafael J. Wysocki wrote:
>>>>> I'm not suggesting a partial revert; I just wonder which part of the
>>>>> change is causing the problem, as part of the debugging process.
> 
> I debuged this a bit further by testing the 4 changed functions
> individually. The problem only occurs with the new version of
> xfs_lowbit64. 

FWIW, Dave & I did some testing/debugging on 32-bit powerpc, and it is
indeed only xfs_lowbit64 which is doing the wrong thing on that arch,
because generic find_next_bit is doing the wrong thing on big-endian
32-bit systems, for sizes > 32 bits, near as I can tell.

Rather than reverting it all, I think just changing xfs_lowbit64 back to:

int
xfs_lowbit64(
       __uint64_t      v)
{
       __uint32_t      w = (__uint32_t)v;
       int             n = 0;

       if (w) {        /* lower bits */
               n = ffs(w);
       } else {        /* upper bits */
               w = (__uint32_t)(v >> 32);
               if (w && (n = ffs(w)))
                       n += 32;
       }
       return n - 1;
}

for now should fix it (this is essentially just ffs64())

-Eric


<Prev in Thread] Current Thread [Next in Thread>