OpenVZ Forum


Home » Mailing lists » Devel » [PATCH ext3/ext4] orphan list check on destroy_inode
[PATCH ext3/ext4] orphan list check on destroy_inode [message #13694] Mon, 04 June 2007 05:18 Go to next message
vaverin is currently offline  vaverin
Messages: 708
Registered: September 2005
Senior Member
Customers claims to ext3-related errors, investigation showed that ext3 orphan list has been corrupted and have the reference to non-ext3 inode. The following debug helps to understand the reasons of this issue.

Signed-off-by: Vasily Averin <vvs@sw.ru>

diff --git a/fs/ext3/super.c b/fs/ext3/super.c
index 6e30629..46e2fa6 100644
--- a/fs/ext3/super.c
+++ b/fs/ext3/super.c
@@ -459,6 +459,21 @@ static struct inode *ext3_alloc_inode(struct super_block *sb)

static void ext3_destroy_inode(struct inode *inode)
{
+ if (!list_empty(&(EXT3_I(inode)->i_orphan))) {
+ int i, imax;
+ unsigned int *p;
+
+ p = (unsigned int *)EXT3_I(inode);
+ imax = sizeof(struct ext3_inode_info) / sizeof(unsigned int);
+ printk("Inode %p: orphan list check failed!\n", EXT3_I(inode));
+ for (i = 0; i < imax; i++) {
+ if (i && ((i % 8) == 0))
+ printk("\n");
+ printk("%08x ", *p++);
+ }
+ printk("\n");
+ dump_stack();
+ }
kmem_cache_free(ext3_inode_cachep, EXT3_I(inode));
}

diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index cb9afdd..f86e0ac 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -510,6 +510,21 @@ static struct inode *ext4_alloc_inode(struct super_block *sb)

static void ext4_destroy_inode(struct inode *inode)
{
+ if (!list_empty(&(EXT4_I(inode)->i_orphan))) {
+ int i, imax;
+ unsigned int *p;
+
+ p = (unsigned int *)EXT4_I(inode);
+ imax = sizeof(struct ext4_inode_info) / sizeof(unsigned int);
+ printk("Inode %p: orphan list check failed!\n", EXT4_I(inode));
+ for (i = 0; i < imax; i++) {
+ if (i && ((i % 8) == 0))
+ printk("\n");
+ printk("%08x ", *p++);
+ }
+ printk("\n");
+ dump_stack();
+ }
kmem_cache_free(ext4_inode_cachep, EXT4_I(inode));
}
Re: [PATCH ext3/ext4] orphan list check on destroy_inode [message #13770 is a reply to message #13694] Tue, 05 June 2007 01:54 Go to previous messageGo to next message
Andrew Morton is currently offline  Andrew Morton
Messages: 127
Registered: December 2005
Senior Member
On Mon, 04 Jun 2007 09:18:55 +0400 Vasily Averin <vvs@sw.ru> wrote:

> Customers claims to ext3-related errors, investigation showed that ext3 orphan list has been corrupted and have the reference to non-ext3 inode. The following debug helps to understand the reasons of this issue.
>
> Signed-off-by: Vasily Averin <vvs@sw.ru>
>
> diff --git a/fs/ext3/super.c b/fs/ext3/super.c
> index 6e30629..46e2fa6 100644
> --- a/fs/ext3/super.c
> +++ b/fs/ext3/super.c
> @@ -459,6 +459,21 @@ static struct inode *ext3_alloc_inode(struct super_block *sb)
>
> static void ext3_destroy_inode(struct inode *inode)
> {
> + if (!list_empty(&(EXT3_I(inode)->i_orphan))) {
> + int i, imax;
> + unsigned int *p;
> +
> + p = (unsigned int *)EXT3_I(inode);
> + imax = sizeof(struct ext3_inode_info) / sizeof(unsigned int);
> + printk("Inode %p: orphan list check failed!\n", EXT3_I(inode));
> + for (i = 0; i < imax; i++) {
> + if (i && ((i % 8) == 0))
> + printk("\n");
> + printk("%08x ", *p++);
> + }
> + printk("\n");
> + dump_stack();

umm, OK, but please use the new lib/hexdump.c for this.
Re: [PATCH ext3/ext4] orphan list check on destroy_inode [message #13775 is a reply to message #13694] Tue, 05 June 2007 06:49 Go to previous message
vaverin is currently offline  vaverin
Messages: 708
Registered: September 2005
Senior Member
Eric Sandeen wrote:
> Vasily Averin wrote:
>> Customers claims to ext3-related errors, investigation showed that ext3
>> orphan list has been corrupted and have the reference to non-ext3 inode.
>> The following debug helps to understand the reasons of this issue.
>
> Vasily, does your customer have this patch in place?
>
> http://www.mail-archive.com/linux-ext4@vger.kernel.org/msg00 889.html
>
> If not, perhaps it could be leading to the same error, because the inode will
> not be properly removed from the orphan inode list when it is freed, and
> could then be recycled...

We did have a several bugreports occurred on the kernels without your patch, but
latest incident (when check in ext3_destroy_inode has been triggered) has been
occurred on the kernel where your patch has been applied.

Thank you,
Vasily Averin
Re: [PATCH ext3/ext4] orphan list check on destroy_inode [message #13899 is a reply to message #13694] Tue, 05 June 2007 03:04 Go to previous message
Eric Sandeen is currently offline  Eric Sandeen
Messages: 4
Registered: September 2006
Junior Member
Vasily Averin wrote:
> Customers claims to ext3-related errors, investigation showed that ext3 orphan list has been corrupted and have the reference to non-ext3 inode. The following debug helps to understand the reasons of this issue.

Vasily, does your customer have this patch in place?

http://www.mail-archive.com/linux-ext4@vger.kernel.org/msg00 889.html

If not, perhaps it could be leading to the same error, because the inode
will not be properly removed from the orphan inode list when it is
freed, and could then be recycled...

-Eric
Previous Topic: release_task(), procfs dependency
Next Topic: Re: [Fwd: [PATCH -RSS 2/2] Fix limit check after reclaim]
Goto Forum:
  


Current Time: Fri Jul 04 08:30:17 GMT 2025

Total time taken to generate the page: 0.02246 seconds