2003-08-02 20:37:26

by Martin Schlemmer

[permalink] [raw]
Subject: [2.6] Perl weirdness with ext3 and HTREE

Hi

I have mailed about this previously, but back then it was not
really confirmed, so I have let it be at that.

Anyhow, problem is that for some reason 2.5/2.6 ext3 with HTREE
support do not like what perl-5.8.0 does during installation.
It *seems* like one of the temporary files created during manpage
installation do not get unlinked properly, or gets into the
hash (this possible?) and cause issues.

It seems to work flawless on 2.4 still.

Also, to be honest, I do not have that much free time these days,
so if an interest in helping me/us debug this, it will be appreciated
if some direction in what is needed/suggestions can be given as to what
is required. There are a few users that experience this issue, and
I am sure that we can get whatever info needed.

A bug on our tracker is here with more (hopefully) complete info:

http://bugs.gentoo.org/show_bug.cgi?id=24991


Thanks,

--

Martin Schlemmer




Attachments:
signature.asc (189.00 B)
This is a digitally signed message part

2003-08-03 07:02:20

by Danek Duvall

[permalink] [raw]
Subject: Re: [2.6] Perl weirdness with ext3 and HTREE

I'm seeing this as well, and will be quite happy to try any patches that
might come out for the problem.

Danek

2003-08-03 12:51:14

by Martin Schlemmer

[permalink] [raw]
Subject: Re: [2.6] Perl weirdness with ext3 and HTREE

On Sun, 2003-08-03 at 09:34, Alex Tomas wrote:
> could you send full strace for this?
>

Complete strace can be found here:

http://dev.gentoo.org/~azarah/trace.log.bz2

> >>>>> Martin Schlemmer (MS) writes:
>
> MS> Hi
> MS> I have mailed about this previously, but back then it was not
> MS> really confirmed, so I have let it be at that.
>
> MS> Anyhow, problem is that for some reason 2.5/2.6 ext3 with HTREE
> MS> support do not like what perl-5.8.0 does during installation.
> MS> It *seems* like one of the temporary files created during manpage
> MS> installation do not get unlinked properly, or gets into the
> MS> hash (this possible?) and cause issues.
>
> MS> It seems to work flawless on 2.4 still.
>
> MS> Also, to be honest, I do not have that much free time these days,
> MS> so if an interest in helping me/us debug this, it will be appreciated
> MS> if some direction in what is needed/suggestions can be given as to what
> MS> is required. There are a few users that experience this issue, and
> MS> I am sure that we can get whatever info needed.
>
> MS> A bug on our tracker is here with more (hopefully) complete info:
>
> MS> http://bugs.gentoo.org/show_bug.cgi?id=24991
>
>
> MS> Thanks,
>
> MS> --
>
> MS> Martin Schlemmer
>
>
--

Martin Schlemmer




Attachments:
signature.asc (189.00 B)
This is a digitally signed message part

2003-08-05 18:31:12

by Christopher Li

[permalink] [raw]
Subject: Re: [2.6] Perl weirdness with ext3 and HTREE

I can take a look at it.

Is there any way to reproduce this bug without installing the
whole gentoo? It would be nice if I can just download some
package to make it happen.

Thanks,

Chris


On Sat, Aug 02, 2003 at 10:37:05PM +0200, Martin Schlemmer wrote:
> Hi
>
> I have mailed about this previously, but back then it was not
> really confirmed, so I have let it be at that.
>
> Anyhow, problem is that for some reason 2.5/2.6 ext3 with HTREE
> support do not like what perl-5.8.0 does during installation.
> It *seems* like one of the temporary files created during manpage
> installation do not get unlinked properly, or gets into the
> hash (this possible?) and cause issues.
>
> It seems to work flawless on 2.4 still.
>
> Also, to be honest, I do not have that much free time these days,
> so if an interest in helping me/us debug this, it will be appreciated
> if some direction in what is needed/suggestions can be given as to what
> is required. There are a few users that experience this issue, and
> I am sure that we can get whatever info needed.
>
> A bug on our tracker is here with more (hopefully) complete info:
>
> http://bugs.gentoo.org/show_bug.cgi?id=24991
>
>
> Thanks,
>
> --
>
> Martin Schlemmer
>
>
>




2003-08-05 19:23:19

by Martin Schlemmer

[permalink] [raw]
Subject: Re: [2.6] Perl weirdness with ext3 and HTREE

On Tue, 2003-08-05 at 20:28, Christopher Li wrote:
> I can take a look at it.
>
> Is there any way to reproduce this bug without installing the
> whole gentoo? It would be nice if I can just download some
> package to make it happen.
>

I cannot really see that it is a Gentoo specific problem, but who knows.
I will try to get a CD of another distro somewhere, and get that on a
box to test - currently work/whatnot just keeps me pretty tied up :(
Another reason why I posted, is now that 2.6 is more widely used/tested,
its not only me that gets this, but other users as well - thus I hoped
that somebody with more time wanted to have a crack at it.

Back to the problem - on the same system, a 2.4 kernel works fine, but
a 2.5/6 kernel activates a race that creates an invalid entry. I guess
the primary reason why not many people see this, is because most
non-Gentoo folk do not compile perl-5.8.0 from source.

Just grab the perl source, if you want, I can mail you the ebuild that
should give some direction in how to compile it, or grab your local
.spec, configure it (maybe with install location not in /), and then
just compile and finally install to a ext3 FS with HTREE enabled.
Usually over here, it keeps on leaving an invalid entry to
..usr/share/man/man3/Hash::Util.tmp.

If it works fine (with a 2.6 kernel), I will go and bang my head against
a wall, and shutup until I can make time to try and track this - if not,
any ideas as to creating it outside the perl install (or rather the man
page part of the install process) would be great.


Thanks,

> Thanks,
>
> Chris
>
>
> On Sat, Aug 02, 2003 at 10:37:05PM +0200, Martin Schlemmer wrote:
> > Hi
> >
> > I have mailed about this previously, but back then it was not
> > really confirmed, so I have let it be at that.
> >
> > Anyhow, problem is that for some reason 2.5/2.6 ext3 with HTREE
> > support do not like what perl-5.8.0 does during installation.
> > It *seems* like one of the temporary files created during manpage
> > installation do not get unlinked properly, or gets into the
> > hash (this possible?) and cause issues.
> >
> > It seems to work flawless on 2.4 still.
> >
> > Also, to be honest, I do not have that much free time these days,
> > so if an interest in helping me/us debug this, it will be appreciated
> > if some direction in what is needed/suggestions can be given as to what
> > is required. There are a few users that experience this issue, and
> > I am sure that we can get whatever info needed.
> >
> > A bug on our tracker is here with more (hopefully) complete info:
> >
> > http://bugs.gentoo.org/show_bug.cgi?id=24991
> >
> >
> > Thanks,
> >
> > --
> >
> > Martin Schlemmer
> >
> >
> >
>
>
--

Martin Schlemmer




Attachments:
signature.asc (189.00 B)
This is a digitally signed message part

2003-08-05 21:54:06

by Christopher Li

[permalink] [raw]
Subject: RE: [2.6] Perl weirdness with ext3 and HTREE



> -----Original Message-----
> From: Martin Schlemmer [mailto:[email protected]]
> Sent: Tuesday, August 05, 2003 12:23 PM
> To: Christopher Li
> Cc: KML; [email protected]; [email protected]; [email protected];
> [email protected]
> Subject: Re: [2.6] Perl weirdness with ext3 and HTREE
>
>
> On Tue, 2003-08-05 at 20:28, Christopher Li wrote:
> > I can take a look at it.
> >
> > Is there any way to reproduce this bug without installing the
> > whole gentoo? It would be nice if I can just download some
> > package to make it happen.
> >
>
> I cannot really see that it is a Gentoo specific problem, but
> who knows.
> I will try to get a CD of another distro somewhere, and get that on a
> box to test - currently work/whatnot just keeps me pretty tied up :(
> Another reason why I posted, is now that 2.6 is more widely
> used/tested,
> its not only me that gets this, but other users as well - thus I hoped
> that somebody with more time wanted to have a crack at it.

I am not claiming it is a gentoo issue. I just want to duplicate
this bug with minimal damage to my box.

>
> Back to the problem - on the same system, a 2.4 kernel works fine, but
> a 2.5/6 kernel activates a race that creates an invalid
> entry. I guess
> the primary reason why not many people see this, is because most
> non-Gentoo folk do not compile perl-5.8.0 from source.
>
> Just grab the perl source, if you want, I can mail you the ebuild that
> should give some direction in how to compile it, or grab your local
> .spec, configure it (maybe with install location not in /), and then
> just compile and finally install to a ext3 FS with HTREE enabled.
> Usually over here, it keeps on leaving an invalid entry to
> ..usr/share/man/man3/Hash::Util.tmp.

OK, I will try the perl install first.

>
> If it works fine (with a 2.6 kernel), I will go and bang my
> head against
> a wall, and shutup until I can make time to try and track
> this - if not,
> any ideas as to creating it outside the perl install (or
> rather the man
> page part of the install process) would be great.
>

You can do a strace on the perl install, then grep for all
the file changes happen on that directory. There is a good
chance follow the strace log can duplicate the bug also.

Thanks

Chris

>
>


2003-08-05 22:08:20

by Martin Schlemmer

[permalink] [raw]
Subject: RE: [2.6] Perl weirdness with ext3 and HTREE

On Tue, 2003-08-05 at 23:53, Christopher Li wrote:

> >
> > I cannot really see that it is a Gentoo specific problem, but
> > who knows.
> > I will try to get a CD of another distro somewhere, and get that on a
> > box to test - currently work/whatnot just keeps me pretty tied up :(
> > Another reason why I posted, is now that 2.6 is more widely
> > used/tested,
> > its not only me that gets this, but other users as well - thus I hoped
> > that somebody with more time wanted to have a crack at it.
>
> I am not claiming it is a gentoo issue. I just want to duplicate
> this bug with minimal damage to my box.
>

Yep, I know, I just 'clarified' it in case somebody was wondering.

> >
> > If it works fine (with a 2.6 kernel), I will go and bang my
> > head against
> > a wall, and shutup until I can make time to try and track
> > this - if not,
> > any ideas as to creating it outside the perl install (or
> > rather the man
> > page part of the install process) would be great.
> >
>
> You can do a strace on the perl install, then grep for all
> the file changes happen on that directory. There is a good
> chance follow the strace log can duplicate the bug also.

Yep, did that. I had a simple c program once that tried to
simulate all file operations on that file, and the 'real'
man page that gets installed. Did not have the same effect
however. Might be that I was off by something. Don't have
it however anymore, as it was some months before, just before
I mailed the first time.


Thanks,

--

Martin Schlemmer




Attachments:
signature.asc (189.00 B)
This is a digitally signed message part

2003-08-05 22:40:21

by Christopher Li

[permalink] [raw]
Subject: RE: [2.6] Perl weirdness with ext3 and HTREE



> -----Original Message-----
> From: Martin Schlemmer [mailto:[email protected]]
> Sent: Tuesday, August 05, 2003 3:08 PM
> To: Christopher Li
> Cc: KML; [email protected]; [email protected]; [email protected];
> [email protected]
> Subject: RE: [2.6] Perl weirdness with ext3 and HTREE

> Yep, did that. I had a simple c program once that tried to
> simulate all file operations on that file, and the 'real'

It is all the file operations on that *directory* that matters.
Touch a single file is unlikely make htree split.

> man page that gets installed. Did not have the same effect
> however. Might be that I was off by something. Don't have
> it however anymore, as it was some months before, just before
> I mailed the first time.
>

Chris


2003-08-06 01:03:47

by Patrick McLean

[permalink] [raw]
Subject: Re: [2.6] Perl weirdness with ext3 and HTREE

It is possible to install gentoo in a subdir of your main box, just
unzip the tarball
into that directory, then chroot to it and follow the rest of the steps
for installation
(skipping kernel, bootloader, syslog, etc of course), then you can test
stuff out by just chrooting to the gentoo dir, and doing "env-update ;
source /etc/profile".

Christopher Li wrote:

>I can take a look at it.
>
>Is there any way to reproduce this bug without installing the
>whole gentoo? It would be nice if I can just download some
>package to make it happen.
>
>Thanks,
>
>Chris
>
>
>On Sat, Aug 02, 2003 at 10:37:05PM +0200, Martin Schlemmer wrote:
>
>
>>Hi
>>
>>I have mailed about this previously, but back then it was not
>>really confirmed, so I have let it be at that.
>>
>>Anyhow, problem is that for some reason 2.5/2.6 ext3 with HTREE
>>support do not like what perl-5.8.0 does during installation.
>>It *seems* like one of the temporary files created during manpage
>>installation do not get unlinked properly, or gets into the
>>hash (this possible?) and cause issues.
>>
>>It seems to work flawless on 2.4 still.
>>
>>Also, to be honest, I do not have that much free time these days,
>>so if an interest in helping me/us debug this, it will be appreciated
>>if some direction in what is needed/suggestions can be given as to what
>>is required. There are a few users that experience this issue, and
>>I am sure that we can get whatever info needed.
>>
>>A bug on our tracker is here with more (hopefully) complete info:
>>
>> http://bugs.gentoo.org/show_bug.cgi?id=24991
>>
>>
>>Thanks,
>>
>>--
>>
>>Martin Schlemmer
>>
>>
>>
>>
>>
>
>
>
>
>-
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to [email protected]
>More majordomo info at http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at http://www.tux.org/lkml/
>
>

2003-08-06 20:22:45

by Christopher Li

[permalink] [raw]
Subject: RE: [2.6] Perl weirdness with ext3 and HTREE



> -----Original Message-----
> From: Martin Schlemmer [mailto:[email protected]]
> Sent: Tuesday, August 05, 2003 12:23 PM
> To: Christopher Li
> Cc: KML; [email protected]; [email protected]; [email protected];
> [email protected]
> Subject: Re: [2.6] Perl weirdness with ext3 and HTREE
>
>
> On Tue, 2003-08-05 at 20:28, Christopher Li wrote:
> > I can take a look at it.
> >
> > Is there any way to reproduce this bug without installing the
> > whole gentoo? It would be nice if I can just download some
> > package to make it happen.
> >
>
> Just grab the perl source, if you want, I can mail you the ebuild that
> should give some direction in how to compile it, or grab your local
> .spec, configure it (maybe with install location not in /), and then
> just compile and finally install to a ext3 FS with HTREE enabled.
> Usually over here, it keeps on leaving an invalid entry to
> ..usr/share/man/man3/Hash::Util.tmp.
>

I am running 2.6-test2 kernel. Download the perl 5.8.0 (stable.tar.gz).
./Configure --prefix=/mnt/hdc3; make; make install.

It did not happen for me. Hash::Util.3 was installed correctly.
(Of course, I did turn on directory index)

Can you send me more infomation how you build the perl package
and install it? I guess I have to do more gentoo like step to duplicate
it :-)

Thanks

Chris



2003-08-06 22:28:31

by Martin Schlemmer

[permalink] [raw]
Subject: RE: [2.6] Perl weirdness with ext3 and HTREE

On Wed, 2003-08-06 at 22:22, Christopher Li wrote:

> > Just grab the perl source, if you want, I can mail you the ebuild that
> > should give some direction in how to compile it, or grab your local
> > .spec, configure it (maybe with install location not in /), and then
> > just compile and finally install to a ext3 FS with HTREE enabled.
> > Usually over here, it keeps on leaving an invalid entry to
> > ..usr/share/man/man3/Hash::Util.tmp.
> >
>
> I am running 2.6-test2 kernel. Download the perl 5.8.0 (stable.tar.gz).
> ./Configure --prefix=/mnt/hdc3; make; make install.
>
> It did not happen for me. Hash::Util.3 was installed correctly.
> (Of course, I did turn on directory index)
>
> Can you send me more infomation how you build the perl package
> and install it? I guess I have to do more gentoo like step to duplicate
> it :-)
>

I have gotten a few of these while testing:

-----------------------------------------
EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file
(4759186), 0
Slab corruption: start=cb147184, expend=cb14736f, problemat=cb1471f8
Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
Data:
********************************************************************************************************************F4 F1 15 F6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
slab error in check_poison_obj(): cache `ext3_inode_cache': object was
modified after freeing
Call Trace:
[<c0141634>] check_poison_obj+0x161/0x1a1
[<c0143128>] kmem_cache_alloc+0x11f/0x159
[<c019ae46>] ext3_alloc_inode+0x18/0x34
[<c019ae46>] ext3_alloc_inode+0x18/0x34
[<c0171f74>] alloc_inode+0x1c/0x14d
[<c01729db>] new_inode+0x1a/0xa2
[<c0192207>] ext3_new_inode+0x41/0x6d8
[<c014313c>] kmem_cache_alloc+0x133/0x159
[<c01a0244>] new_handle+0x1c/0x4e
[<c01992e4>] ext3_mkdir+0x74/0x2b6
[<c01665dc>] permission+0x2f/0x4b
[<c0168555>] vfs_mkdir+0x6d/0xbf
[<c016865e>] sys_mkdir+0xb7/0xf7
[<c010aaa5>] sysenter_past_esp+0x52/0x71

-----------------------------------------

A more complete one is attached (just more similar ones).

Attached is a script (test.sh) and a list of man page names (list) that
I can recreate it without needing perl. The list may or may not be
pruned some more, but I will try tonight again after some sleep ;)

Here is a test run (note that it do the same with symlinks instead of
hard links):

-----------------------------------------
nosferatu space # uname -a
Linux nosferatu 2.6.0-test2-bk5 #2 SMP Wed Aug 6 00:21:15 SAST 2003 i686
Intel(R) Pentium(R) 4 CPU 2.40GHz GenuineIntel GNU/Linux
nosferatu space # dumpe2fs /dev/hdc1 | grep features
dumpe2fs 1.34 (25-Jul-2003)
Filesystem features: has_journal dir_index filetype needs_recovery
sparse_super large_file
nosferatu space # pwd
/space
nosferatu space # mount | grep `pwd`
/dev/hdc1 on /space type ext3 (rw,noatime)
nosferatu space # ls foo/
ls: foo/: No such file or directory
nosferatu space # cat test.sh
#!/bin/bash

i=1

testdir="`pwd`/foo"

(rm -rf "$testdir"; rm -rf "$testdir") &>/dev/null
mkdir -p "$testdir"

for x in $(cat list)
do
temp="$testdir/${x/3pm/tmp}"
x="$testdir/${x}"

touch "$temp"
ln "$temp" "$x"
rm -f "$temp"

# echo "Pass $i"

# i=$((i+1))
done

nosferatu space # ./test.sh
nosferatu space # ls foo/
ls: foo/Win32.tmp: No such file or directory
Fcntl.3pm PerlIO::via.3pm
Hash::Util.3pm PerlIO::via::QuotedPrint.3pm
I18N::Collate.3pm Pod::Checker.3pm
I18N::LangTags.3pm Pod::Find.3pm
I18N::LangTags::List.3pm Pod::Html.3pm
I18N::Langinfo.3pm Pod::InputObjects.3pm
IO.3pm Pod::LaTeX.3pm
IO::Dir.3pm Pod::Man.3pm
IO::File.3pm Pod::ParseLink.3pm
IO::Handle.3pm Pod::ParseUtils.3pm
IO::Pipe.3pm Pod::Parser.3pm
IO::Poll.3pm Pod::Plainer.3pm
IO::Seekable.3pm Pod::Select.3pm
IO::Select.3pm Pod::Text.3pm
IO::Socket.3pm Pod::Text::Color.3pm
IO::Socket::INET.3pm Pod::Text::Overstrike.3pm
IO::Socket::UNIX.3pm Pod::Text::Termcap.3pm
IPC::Msg.3pm Pod::Usage.3pm
IPC::Open2.3pm SDBM_File.3pm
IPC::Open3.3pm Safe.3pm
IPC::Semaphore.3pm Scalar::Util.3pm
IPC::SysV.3pm Search::Dict.3pm
List::Util.3pm SelectSaver.3pm
Locale::Constants.3pm SelfLoader.3pm
Locale::Country.3pm Shell.3pm
Locale::Currency.3pm Socket.3pm
Locale::Language.3pm Storable.3pm
Locale::Maketext.3pm Switch.3pm
Locale::Maketext::TPJ13.3pm Symbol.3pm
Locale::Script.3pm Sys::Hostname.3pm
MIME::Base64.3pm Sys::Syslog.3pm
MIME::QuotedPrint.3pm Term::ANSIColor.3pm
Math::BigFloat.3pm Term::Cap.3pm
Math::BigFloat::Trace.3pm Term::Complete.3pm
Math::BigInt.3pm Term::ReadLine.3pm
Math::BigInt::Calc.3pm Test.3pm
Math::BigInt::Trace.3pm Test::Builder.3pm
Math::BigRat.3pm Test::Harness.3pm
Math::Complex.3pm Test::Harness::Assert.3pm
Math::Trig.3pm Test::Harness::Iterator.3pm
Memoize.3pm Test::Harness::Straps.3pm
Memoize::AnyDBM_File.3pm Test::More.3pm
Memoize::Expire.3pm Test::Simple.3pm
Memoize::ExpireFile.3pm Test::Tutorial.3pm
Memoize::ExpireTest.3pm Text::Abbrev.3pm
Memoize::NDBM_File.3pm Text::Balanced.3pm
Memoize::SDBM_File.3pm Text::ParseWords.3pm
Memoize::Storable.3pm Text::Soundex.3pm
NDBM_File.3pm Text::Tabs.3pm
NEXT.3pm Text::Wrap.3pm
Net::Cmd.3pm Thread.3pm
Net::Config.3pm Thread::Queue.3pm
Net::Domain.3pm Thread::Semaphore.3pm
Net::FTP.3pm Tie::Array.3pm
Net::FTP::A.3pm Tie::File.3pm
Net::FTP::E.3pm Tie::Handle.3pm
Net::FTP::I.3pm Tie::Hash.3pm
Net::FTP::L.3pm Tie::Memoize.3pm
Net::FTP::dataconn.3pm Tie::RefHash.3pm
Net::NNTP.3pm Tie::Scalar.3pm
Net::Netrc.3pm Tie::SubstrHash.3pm
Net::POP3.3pm Time::HiRes.3pm
Net::Ping.3pm Time::Local.3pm
Net::SMTP.3pm Time::gmtime.3pm
Net::Time.3pm Time::localtime.3pm
Net::hostent.3pm Time::tm.3pm
Net::libnetFAQ.3pm UNIVERSAL.3pm
Net::netent.3pm Unicode::Collate.3pm
Net::protoent.3pm Unicode::Normalize.3pm
Net::servent.3pm Unicode::UCD.3pm
O.3pm User::grent.3pm
Opcode.3pm User::pwent.3pm
POSIX.3pm Win32.3pm
PerlIO.3pm XS::APItest.3pm
PerlIO::encoding.3pm XS::Typemap.3pm
PerlIO::scalar.3pm XSLoader.3pm
nosferatu space #
----------------------------------


Thanks,

--

Martin Schlemmer




Attachments:
log.txt (7.81 kB)
test.sh (293.00 B)
list (2.67 kB)
signature.asc (189.00 B)
This is a digitally signed message part
Download all attachments

2003-08-08 19:50:32

by Christopher Li

[permalink] [raw]
Subject: RE: [2.6] Perl weirdness with ext3 and HTREE

Thanks, that script has successfully massed up my box.
I will play with it in the weekend.

Chris

> -----Original Message-----
> From: Martin Schlemmer [mailto:[email protected]]
> Sent: Wednesday, August 06, 2003 3:28 PM
> To: Christopher Li
> Cc: KML; [email protected]; [email protected]; [email protected];
> [email protected]
> Subject: RE: [2.6] Perl weirdness with ext3 and HTREE
>
>
> On Wed, 2003-08-06 at 22:22, Christopher Li wrote:
>
> > > Just grab the perl source, if you want, I can mail you
> the ebuild that
> > > should give some direction in how to compile it, or grab
> your local
> > > .spec, configure it (maybe with install location not in
> /), and then
> > > just compile and finally install to a ext3 FS with HTREE enabled.
> > > Usually over here, it keeps on leaving an invalid entry to
> > > ..usr/share/man/man3/Hash::Util.tmp.
> > >
> >
> > I am running 2.6-test2 kernel. Download the perl 5.8.0
> (stable.tar.gz).
> > ./Configure --prefix=/mnt/hdc3; make; make install.
> >
> > It did not happen for me. Hash::Util.3 was installed correctly.
> > (Of course, I did turn on directory index)
> >
> > Can you send me more infomation how you build the perl package
> > and install it? I guess I have to do more gentoo like step
> to duplicate
> > it :-)
> >
>
> I have gotten a few of these while testing:
>
> -----------------------------------------
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file
> (4759186), 0
> Slab corruption: start=cb147184, expend=cb14736f, problemat=cb1471f8
> Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> Data:
> **************************************************************
> ******************************************************F4 F1
> 15 F6
> **************************************************************
> **************************************************************
> **************************************************************
> **************************************************************
> **************************************************************
> *************************************************************A5
> Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> slab error in check_poison_obj(): cache `ext3_inode_cache': object was
> modified after freeing
> Call Trace:
> [<c0141634>] check_poison_obj+0x161/0x1a1
> [<c0143128>] kmem_cache_alloc+0x11f/0x159
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c0171f74>] alloc_inode+0x1c/0x14d
> [<c01729db>] new_inode+0x1a/0xa2
> [<c0192207>] ext3_new_inode+0x41/0x6d8
> [<c014313c>] kmem_cache_alloc+0x133/0x159
> [<c01a0244>] new_handle+0x1c/0x4e
> [<c01992e4>] ext3_mkdir+0x74/0x2b6
> [<c01665dc>] permission+0x2f/0x4b
> [<c0168555>] vfs_mkdir+0x6d/0xbf
> [<c016865e>] sys_mkdir+0xb7/0xf7
> [<c010aaa5>] sysenter_past_esp+0x52/0x71
>
> -----------------------------------------
>
> A more complete one is attached (just more similar ones).
>
> Attached is a script (test.sh) and a list of man page names
> (list) that
> I can recreate it without needing perl. The list may or may not be
> pruned some more, but I will try tonight again after some sleep ;)
>
> Here is a test run (note that it do the same with symlinks instead of
> hard links):
>
> -----------------------------------------
> nosferatu space # uname -a
> Linux nosferatu 2.6.0-test2-bk5 #2 SMP Wed Aug 6 00:21:15
> SAST 2003 i686
> Intel(R) Pentium(R) 4 CPU 2.40GHz GenuineIntel GNU/Linux
> nosferatu space # dumpe2fs /dev/hdc1 | grep features
> dumpe2fs 1.34 (25-Jul-2003)
> Filesystem features: has_journal dir_index filetype
> needs_recovery
> sparse_super large_file
> nosferatu space # pwd
> /space
> nosferatu space # mount | grep `pwd`
> /dev/hdc1 on /space type ext3 (rw,noatime)
> nosferatu space # ls foo/
> ls: foo/: No such file or directory
> nosferatu space # cat test.sh
> #!/bin/bash
>
> i=1
>
> testdir="`pwd`/foo"
>
> (rm -rf "$testdir"; rm -rf "$testdir") &>/dev/null
> mkdir -p "$testdir"
>
> for x in $(cat list)
> do
> temp="$testdir/${x/3pm/tmp}"
> x="$testdir/${x}"
>
> touch "$temp"
> ln "$temp" "$x"
> rm -f "$temp"
>
> # echo "Pass $i"
>
> # i=$((i+1))
> done
>
> nosferatu space # ./test.sh
> nosferatu space # ls foo/
> ls: foo/Win32.tmp: No such file or directory
> Fcntl.3pm PerlIO::via.3pm
> Hash::Util.3pm PerlIO::via::QuotedPrint.3pm
> I18N::Collate.3pm Pod::Checker.3pm
> I18N::LangTags.3pm Pod::Find.3pm
> I18N::LangTags::List.3pm Pod::Html.3pm
> I18N::Langinfo.3pm Pod::InputObjects.3pm
> IO.3pm Pod::LaTeX.3pm
> IO::Dir.3pm Pod::Man.3pm
> IO::File.3pm Pod::ParseLink.3pm
> IO::Handle.3pm Pod::ParseUtils.3pm
> IO::Pipe.3pm Pod::Parser.3pm
> IO::Poll.3pm Pod::Plainer.3pm
> IO::Seekable.3pm Pod::Select.3pm
> IO::Select.3pm Pod::Text.3pm
> IO::Socket.3pm Pod::Text::Color.3pm
> IO::Socket::INET.3pm Pod::Text::Overstrike.3pm
> IO::Socket::UNIX.3pm Pod::Text::Termcap.3pm
> IPC::Msg.3pm Pod::Usage.3pm
> IPC::Open2.3pm SDBM_File.3pm
> IPC::Open3.3pm Safe.3pm
> IPC::Semaphore.3pm Scalar::Util.3pm
> IPC::SysV.3pm Search::Dict.3pm
> List::Util.3pm SelectSaver.3pm
> Locale::Constants.3pm SelfLoader.3pm
> Locale::Country.3pm Shell.3pm
> Locale::Currency.3pm Socket.3pm
> Locale::Language.3pm Storable.3pm
> Locale::Maketext.3pm Switch.3pm
> Locale::Maketext::TPJ13.3pm Symbol.3pm
> Locale::Script.3pm Sys::Hostname.3pm
> MIME::Base64.3pm Sys::Syslog.3pm
> MIME::QuotedPrint.3pm Term::ANSIColor.3pm
> Math::BigFloat.3pm Term::Cap.3pm
> Math::BigFloat::Trace.3pm Term::Complete.3pm
> Math::BigInt.3pm Term::ReadLine.3pm
> Math::BigInt::Calc.3pm Test.3pm
> Math::BigInt::Trace.3pm Test::Builder.3pm
> Math::BigRat.3pm Test::Harness.3pm
> Math::Complex.3pm Test::Harness::Assert.3pm
> Math::Trig.3pm Test::Harness::Iterator.3pm
> Memoize.3pm Test::Harness::Straps.3pm
> Memoize::AnyDBM_File.3pm Test::More.3pm
> Memoize::Expire.3pm Test::Simple.3pm
> Memoize::ExpireFile.3pm Test::Tutorial.3pm
> Memoize::ExpireTest.3pm Text::Abbrev.3pm
> Memoize::NDBM_File.3pm Text::Balanced.3pm
> Memoize::SDBM_File.3pm Text::ParseWords.3pm
> Memoize::Storable.3pm Text::Soundex.3pm
> NDBM_File.3pm Text::Tabs.3pm
> NEXT.3pm Text::Wrap.3pm
> Net::Cmd.3pm Thread.3pm
> Net::Config.3pm Thread::Queue.3pm
> Net::Domain.3pm Thread::Semaphore.3pm
> Net::FTP.3pm Tie::Array.3pm
> Net::FTP::A.3pm Tie::File.3pm
> Net::FTP::E.3pm Tie::Handle.3pm
> Net::FTP::I.3pm Tie::Hash.3pm
> Net::FTP::L.3pm Tie::Memoize.3pm
> Net::FTP::dataconn.3pm Tie::RefHash.3pm
> Net::NNTP.3pm Tie::Scalar.3pm
> Net::Netrc.3pm Tie::SubstrHash.3pm
> Net::POP3.3pm Time::HiRes.3pm
> Net::Ping.3pm Time::Local.3pm
> Net::SMTP.3pm Time::gmtime.3pm
> Net::Time.3pm Time::localtime.3pm
> Net::hostent.3pm Time::tm.3pm
> Net::libnetFAQ.3pm UNIVERSAL.3pm
> Net::netent.3pm Unicode::Collate.3pm
> Net::protoent.3pm Unicode::Normalize.3pm
> Net::servent.3pm Unicode::UCD.3pm
> O.3pm User::grent.3pm
> Opcode.3pm User::pwent.3pm
> POSIX.3pm Win32.3pm
> PerlIO.3pm XS::APItest.3pm
> PerlIO::encoding.3pm XS::Typemap.3pm
> PerlIO::scalar.3pm XSLoader.3pm
> nosferatu space #
> ----------------------------------
>
>
> Thanks,
>
> --
>
> Martin Schlemmer
>
>
>
>


2003-08-08 23:19:28

by Martin Schlemmer

[permalink] [raw]
Subject: RE: [2.6] Perl weirdness with ext3 and HTREE - Verified ?

On Fri, 2003-08-08 at 21:50, Christopher Li wrote:
> Thanks, that script has successfully massed up my box.
> I will play with it in the weekend.
>

Great (don't take this badly =) ), at least now it is not a
'local' problem only.

I will also try to dig a bit deeper, but will only be this
afternoon (past 1am now, got home from work 2 hours back :().


Thanks,

> Chris
>
> > -----Original Message-----
> > From: Martin Schlemmer [mailto:[email protected]]
> > Sent: Wednesday, August 06, 2003 3:28 PM
> > To: Christopher Li
> > Cc: KML; [email protected]; [email protected]; [email protected];
> > [email protected]
> > Subject: RE: [2.6] Perl weirdness with ext3 and HTREE
> >
> >
> > On Wed, 2003-08-06 at 22:22, Christopher Li wrote:
> >
> > > > Just grab the perl source, if you want, I can mail you
> > the ebuild that
> > > > should give some direction in how to compile it, or grab
> > your local
> > > > .spec, configure it (maybe with install location not in
> > /), and then
> > > > just compile and finally install to a ext3 FS with HTREE enabled.
> > > > Usually over here, it keeps on leaving an invalid entry to
> > > > ..usr/share/man/man3/Hash::Util.tmp.
> > > >
> > >
> > > I am running 2.6-test2 kernel. Download the perl 5.8.0
> > (stable.tar.gz).
> > > ./Configure --prefix=/mnt/hdc3; make; make install.
> > >
> > > It did not happen for me. Hash::Util.3 was installed correctly.
> > > (Of course, I did turn on directory index)
> > >
> > > Can you send me more infomation how you build the perl package
> > > and install it? I guess I have to do more gentoo like step
> > to duplicate
> > > it :-)
> > >
> >
> > I have gotten a few of these while testing:
> >
> > -----------------------------------------
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file
> > (4759186), 0
> > Slab corruption: start=cb147184, expend=cb14736f, problemat=cb1471f8
> > Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> > Data:
> > **************************************************************
> > ******************************************************F4 F1
> > 15 F6
> > **************************************************************
> > **************************************************************
> > **************************************************************
> > **************************************************************
> > **************************************************************
> > *************************************************************A5
> > Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> > slab error in check_poison_obj(): cache `ext3_inode_cache': object was
> > modified after freeing
> > Call Trace:
> > [<c0141634>] check_poison_obj+0x161/0x1a1
> > [<c0143128>] kmem_cache_alloc+0x11f/0x159
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c0171f74>] alloc_inode+0x1c/0x14d
> > [<c01729db>] new_inode+0x1a/0xa2
> > [<c0192207>] ext3_new_inode+0x41/0x6d8
> > [<c014313c>] kmem_cache_alloc+0x133/0x159
> > [<c01a0244>] new_handle+0x1c/0x4e
> > [<c01992e4>] ext3_mkdir+0x74/0x2b6
> > [<c01665dc>] permission+0x2f/0x4b
> > [<c0168555>] vfs_mkdir+0x6d/0xbf
> > [<c016865e>] sys_mkdir+0xb7/0xf7
> > [<c010aaa5>] sysenter_past_esp+0x52/0x71
> >
> > -----------------------------------------
> >
> > A more complete one is attached (just more similar ones).
> >
> > Attached is a script (test.sh) and a list of man page names
> > (list) that
> > I can recreate it without needing perl. The list may or may not be
> > pruned some more, but I will try tonight again after some sleep ;)
> >
> > Here is a test run (note that it do the same with symlinks instead of
> > hard links):
> >
> > -----------------------------------------
> > nosferatu space # uname -a
> > Linux nosferatu 2.6.0-test2-bk5 #2 SMP Wed Aug 6 00:21:15
> > SAST 2003 i686
> > Intel(R) Pentium(R) 4 CPU 2.40GHz GenuineIntel GNU/Linux
> > nosferatu space # dumpe2fs /dev/hdc1 | grep features
> > dumpe2fs 1.34 (25-Jul-2003)
> > Filesystem features: has_journal dir_index filetype
> > needs_recovery
> > sparse_super large_file
> > nosferatu space # pwd
> > /space
> > nosferatu space # mount | grep `pwd`
> > /dev/hdc1 on /space type ext3 (rw,noatime)
> > nosferatu space # ls foo/
> > ls: foo/: No such file or directory
> > nosferatu space # cat test.sh
> > #!/bin/bash
> >
> > i=1
> >
> > testdir="`pwd`/foo"
> >
> > (rm -rf "$testdir"; rm -rf "$testdir") &>/dev/null
> > mkdir -p "$testdir"
> >
> > for x in $(cat list)
> > do
> > temp="$testdir/${x/3pm/tmp}"
> > x="$testdir/${x}"
> >
> > touch "$temp"
> > ln "$temp" "$x"
> > rm -f "$temp"
> >
> > # echo "Pass $i"
> >
> > # i=$((i+1))
> > done
> >
> > nosferatu space # ./test.sh
> > nosferatu space # ls foo/
> > ls: foo/Win32.tmp: No such file or directory
> > Fcntl.3pm PerlIO::via.3pm
> > Hash::Util.3pm PerlIO::via::QuotedPrint.3pm
> > I18N::Collate.3pm Pod::Checker.3pm
> > I18N::LangTags.3pm Pod::Find.3pm
> > I18N::LangTags::List.3pm Pod::Html.3pm
> > I18N::Langinfo.3pm Pod::InputObjects.3pm
> > IO.3pm Pod::LaTeX.3pm
> > IO::Dir.3pm Pod::Man.3pm
> > IO::File.3pm Pod::ParseLink.3pm
> > IO::Handle.3pm Pod::ParseUtils.3pm
> > IO::Pipe.3pm Pod::Parser.3pm
> > IO::Poll.3pm Pod::Plainer.3pm
> > IO::Seekable.3pm Pod::Select.3pm
> > IO::Select.3pm Pod::Text.3pm
> > IO::Socket.3pm Pod::Text::Color.3pm
> > IO::Socket::INET.3pm Pod::Text::Overstrike.3pm
> > IO::Socket::UNIX.3pm Pod::Text::Termcap.3pm
> > IPC::Msg.3pm Pod::Usage.3pm
> > IPC::Open2.3pm SDBM_File.3pm
> > IPC::Open3.3pm Safe.3pm
> > IPC::Semaphore.3pm Scalar::Util.3pm
> > IPC::SysV.3pm Search::Dict.3pm
> > List::Util.3pm SelectSaver.3pm
> > Locale::Constants.3pm SelfLoader.3pm
> > Locale::Country.3pm Shell.3pm
> > Locale::Currency.3pm Socket.3pm
> > Locale::Language.3pm Storable.3pm
> > Locale::Maketext.3pm Switch.3pm
> > Locale::Maketext::TPJ13.3pm Symbol.3pm
> > Locale::Script.3pm Sys::Hostname.3pm
> > MIME::Base64.3pm Sys::Syslog.3pm
> > MIME::QuotedPrint.3pm Term::ANSIColor.3pm
> > Math::BigFloat.3pm Term::Cap.3pm
> > Math::BigFloat::Trace.3pm Term::Complete.3pm
> > Math::BigInt.3pm Term::ReadLine.3pm
> > Math::BigInt::Calc.3pm Test.3pm
> > Math::BigInt::Trace.3pm Test::Builder.3pm
> > Math::BigRat.3pm Test::Harness.3pm
> > Math::Complex.3pm Test::Harness::Assert.3pm
> > Math::Trig.3pm Test::Harness::Iterator.3pm
> > Memoize.3pm Test::Harness::Straps.3pm
> > Memoize::AnyDBM_File.3pm Test::More.3pm
> > Memoize::Expire.3pm Test::Simple.3pm
> > Memoize::ExpireFile.3pm Test::Tutorial.3pm
> > Memoize::ExpireTest.3pm Text::Abbrev.3pm
> > Memoize::NDBM_File.3pm Text::Balanced.3pm
> > Memoize::SDBM_File.3pm Text::ParseWords.3pm
> > Memoize::Storable.3pm Text::Soundex.3pm
> > NDBM_File.3pm Text::Tabs.3pm
> > NEXT.3pm Text::Wrap.3pm
> > Net::Cmd.3pm Thread.3pm
> > Net::Config.3pm Thread::Queue.3pm
> > Net::Domain.3pm Thread::Semaphore.3pm
> > Net::FTP.3pm Tie::Array.3pm
> > Net::FTP::A.3pm Tie::File.3pm
> > Net::FTP::E.3pm Tie::Handle.3pm
> > Net::FTP::I.3pm Tie::Hash.3pm
> > Net::FTP::L.3pm Tie::Memoize.3pm
> > Net::FTP::dataconn.3pm Tie::RefHash.3pm
> > Net::NNTP.3pm Tie::Scalar.3pm
> > Net::Netrc.3pm Tie::SubstrHash.3pm
> > Net::POP3.3pm Time::HiRes.3pm
> > Net::Ping.3pm Time::Local.3pm
> > Net::SMTP.3pm Time::gmtime.3pm
> > Net::Time.3pm Time::localtime.3pm
> > Net::hostent.3pm Time::tm.3pm
> > Net::libnetFAQ.3pm UNIVERSAL.3pm
> > Net::netent.3pm Unicode::Collate.3pm
> > Net::protoent.3pm Unicode::Normalize.3pm
> > Net::servent.3pm Unicode::UCD.3pm
> > O.3pm User::grent.3pm
> > Opcode.3pm User::pwent.3pm
> > POSIX.3pm Win32.3pm
> > PerlIO.3pm XS::APItest.3pm
> > PerlIO::encoding.3pm XS::Typemap.3pm
> > PerlIO::scalar.3pm XSLoader.3pm
> > nosferatu space #
> > ----------------------------------
> >
> >
> > Thanks,
> >
> > --
> >
> > Martin Schlemmer
> >
> >
> >
> >
--

Martin Schlemmer




Attachments:
signature.asc (189.00 B)
This is a digitally signed message part

2003-08-19 10:43:38

by Christopher Li

[permalink] [raw]
Subject: [PATCH] fix for htree corruption. Was: [2.6] Perl weirdness with ext3 and HTREE

Martin,

The first patch should fix it. The bug is trigger by creating the index.
Coping out the index we assume the dirents start with the first entry
after "." "..".

It can make the first previous deleted entry reappear.
In the past we set inode to zero for empty entry so this is not
a problem. That is not true any more.

Andrew, I assume touch inode->i_ctime after
ext3_mark_inode_dirty is a bug? The second patch is for that.


Chris

===== namei.c 1.44 vs edited =====
--- 1.44/fs/ext3/namei.c Sun Jun 29 23:49:04 2003
+++ edited/namei.c Tue Aug 19 03:28:52 2003
@@ -1304,7 +1304,8 @@
data1 = bh2->b_data;

/* The 0th block becomes the root, move the dirents out */
- de = (struct ext3_dir_entry_2 *) &root->info;
+ de = &root->dotdot;
+ de = (struct ext3_dir_entry_2 *) ((char *)de + de->rec_len);
len = ((char *) root) + blocksize - (char *) de;
memcpy (data1, de, len);
de = (struct ext3_dir_entry_2 *) data1;




===== namei.c 1.44 vs edited =====
--- 1.44/fs/ext3/namei.c Sun Jun 29 23:49:04 2003
+++ edited/namei.c Tue Aug 19 03:28:52 2003
@@ -2006,9 +2007,9 @@
* recovery. */
inode->i_size = 0;
ext3_orphan_add(handle, inode);
+ inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
ext3_mark_inode_dirty(handle, inode);
dir->i_nlink--;
- inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
ext3_update_dx_flag(dir);
ext3_mark_inode_dirty(handle, dir);

@@ -2060,8 +2061,8 @@
inode->i_nlink--;
if (!inode->i_nlink)
ext3_orphan_add(handle, inode);
- ext3_mark_inode_dirty(handle, inode);
inode->i_ctime = dir->i_ctime;
+ ext3_mark_inode_dirty(handle, inode);
retval = 0;

end_unlink:
@@ -2220,7 +2221,6 @@
goto end_rename;
} else {
BUFFER_TRACE(new_bh, "get write access");
- BUFFER_TRACE(new_bh, "get_write_access");
ext3_journal_get_write_access(handle, new_bh);
new_de->inode = le32_to_cpu(old_inode->i_ino);
if (EXT3_HAS_INCOMPAT_FEATURE(new_dir->i_sb,


On Thu, Aug 07, 2003 at 12:28:07AM +0200, Martin Schlemmer wrote:
> On Wed, 2003-08-06 at 22:22, Christopher Li wrote:
>
> > > Just grab the perl source, if you want, I can mail you the ebuild that
> > > should give some direction in how to compile it, or grab your local
> > > .spec, configure it (maybe with install location not in /), and then
> > > just compile and finally install to a ext3 FS with HTREE enabled.
> > > Usually over here, it keeps on leaving an invalid entry to
> > > ..usr/share/man/man3/Hash::Util.tmp.
> > >
> >
> > I am running 2.6-test2 kernel. Download the perl 5.8.0 (stable.tar.gz).
> > ./Configure --prefix=/mnt/hdc3; make; make install.
> >
> > It did not happen for me. Hash::Util.3 was installed correctly.
> > (Of course, I did turn on directory index)
> >
> > Can you send me more infomation how you build the perl package
> > and install it? I guess I have to do more gentoo like step to duplicate
> > it :-)
> >
>
> I have gotten a few of these while testing:
>
> -----------------------------------------
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file
> (4759186), 0
> Slab corruption: start=cb147184, expend=cb14736f, problemat=cb1471f8
> Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> Data:
> ********************************************************************************************************************F4 F1 15 F6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
> Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> slab error in check_poison_obj(): cache `ext3_inode_cache': object was
> modified after freeing
> Call Trace:
> [<c0141634>] check_poison_obj+0x161/0x1a1
> [<c0143128>] kmem_cache_alloc+0x11f/0x159
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c0171f74>] alloc_inode+0x1c/0x14d
> [<c01729db>] new_inode+0x1a/0xa2
> [<c0192207>] ext3_new_inode+0x41/0x6d8
> [<c014313c>] kmem_cache_alloc+0x133/0x159
> [<c01a0244>] new_handle+0x1c/0x4e
> [<c01992e4>] ext3_mkdir+0x74/0x2b6
> [<c01665dc>] permission+0x2f/0x4b
> [<c0168555>] vfs_mkdir+0x6d/0xbf
> [<c016865e>] sys_mkdir+0xb7/0xf7
> [<c010aaa5>] sysenter_past_esp+0x52/0x71
>
> -----------------------------------------
>
> A more complete one is attached (just more similar ones).
>
> Attached is a script (test.sh) and a list of man page names (list) that
> I can recreate it without needing perl. The list may or may not be
> pruned some more, but I will try tonight again after some sleep ;)
>
> Here is a test run (note that it do the same with symlinks instead of
> hard links):
>
> -----------------------------------------
> nosferatu space # uname -a
> Linux nosferatu 2.6.0-test2-bk5 #2 SMP Wed Aug 6 00:21:15 SAST 2003 i686
> Intel(R) Pentium(R) 4 CPU 2.40GHz GenuineIntel GNU/Linux
> nosferatu space # dumpe2fs /dev/hdc1 | grep features
> dumpe2fs 1.34 (25-Jul-2003)
> Filesystem features: has_journal dir_index filetype needs_recovery
> sparse_super large_file
> nosferatu space # pwd
> /space
> nosferatu space # mount | grep `pwd`
> /dev/hdc1 on /space type ext3 (rw,noatime)
> nosferatu space # ls foo/
> ls: foo/: No such file or directory
> nosferatu space # cat test.sh
> #!/bin/bash
>
> i=1
>
> testdir="`pwd`/foo"
>
> (rm -rf "$testdir"; rm -rf "$testdir") &>/dev/null
> mkdir -p "$testdir"
>
> for x in $(cat list)
> do
> temp="$testdir/${x/3pm/tmp}"
> x="$testdir/${x}"
>
> touch "$temp"
> ln "$temp" "$x"
> rm -f "$temp"
>
> # echo "Pass $i"
>
> # i=$((i+1))
> done
>
> nosferatu space # ./test.sh
> nosferatu space # ls foo/
> ls: foo/Win32.tmp: No such file or directory
> Fcntl.3pm PerlIO::via.3pm
> Hash::Util.3pm PerlIO::via::QuotedPrint.3pm
> I18N::Collate.3pm Pod::Checker.3pm
> I18N::LangTags.3pm Pod::Find.3pm
> I18N::LangTags::List.3pm Pod::Html.3pm
> I18N::Langinfo.3pm Pod::InputObjects.3pm
> IO.3pm Pod::LaTeX.3pm
> IO::Dir.3pm Pod::Man.3pm
> IO::File.3pm Pod::ParseLink.3pm
> IO::Handle.3pm Pod::ParseUtils.3pm
> IO::Pipe.3pm Pod::Parser.3pm
> IO::Poll.3pm Pod::Plainer.3pm
> IO::Seekable.3pm Pod::Select.3pm
> IO::Select.3pm Pod::Text.3pm
> IO::Socket.3pm Pod::Text::Color.3pm
> IO::Socket::INET.3pm Pod::Text::Overstrike.3pm
> IO::Socket::UNIX.3pm Pod::Text::Termcap.3pm
> IPC::Msg.3pm Pod::Usage.3pm
> IPC::Open2.3pm SDBM_File.3pm
> IPC::Open3.3pm Safe.3pm
> IPC::Semaphore.3pm Scalar::Util.3pm
> IPC::SysV.3pm Search::Dict.3pm
> List::Util.3pm SelectSaver.3pm
> Locale::Constants.3pm SelfLoader.3pm
> Locale::Country.3pm Shell.3pm
> Locale::Currency.3pm Socket.3pm
> Locale::Language.3pm Storable.3pm
> Locale::Maketext.3pm Switch.3pm
> Locale::Maketext::TPJ13.3pm Symbol.3pm
> Locale::Script.3pm Sys::Hostname.3pm
> MIME::Base64.3pm Sys::Syslog.3pm
> MIME::QuotedPrint.3pm Term::ANSIColor.3pm
> Math::BigFloat.3pm Term::Cap.3pm
> Math::BigFloat::Trace.3pm Term::Complete.3pm
> Math::BigInt.3pm Term::ReadLine.3pm
> Math::BigInt::Calc.3pm Test.3pm
> Math::BigInt::Trace.3pm Test::Builder.3pm
> Math::BigRat.3pm Test::Harness.3pm
> Math::Complex.3pm Test::Harness::Assert.3pm
> Math::Trig.3pm Test::Harness::Iterator.3pm
> Memoize.3pm Test::Harness::Straps.3pm
> Memoize::AnyDBM_File.3pm Test::More.3pm
> Memoize::Expire.3pm Test::Simple.3pm
> Memoize::ExpireFile.3pm Test::Tutorial.3pm
> Memoize::ExpireTest.3pm Text::Abbrev.3pm
> Memoize::NDBM_File.3pm Text::Balanced.3pm
> Memoize::SDBM_File.3pm Text::ParseWords.3pm
> Memoize::Storable.3pm Text::Soundex.3pm
> NDBM_File.3pm Text::Tabs.3pm
> NEXT.3pm Text::Wrap.3pm
> Net::Cmd.3pm Thread.3pm
> Net::Config.3pm Thread::Queue.3pm
> Net::Domain.3pm Thread::Semaphore.3pm
> Net::FTP.3pm Tie::Array.3pm
> Net::FTP::A.3pm Tie::File.3pm
> Net::FTP::E.3pm Tie::Handle.3pm
> Net::FTP::I.3pm Tie::Hash.3pm
> Net::FTP::L.3pm Tie::Memoize.3pm
> Net::FTP::dataconn.3pm Tie::RefHash.3pm
> Net::NNTP.3pm Tie::Scalar.3pm
> Net::Netrc.3pm Tie::SubstrHash.3pm
> Net::POP3.3pm Time::HiRes.3pm
> Net::Ping.3pm Time::Local.3pm
> Net::SMTP.3pm Time::gmtime.3pm
> Net::Time.3pm Time::localtime.3pm
> Net::hostent.3pm Time::tm.3pm
> Net::libnetFAQ.3pm UNIVERSAL.3pm
> Net::netent.3pm Unicode::Collate.3pm
> Net::protoent.3pm Unicode::Normalize.3pm
> Net::servent.3pm Unicode::UCD.3pm
> O.3pm User::grent.3pm
> Opcode.3pm User::pwent.3pm
> POSIX.3pm Win32.3pm
> PerlIO.3pm XS::APItest.3pm
> PerlIO::encoding.3pm XS::Typemap.3pm
> PerlIO::scalar.3pm XSLoader.3pm
> nosferatu space #
> ----------------------------------
>
>
> Thanks,
>
> --
>
> Martin Schlemmer
>
>
>

> kjournald starting. Commit interval 5 seconds
> EXT3 FS on hdc1, internal journal
> EXT3-fs: mounted filesystem with ordered data mode.
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (2961487), 0
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (2944744), 0
> Slab corruption: start=d230e184, expend=d230e36f, problemat=d230e1f8
> Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> Data: ********************************************************************************************************************08 89 A1 C6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
> Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> slab error in check_poison_obj(): cache `ext3_inode_cache': object was modified after freeing
> Call Trace:
> [<c0141634>] check_poison_obj+0x161/0x1a1
> [<c0143128>] kmem_cache_alloc+0x11f/0x159
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c0171f74>] alloc_inode+0x1c/0x14d
> [<c01729db>] new_inode+0x1a/0xa2
> [<c0192207>] ext3_new_inode+0x41/0x6d8
> [<c014313c>] kmem_cache_alloc+0x133/0x159
> [<c01a0244>] new_handle+0x1c/0x4e
> [<c0199154>] ext3_create+0x55/0xb0
> [<c0167be9>] vfs_create+0x79/0xce
> [<c0168179>] open_namei+0x39a/0x3ee
> [<c0157976>] filp_open+0x3e/0x64
> [<c0157edc>] sys_open+0x5b/0x8b
> [<c010aaa5>] sysenter_past_esp+0x52/0x71
>
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (2944744), 0
> Slab corruption: start=e2b7c27c, expend=e2b7c467, problemat=e2b7c2f0
> Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> Data: ********************************************************************************************************************08 89 A1 C6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
> Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> slab error in check_poison_obj(): cache `ext3_inode_cache': object was modified after freeing
> Call Trace:
> [<c0141634>] check_poison_obj+0x161/0x1a1
> [<c0143128>] kmem_cache_alloc+0x11f/0x159
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c0171f74>] alloc_inode+0x1c/0x14d
> [<c01729db>] new_inode+0x1a/0xa2
> [<c0192207>] ext3_new_inode+0x41/0x6d8
> [<c014313c>] kmem_cache_alloc+0x133/0x159
> [<c01a0244>] new_handle+0x1c/0x4e
> [<c0199154>] ext3_create+0x55/0xb0
> [<c0167be9>] vfs_create+0x79/0xce
> [<c0168179>] open_namei+0x39a/0x3ee
> [<c0157976>] filp_open+0x3e/0x64
> [<c0157edc>] sys_open+0x5b/0x8b
> [<c010aaa5>] sysenter_past_esp+0x52/0x71
>
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (2944744), 0
> Slab corruption: start=e2b7c27c, expend=e2b7c467, problemat=e2b7c2f0
> Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> Data: ********************************************************************************************************************44 BD 8F F6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
> Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> slab error in check_poison_obj(): cache `ext3_inode_cache': object was modified after freeing
> Call Trace:
> [<c0141634>] check_poison_obj+0x161/0x1a1
> [<c0143128>] kmem_cache_alloc+0x11f/0x159
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c0171f74>] alloc_inode+0x1c/0x14d
> [<c01729db>] new_inode+0x1a/0xa2
> [<c0192207>] ext3_new_inode+0x41/0x6d8
> [<c014313c>] kmem_cache_alloc+0x133/0x159
> [<c01a0244>] new_handle+0x1c/0x4e
> [<c0199154>] ext3_create+0x55/0xb0
> [<c0167be9>] vfs_create+0x79/0xce
> [<c0168179>] open_namei+0x39a/0x3ee
> [<c0157976>] filp_open+0x3e/0x64
> [<c0157edc>] sys_open+0x5b/0x8b
> [<c010aaa5>] sysenter_past_esp+0x52/0x71
>
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4759152), 0
> Slab corruption: start=cb147184, expend=cb14736f, problemat=cb1471f8
> Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> Data: ********************************************************************************************************************08 89 A1 C6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
> Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> slab error in check_poison_obj(): cache `ext3_inode_cache': object was modified after freeing
> Call Trace:
> [<c0141634>] check_poison_obj+0x161/0x1a1
> [<c0143128>] kmem_cache_alloc+0x11f/0x159
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c0171f74>] alloc_inode+0x1c/0x14d
> [<c01729db>] new_inode+0x1a/0xa2
> [<c0192207>] ext3_new_inode+0x41/0x6d8
> [<c014313c>] kmem_cache_alloc+0x133/0x159
> [<c01a0244>] new_handle+0x1c/0x4e
> [<c0199154>] ext3_create+0x55/0xb0
> [<c0167be9>] vfs_create+0x79/0xce
> [<c0168179>] open_namei+0x39a/0x3ee
> [<c0157976>] filp_open+0x3e/0x64
> [<c0157edc>] sys_open+0x5b/0x8b
> [<c010aaa5>] sysenter_past_esp+0x52/0x71
>
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4759186), 0
> Slab corruption: start=cb147184, expend=cb14736f, problemat=cb1471f8
> Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> Data: ********************************************************************************************************************F4 F1 15 F6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
> Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> slab error in check_poison_obj(): cache `ext3_inode_cache': object was modified after freeing
> Call Trace:
> [<c0141634>] check_poison_obj+0x161/0x1a1
> [<c0143128>] kmem_cache_alloc+0x11f/0x159
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c019ae46>] ext3_alloc_inode+0x18/0x34
> [<c0171f74>] alloc_inode+0x1c/0x14d
> [<c01729db>] new_inode+0x1a/0xa2
> [<c0192207>] ext3_new_inode+0x41/0x6d8
> [<c014313c>] kmem_cache_alloc+0x133/0x159
> [<c01a0244>] new_handle+0x1c/0x4e
> [<c01992e4>] ext3_mkdir+0x74/0x2b6
> [<c01665dc>] permission+0x2f/0x4b
> [<c0168555>] vfs_mkdir+0x6d/0xbf
> [<c016865e>] sys_mkdir+0xb7/0xf7
> [<c010aaa5>] sysenter_past_esp+0x52/0x71
>
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4759122), 0
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4759194), 0
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4710637), 0
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4710637), 0
> EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4710637), 0
>


> Fcntl.3pm
> Hash::Util.3pm
> I18N::Collate.3pm
> I18N::LangTags.3pm
> I18N::LangTags::List.3pm
> I18N::Langinfo.3pm
> IO.3pm
> IO::Dir.3pm
> IO::File.3pm
> IO::Handle.3pm
> IO::Pipe.3pm
> IO::Poll.3pm
> IO::Seekable.3pm
> IO::Select.3pm
> IO::Socket.3pm
> IO::Socket::INET.3pm
> IO::Socket::UNIX.3pm
> IPC::Msg.3pm
> IPC::Open2.3pm
> IPC::Open3.3pm
> IPC::Semaphore.3pm
> IPC::SysV.3pm
> List::Util.3pm
> Locale::Constants.3pm
> Locale::Country.3pm
> Locale::Currency.3pm
> Locale::Language.3pm
> Locale::Maketext.3pm
> Locale::Maketext::TPJ13.3pm
> Locale::Script.3pm
> MIME::Base64.3pm
> MIME::QuotedPrint.3pm
> Math::BigFloat.3pm
> Math::BigFloat::Trace.3pm
> Math::BigInt.3pm
> Math::BigInt::Calc.3pm
> Math::BigInt::Trace.3pm
> Math::BigRat.3pm
> Math::Complex.3pm
> Math::Trig.3pm
> Memoize.3pm
> Memoize::AnyDBM_File.3pm
> Memoize::Expire.3pm
> Memoize::ExpireFile.3pm
> Memoize::ExpireTest.3pm
> Memoize::NDBM_File.3pm
> Memoize::SDBM_File.3pm
> Memoize::Storable.3pm
> NDBM_File.3pm
> NEXT.3pm
> Net::Cmd.3pm
> Net::Config.3pm
> Net::Domain.3pm
> Net::FTP.3pm
> Net::FTP::A.3pm
> Net::FTP::E.3pm
> Net::FTP::I.3pm
> Net::FTP::L.3pm
> Net::FTP::dataconn.3pm
> Net::NNTP.3pm
> Net::Netrc.3pm
> Net::POP3.3pm
> Net::Ping.3pm
> Net::SMTP.3pm
> Net::Time.3pm
> Net::hostent.3pm
> Net::libnetFAQ.3pm
> Net::netent.3pm
> Net::protoent.3pm
> Net::servent.3pm
> O.3pm
> Opcode.3pm
> POSIX.3pm
> PerlIO.3pm
> PerlIO::encoding.3pm
> PerlIO::scalar.3pm
> PerlIO::via.3pm
> PerlIO::via::QuotedPrint.3pm
> Pod::Checker.3pm
> Pod::Find.3pm
> Pod::Html.3pm
> Pod::InputObjects.3pm
> Pod::LaTeX.3pm
> Pod::Man.3pm
> Pod::ParseLink.3pm
> Pod::ParseUtils.3pm
> Pod::Parser.3pm
> Pod::Plainer.3pm
> Pod::Select.3pm
> Pod::Text.3pm
> Pod::Text::Color.3pm
> Pod::Text::Overstrike.3pm
> Pod::Text::Termcap.3pm
> Pod::Usage.3pm
> SDBM_File.3pm
> Safe.3pm
> Scalar::Util.3pm
> Search::Dict.3pm
> SelectSaver.3pm
> SelfLoader.3pm
> Shell.3pm
> Socket.3pm
> Storable.3pm
> Switch.3pm
> Symbol.3pm
> Sys::Hostname.3pm
> Sys::Syslog.3pm
> Term::ANSIColor.3pm
> Term::Cap.3pm
> Term::Complete.3pm
> Term::ReadLine.3pm
> Test.3pm
> Test::Builder.3pm
> Test::Harness.3pm
> Test::Harness::Assert.3pm
> Test::Harness::Iterator.3pm
> Test::Harness::Straps.3pm
> Test::More.3pm
> Test::Simple.3pm
> Test::Tutorial.3pm
> Text::Abbrev.3pm
> Text::Balanced.3pm
> Text::ParseWords.3pm
> Text::Soundex.3pm
> Text::Tabs.3pm
> Text::Wrap.3pm
> Thread.3pm
> Thread::Queue.3pm
> Thread::Semaphore.3pm
> Tie::Array.3pm
> Tie::File.3pm
> Tie::Handle.3pm
> Tie::Hash.3pm
> Tie::Memoize.3pm
> Tie::RefHash.3pm
> Tie::Scalar.3pm
> Tie::SubstrHash.3pm
> Time::HiRes.3pm
> Time::Local.3pm
> Time::gmtime.3pm
> Time::localtime.3pm
> Time::tm.3pm
> UNIVERSAL.3pm
> Unicode::Collate.3pm
> Unicode::Normalize.3pm
> Unicode::UCD.3pm
> User::grent.3pm
> User::pwent.3pm
> Win32.3pm
> XS::APItest.3pm
> XS::Typemap.3pm
> XSLoader.3pm



2003-08-19 10:53:31

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] fix for htree corruption. Was: [2.6] Perl weirdness with ext3 and HTREE

[email protected] wrote:
>
> Martin,
>
> The first patch should fix it. The bug is trigger by creating the index.
> Coping out the index we assume the dirents start with the first entry
> after "." "..".
>
> It can make the first previous deleted entry reappear.
> In the past we set inode to zero for empty entry so this is not
> a problem. That is not true any more.

whee, neat, thanks.

> Andrew, I assume touch inode->i_ctime after
> ext3_mark_inode_dirty is a bug? The second patch is for that.

That's correct.

Could you please regenerate a full, single diff against a known kernel
version? That patch generated 100% rejects for me...

2003-08-19 14:27:43

by Martin Schlemmer

[permalink] [raw]
Subject: Re: [PATCH] fix for htree corruption. Was: [2.6] Perl weirdness with ext3 and HTREE

On Tue, 2003-08-19 at 12:40, [email protected] wrote:
> Martin,
>

Hiya Chris

> The first patch should fix it. The bug is trigger by creating the index.
> Coping out the index we assume the dirents start with the first entry
> after "." "..".
>
> It can make the first previous deleted entry reappear.
> In the past we set inode to zero for empty entry so this is not
> a problem. That is not true any more.
>

Thanks a lot! I will test as soon as I get home. If maybe delayed,
sorry, but I have currently only working inet at work.

> Andrew, I assume touch inode->i_ctime after
> ext3_mark_inode_dirty is a bug? The second patch is for that.
>
>
> Chris
>
> ===== namei.c 1.44 vs edited =====
> --- 1.44/fs/ext3/namei.c Sun Jun 29 23:49:04 2003
> +++ edited/namei.c Tue Aug 19 03:28:52 2003
> @@ -1304,7 +1304,8 @@
> data1 = bh2->b_data;
>
> /* The 0th block becomes the root, move the dirents out */
> - de = (struct ext3_dir_entry_2 *) &root->info;
> + de = &root->dotdot;
> + de = (struct ext3_dir_entry_2 *) ((char *)de + de->rec_len);
> len = ((char *) root) + blocksize - (char *) de;
> memcpy (data1, de, len);
> de = (struct ext3_dir_entry_2 *) data1;
>
>
>
>
> ===== namei.c 1.44 vs edited =====
> --- 1.44/fs/ext3/namei.c Sun Jun 29 23:49:04 2003
> +++ edited/namei.c Tue Aug 19 03:28:52 2003
> @@ -2006,9 +2007,9 @@
> * recovery. */
> inode->i_size = 0;
> ext3_orphan_add(handle, inode);
> + inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
> ext3_mark_inode_dirty(handle, inode);
> dir->i_nlink--;
> - inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
> ext3_update_dx_flag(dir);
> ext3_mark_inode_dirty(handle, dir);
>
> @@ -2060,8 +2061,8 @@
> inode->i_nlink--;
> if (!inode->i_nlink)
> ext3_orphan_add(handle, inode);
> - ext3_mark_inode_dirty(handle, inode);
> inode->i_ctime = dir->i_ctime;
> + ext3_mark_inode_dirty(handle, inode);
> retval = 0;
>
> end_unlink:
> @@ -2220,7 +2221,6 @@
> goto end_rename;
> } else {
> BUFFER_TRACE(new_bh, "get write access");
> - BUFFER_TRACE(new_bh, "get_write_access");
> ext3_journal_get_write_access(handle, new_bh);
> new_de->inode = le32_to_cpu(old_inode->i_ino);
> if (EXT3_HAS_INCOMPAT_FEATURE(new_dir->i_sb,
>
>
> On Thu, Aug 07, 2003 at 12:28:07AM +0200, Martin Schlemmer wrote:
> > On Wed, 2003-08-06 at 22:22, Christopher Li wrote:
> >
> > > > Just grab the perl source, if you want, I can mail you the ebuild that
> > > > should give some direction in how to compile it, or grab your local
> > > > .spec, configure it (maybe with install location not in /), and then
> > > > just compile and finally install to a ext3 FS with HTREE enabled.
> > > > Usually over here, it keeps on leaving an invalid entry to
> > > > ..usr/share/man/man3/Hash::Util.tmp.
> > > >
> > >
> > > I am running 2.6-test2 kernel. Download the perl 5.8.0 (stable.tar.gz).
> > > ./Configure --prefix=/mnt/hdc3; make; make install.
> > >
> > > It did not happen for me. Hash::Util.3 was installed correctly.
> > > (Of course, I did turn on directory index)
> > >
> > > Can you send me more infomation how you build the perl package
> > > and install it? I guess I have to do more gentoo like step to duplicate
> > > it :-)
> > >
> >
> > I have gotten a few of these while testing:
> >
> > -----------------------------------------
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file
> > (4759186), 0
> > Slab corruption: start=cb147184, expend=cb14736f, problemat=cb1471f8
> > Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> > Data:
> > ********************************************************************************************************************F4 F1 15 F6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
> > Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> > slab error in check_poison_obj(): cache `ext3_inode_cache': object was
> > modified after freeing
> > Call Trace:
> > [<c0141634>] check_poison_obj+0x161/0x1a1
> > [<c0143128>] kmem_cache_alloc+0x11f/0x159
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c0171f74>] alloc_inode+0x1c/0x14d
> > [<c01729db>] new_inode+0x1a/0xa2
> > [<c0192207>] ext3_new_inode+0x41/0x6d8
> > [<c014313c>] kmem_cache_alloc+0x133/0x159
> > [<c01a0244>] new_handle+0x1c/0x4e
> > [<c01992e4>] ext3_mkdir+0x74/0x2b6
> > [<c01665dc>] permission+0x2f/0x4b
> > [<c0168555>] vfs_mkdir+0x6d/0xbf
> > [<c016865e>] sys_mkdir+0xb7/0xf7
> > [<c010aaa5>] sysenter_past_esp+0x52/0x71
> >
> > -----------------------------------------
> >
> > A more complete one is attached (just more similar ones).
> >
> > Attached is a script (test.sh) and a list of man page names (list) that
> > I can recreate it without needing perl. The list may or may not be
> > pruned some more, but I will try tonight again after some sleep ;)
> >
> > Here is a test run (note that it do the same with symlinks instead of
> > hard links):
> >
> > -----------------------------------------
> > nosferatu space # uname -a
> > Linux nosferatu 2.6.0-test2-bk5 #2 SMP Wed Aug 6 00:21:15 SAST 2003 i686
> > Intel(R) Pentium(R) 4 CPU 2.40GHz GenuineIntel GNU/Linux
> > nosferatu space # dumpe2fs /dev/hdc1 | grep features
> > dumpe2fs 1.34 (25-Jul-2003)
> > Filesystem features: has_journal dir_index filetype needs_recovery
> > sparse_super large_file
> > nosferatu space # pwd
> > /space
> > nosferatu space # mount | grep `pwd`
> > /dev/hdc1 on /space type ext3 (rw,noatime)
> > nosferatu space # ls foo/
> > ls: foo/: No such file or directory
> > nosferatu space # cat test.sh
> > #!/bin/bash
> >
> > i=1
> >
> > testdir="`pwd`/foo"
> >
> > (rm -rf "$testdir"; rm -rf "$testdir") &>/dev/null
> > mkdir -p "$testdir"
> >
> > for x in $(cat list)
> > do
> > temp="$testdir/${x/3pm/tmp}"
> > x="$testdir/${x}"
> >
> > touch "$temp"
> > ln "$temp" "$x"
> > rm -f "$temp"
> >
> > # echo "Pass $i"
> >
> > # i=$((i+1))
> > done
> >
> > nosferatu space # ./test.sh
> > nosferatu space # ls foo/
> > ls: foo/Win32.tmp: No such file or directory
> > Fcntl.3pm PerlIO::via.3pm
> > Hash::Util.3pm PerlIO::via::QuotedPrint.3pm
> > I18N::Collate.3pm Pod::Checker.3pm
> > I18N::LangTags.3pm Pod::Find.3pm
> > I18N::LangTags::List.3pm Pod::Html.3pm
> > I18N::Langinfo.3pm Pod::InputObjects.3pm
> > IO.3pm Pod::LaTeX.3pm
> > IO::Dir.3pm Pod::Man.3pm
> > IO::File.3pm Pod::ParseLink.3pm
> > IO::Handle.3pm Pod::ParseUtils.3pm
> > IO::Pipe.3pm Pod::Parser.3pm
> > IO::Poll.3pm Pod::Plainer.3pm
> > IO::Seekable.3pm Pod::Select.3pm
> > IO::Select.3pm Pod::Text.3pm
> > IO::Socket.3pm Pod::Text::Color.3pm
> > IO::Socket::INET.3pm Pod::Text::Overstrike.3pm
> > IO::Socket::UNIX.3pm Pod::Text::Termcap.3pm
> > IPC::Msg.3pm Pod::Usage.3pm
> > IPC::Open2.3pm SDBM_File.3pm
> > IPC::Open3.3pm Safe.3pm
> > IPC::Semaphore.3pm Scalar::Util.3pm
> > IPC::SysV.3pm Search::Dict.3pm
> > List::Util.3pm SelectSaver.3pm
> > Locale::Constants.3pm SelfLoader.3pm
> > Locale::Country.3pm Shell.3pm
> > Locale::Currency.3pm Socket.3pm
> > Locale::Language.3pm Storable.3pm
> > Locale::Maketext.3pm Switch.3pm
> > Locale::Maketext::TPJ13.3pm Symbol.3pm
> > Locale::Script.3pm Sys::Hostname.3pm
> > MIME::Base64.3pm Sys::Syslog.3pm
> > MIME::QuotedPrint.3pm Term::ANSIColor.3pm
> > Math::BigFloat.3pm Term::Cap.3pm
> > Math::BigFloat::Trace.3pm Term::Complete.3pm
> > Math::BigInt.3pm Term::ReadLine.3pm
> > Math::BigInt::Calc.3pm Test.3pm
> > Math::BigInt::Trace.3pm Test::Builder.3pm
> > Math::BigRat.3pm Test::Harness.3pm
> > Math::Complex.3pm Test::Harness::Assert.3pm
> > Math::Trig.3pm Test::Harness::Iterator.3pm
> > Memoize.3pm Test::Harness::Straps.3pm
> > Memoize::AnyDBM_File.3pm Test::More.3pm
> > Memoize::Expire.3pm Test::Simple.3pm
> > Memoize::ExpireFile.3pm Test::Tutorial.3pm
> > Memoize::ExpireTest.3pm Text::Abbrev.3pm
> > Memoize::NDBM_File.3pm Text::Balanced.3pm
> > Memoize::SDBM_File.3pm Text::ParseWords.3pm
> > Memoize::Storable.3pm Text::Soundex.3pm
> > NDBM_File.3pm Text::Tabs.3pm
> > NEXT.3pm Text::Wrap.3pm
> > Net::Cmd.3pm Thread.3pm
> > Net::Config.3pm Thread::Queue.3pm
> > Net::Domain.3pm Thread::Semaphore.3pm
> > Net::FTP.3pm Tie::Array.3pm
> > Net::FTP::A.3pm Tie::File.3pm
> > Net::FTP::E.3pm Tie::Handle.3pm
> > Net::FTP::I.3pm Tie::Hash.3pm
> > Net::FTP::L.3pm Tie::Memoize.3pm
> > Net::FTP::dataconn.3pm Tie::RefHash.3pm
> > Net::NNTP.3pm Tie::Scalar.3pm
> > Net::Netrc.3pm Tie::SubstrHash.3pm
> > Net::POP3.3pm Time::HiRes.3pm
> > Net::Ping.3pm Time::Local.3pm
> > Net::SMTP.3pm Time::gmtime.3pm
> > Net::Time.3pm Time::localtime.3pm
> > Net::hostent.3pm Time::tm.3pm
> > Net::libnetFAQ.3pm UNIVERSAL.3pm
> > Net::netent.3pm Unicode::Collate.3pm
> > Net::protoent.3pm Unicode::Normalize.3pm
> > Net::servent.3pm Unicode::UCD.3pm
> > O.3pm User::grent.3pm
> > Opcode.3pm User::pwent.3pm
> > POSIX.3pm Win32.3pm
> > PerlIO.3pm XS::APItest.3pm
> > PerlIO::encoding.3pm XS::Typemap.3pm
> > PerlIO::scalar.3pm XSLoader.3pm
> > nosferatu space #
> > ----------------------------------
> >
> >
> > Thanks,
> >
> > --
> >
> > Martin Schlemmer
> >
> >
> >
>
> > kjournald starting. Commit interval 5 seconds
> > EXT3 FS on hdc1, internal journal
> > EXT3-fs: mounted filesystem with ordered data mode.
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (2961487), 0
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (2944744), 0
> > Slab corruption: start=d230e184, expend=d230e36f, problemat=d230e1f8
> > Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> > Data: ********************************************************************************************************************08 89 A1 C6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
> > Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> > slab error in check_poison_obj(): cache `ext3_inode_cache': object was modified after freeing
> > Call Trace:
> > [<c0141634>] check_poison_obj+0x161/0x1a1
> > [<c0143128>] kmem_cache_alloc+0x11f/0x159
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c0171f74>] alloc_inode+0x1c/0x14d
> > [<c01729db>] new_inode+0x1a/0xa2
> > [<c0192207>] ext3_new_inode+0x41/0x6d8
> > [<c014313c>] kmem_cache_alloc+0x133/0x159
> > [<c01a0244>] new_handle+0x1c/0x4e
> > [<c0199154>] ext3_create+0x55/0xb0
> > [<c0167be9>] vfs_create+0x79/0xce
> > [<c0168179>] open_namei+0x39a/0x3ee
> > [<c0157976>] filp_open+0x3e/0x64
> > [<c0157edc>] sys_open+0x5b/0x8b
> > [<c010aaa5>] sysenter_past_esp+0x52/0x71
> >
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (2944744), 0
> > Slab corruption: start=e2b7c27c, expend=e2b7c467, problemat=e2b7c2f0
> > Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> > Data: ********************************************************************************************************************08 89 A1 C6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
> > Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> > slab error in check_poison_obj(): cache `ext3_inode_cache': object was modified after freeing
> > Call Trace:
> > [<c0141634>] check_poison_obj+0x161/0x1a1
> > [<c0143128>] kmem_cache_alloc+0x11f/0x159
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c0171f74>] alloc_inode+0x1c/0x14d
> > [<c01729db>] new_inode+0x1a/0xa2
> > [<c0192207>] ext3_new_inode+0x41/0x6d8
> > [<c014313c>] kmem_cache_alloc+0x133/0x159
> > [<c01a0244>] new_handle+0x1c/0x4e
> > [<c0199154>] ext3_create+0x55/0xb0
> > [<c0167be9>] vfs_create+0x79/0xce
> > [<c0168179>] open_namei+0x39a/0x3ee
> > [<c0157976>] filp_open+0x3e/0x64
> > [<c0157edc>] sys_open+0x5b/0x8b
> > [<c010aaa5>] sysenter_past_esp+0x52/0x71
> >
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (2944744), 0
> > Slab corruption: start=e2b7c27c, expend=e2b7c467, problemat=e2b7c2f0
> > Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> > Data: ********************************************************************************************************************44 BD 8F F6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
> > Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> > slab error in check_poison_obj(): cache `ext3_inode_cache': object was modified after freeing
> > Call Trace:
> > [<c0141634>] check_poison_obj+0x161/0x1a1
> > [<c0143128>] kmem_cache_alloc+0x11f/0x159
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c0171f74>] alloc_inode+0x1c/0x14d
> > [<c01729db>] new_inode+0x1a/0xa2
> > [<c0192207>] ext3_new_inode+0x41/0x6d8
> > [<c014313c>] kmem_cache_alloc+0x133/0x159
> > [<c01a0244>] new_handle+0x1c/0x4e
> > [<c0199154>] ext3_create+0x55/0xb0
> > [<c0167be9>] vfs_create+0x79/0xce
> > [<c0168179>] open_namei+0x39a/0x3ee
> > [<c0157976>] filp_open+0x3e/0x64
> > [<c0157edc>] sys_open+0x5b/0x8b
> > [<c010aaa5>] sysenter_past_esp+0x52/0x71
> >
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4759152), 0
> > Slab corruption: start=cb147184, expend=cb14736f, problemat=cb1471f8
> > Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> > Data: ********************************************************************************************************************08 89 A1 C6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
> > Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> > slab error in check_poison_obj(): cache `ext3_inode_cache': object was modified after freeing
> > Call Trace:
> > [<c0141634>] check_poison_obj+0x161/0x1a1
> > [<c0143128>] kmem_cache_alloc+0x11f/0x159
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c0171f74>] alloc_inode+0x1c/0x14d
> > [<c01729db>] new_inode+0x1a/0xa2
> > [<c0192207>] ext3_new_inode+0x41/0x6d8
> > [<c014313c>] kmem_cache_alloc+0x133/0x159
> > [<c01a0244>] new_handle+0x1c/0x4e
> > [<c0199154>] ext3_create+0x55/0xb0
> > [<c0167be9>] vfs_create+0x79/0xce
> > [<c0168179>] open_namei+0x39a/0x3ee
> > [<c0157976>] filp_open+0x3e/0x64
> > [<c0157edc>] sys_open+0x5b/0x8b
> > [<c010aaa5>] sysenter_past_esp+0x52/0x71
> >
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4759186), 0
> > Slab corruption: start=cb147184, expend=cb14736f, problemat=cb1471f8
> > Last user: [<c019ae7f>](ext3_destroy_inode+0x1d/0x21)
> > Data: ********************************************************************************************************************F4 F1 15 F6 ***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************A5
> > Next: 71 F0 2C .7F AE 19 C0 71 F0 2C .********************
> > slab error in check_poison_obj(): cache `ext3_inode_cache': object was modified after freeing
> > Call Trace:
> > [<c0141634>] check_poison_obj+0x161/0x1a1
> > [<c0143128>] kmem_cache_alloc+0x11f/0x159
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c019ae46>] ext3_alloc_inode+0x18/0x34
> > [<c0171f74>] alloc_inode+0x1c/0x14d
> > [<c01729db>] new_inode+0x1a/0xa2
> > [<c0192207>] ext3_new_inode+0x41/0x6d8
> > [<c014313c>] kmem_cache_alloc+0x133/0x159
> > [<c01a0244>] new_handle+0x1c/0x4e
> > [<c01992e4>] ext3_mkdir+0x74/0x2b6
> > [<c01665dc>] permission+0x2f/0x4b
> > [<c0168555>] vfs_mkdir+0x6d/0xbf
> > [<c016865e>] sys_mkdir+0xb7/0xf7
> > [<c010aaa5>] sysenter_past_esp+0x52/0x71
> >
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4759122), 0
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4759194), 0
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4710637), 0
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4710637), 0
> > EXT3-fs warning (device hdc1): ext3_unlink: Deleting nonexistent file (4710637), 0
> >
>
>
> > Fcntl.3pm
> > Hash::Util.3pm
> > I18N::Collate.3pm
> > I18N::LangTags.3pm
> > I18N::LangTags::List.3pm
> > I18N::Langinfo.3pm
> > IO.3pm
> > IO::Dir.3pm
> > IO::File.3pm
> > IO::Handle.3pm
> > IO::Pipe.3pm
> > IO::Poll.3pm
> > IO::Seekable.3pm
> > IO::Select.3pm
> > IO::Socket.3pm
> > IO::Socket::INET.3pm
> > IO::Socket::UNIX.3pm
> > IPC::Msg.3pm
> > IPC::Open2.3pm
> > IPC::Open3.3pm
> > IPC::Semaphore.3pm
> > IPC::SysV.3pm
> > List::Util.3pm
> > Locale::Constants.3pm
> > Locale::Country.3pm
> > Locale::Currency.3pm
> > Locale::Language.3pm
> > Locale::Maketext.3pm
> > Locale::Maketext::TPJ13.3pm
> > Locale::Script.3pm
> > MIME::Base64.3pm
> > MIME::QuotedPrint.3pm
> > Math::BigFloat.3pm
> > Math::BigFloat::Trace.3pm
> > Math::BigInt.3pm
> > Math::BigInt::Calc.3pm
> > Math::BigInt::Trace.3pm
> > Math::BigRat.3pm
> > Math::Complex.3pm
> > Math::Trig.3pm
> > Memoize.3pm
> > Memoize::AnyDBM_File.3pm
> > Memoize::Expire.3pm
> > Memoize::ExpireFile.3pm
> > Memoize::ExpireTest.3pm
> > Memoize::NDBM_File.3pm
> > Memoize::SDBM_File.3pm
> > Memoize::Storable.3pm
> > NDBM_File.3pm
> > NEXT.3pm
> > Net::Cmd.3pm
> > Net::Config.3pm
> > Net::Domain.3pm
> > Net::FTP.3pm
> > Net::FTP::A.3pm
> > Net::FTP::E.3pm
> > Net::FTP::I.3pm
> > Net::FTP::L.3pm
> > Net::FTP::dataconn.3pm
> > Net::NNTP.3pm
> > Net::Netrc.3pm
> > Net::POP3.3pm
> > Net::Ping.3pm
> > Net::SMTP.3pm
> > Net::Time.3pm
> > Net::hostent.3pm
> > Net::libnetFAQ.3pm
> > Net::netent.3pm
> > Net::protoent.3pm
> > Net::servent.3pm
> > O.3pm
> > Opcode.3pm
> > POSIX.3pm
> > PerlIO.3pm
> > PerlIO::encoding.3pm
> > PerlIO::scalar.3pm
> > PerlIO::via.3pm
> > PerlIO::via::QuotedPrint.3pm
> > Pod::Checker.3pm
> > Pod::Find.3pm
> > Pod::Html.3pm
> > Pod::InputObjects.3pm
> > Pod::LaTeX.3pm
> > Pod::Man.3pm
> > Pod::ParseLink.3pm
> > Pod::ParseUtils.3pm
> > Pod::Parser.3pm
> > Pod::Plainer.3pm
> > Pod::Select.3pm
> > Pod::Text.3pm
> > Pod::Text::Color.3pm
> > Pod::Text::Overstrike.3pm
> > Pod::Text::Termcap.3pm
> > Pod::Usage.3pm
> > SDBM_File.3pm
> > Safe.3pm
> > Scalar::Util.3pm
> > Search::Dict.3pm
> > SelectSaver.3pm
> > SelfLoader.3pm
> > Shell.3pm
> > Socket.3pm
> > Storable.3pm
> > Switch.3pm
> > Symbol.3pm
> > Sys::Hostname.3pm
> > Sys::Syslog.3pm
> > Term::ANSIColor.3pm
> > Term::Cap.3pm
> > Term::Complete.3pm
> > Term::ReadLine.3pm
> > Test.3pm
> > Test::Builder.3pm
> > Test::Harness.3pm
> > Test::Harness::Assert.3pm
> > Test::Harness::Iterator.3pm
> > Test::Harness::Straps.3pm
> > Test::More.3pm
> > Test::Simple.3pm
> > Test::Tutorial.3pm
> > Text::Abbrev.3pm
> > Text::Balanced.3pm
> > Text::ParseWords.3pm
> > Text::Soundex.3pm
> > Text::Tabs.3pm
> > Text::Wrap.3pm
> > Thread.3pm
> > Thread::Queue.3pm
> > Thread::Semaphore.3pm
> > Tie::Array.3pm
> > Tie::File.3pm
> > Tie::Handle.3pm
> > Tie::Hash.3pm
> > Tie::Memoize.3pm
> > Tie::RefHash.3pm
> > Tie::Scalar.3pm
> > Tie::SubstrHash.3pm
> > Time::HiRes.3pm
> > Time::Local.3pm
> > Time::gmtime.3pm
> > Time::localtime.3pm
> > Time::tm.3pm
> > UNIVERSAL.3pm
> > Unicode::Collate.3pm
> > Unicode::Normalize.3pm
> > Unicode::UCD.3pm
> > User::grent.3pm
> > User::pwent.3pm
> > Win32.3pm
> > XS::APItest.3pm
> > XS::Typemap.3pm
> > XSLoader.3pm
>
>
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
Martin Schlemmer


2003-08-19 18:42:01

by Christopher Li

[permalink] [raw]
Subject: Re: [PATCH] fix for htree corruption. Was: [2.6] Perl weirdness with ext3 and HTREE

On Tue, Aug 19, 2003 at 03:55:06AM -0700, Andrew Morton wrote:
> [email protected] wrote:
>
> Could you please regenerate a full, single diff against a known kernel
> version? That patch generated 100% rejects for me...
>
>
Sorry for that. Here is the patch again. It is against the 2.6-test3.
It also apply cleanly on current BK tree.

Chris


===== fs/ext3/namei.c 1.44 vs edited =====
--- 1.44/fs/ext3/namei.c Sun Jun 29 23:49:04 2003
+++ edited/fs/ext3/namei.c Tue Aug 19 03:28:52 2003
@@ -1304,7 +1304,8 @@
data1 = bh2->b_data;

/* The 0th block becomes the root, move the dirents out */
- de = (struct ext3_dir_entry_2 *) &root->info;
+ de = &root->dotdot;
+ de = (struct ext3_dir_entry_2 *) ((char *)de + de->rec_len);
len = ((char *) root) + blocksize - (char *) de;
memcpy (data1, de, len);
de = (struct ext3_dir_entry_2 *) data1;
@@ -2006,9 +2007,9 @@
* recovery. */
inode->i_size = 0;
ext3_orphan_add(handle, inode);
+ inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
ext3_mark_inode_dirty(handle, inode);
dir->i_nlink--;
- inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
ext3_update_dx_flag(dir);
ext3_mark_inode_dirty(handle, dir);

@@ -2060,8 +2061,8 @@
inode->i_nlink--;
if (!inode->i_nlink)
ext3_orphan_add(handle, inode);
- ext3_mark_inode_dirty(handle, inode);
inode->i_ctime = dir->i_ctime;
+ ext3_mark_inode_dirty(handle, inode);
retval = 0;

end_unlink:
@@ -2220,7 +2221,6 @@
goto end_rename;
} else {
BUFFER_TRACE(new_bh, "get write access");
- BUFFER_TRACE(new_bh, "get_write_access");
ext3_journal_get_write_access(handle, new_bh);
new_de->inode = le32_to_cpu(old_inode->i_ino);
if (EXT3_HAS_INCOMPAT_FEATURE(new_dir->i_sb,


2003-08-21 19:46:03

by Martin Schlemmer

[permalink] [raw]
Subject: Re: [PATCH] fix for htree corruption. Was: [2.6] Perl weirdness with ext3 and HTREE

On Tue, 2003-08-19 at 12:40, [email protected] wrote:

Hi

>
> The first patch should fix it. The bug is trigger by creating the index.
> Coping out the index we assume the dirents start with the first entry
> after "." "..".
>
> It can make the first previous deleted entry reappear.
> In the past we set inode to zero for empty entry so this is not
> a problem. That is not true any more.
>
> Andrew, I assume touch inode->i_ctime after
> ext3_mark_inode_dirty is a bug? The second patch is for that.
>
>

I can confirm that this works as expected, many thanks!
Sorry for the long delay ...


Regards,

--

Martin Schlemmer




Attachments:
signature.asc (189.00 B)
This is a digitally signed message part