linux-ext4.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Fix ext2fs_set_gdt_csum() to use access functions.
@ 2009-09-03  3:21 Nick Dokos
  2009-09-03  4:51 ` Eric Sandeen
  2009-09-03  5:21 ` Andreas Dilger
  0 siblings, 2 replies; 7+ messages in thread
From: Nick Dokos @ 2009-09-03  3:21 UTC (permalink / raw)
  To: Theodore Ts'o
  Cc: nicholas.dokos, linux-ext4, Andreas Dilger, Eric Sandeen,
	Justin Maggard, Ric Wheeler

Following Andreas's suggestion, I found that ext2fs_set_gdt_csum()
was the culprit: it used an ext2_group_desc pointer to access/set
fields and it did that directly, not through access functions.

I'm testing the patch now, but it'll take a while, so again I'm sending
it out for comments and to possibly try out. Even if it checks out, it
will need some additional care once the flags situation settles down.

Thanks,
Nick

>From 6a3b83cda1bcd1e3594515ee888f175bf5cc7906 Mon Sep 17 00:00:00 2001
From: Nick Dokos <nicholas.dokos@hp.com>
Date: Wed, 2 Sep 2009 23:00:23 -0400
Subject: [PATCH] Fix ext2fs_set_gdt_csum() to use access functions.

Replace all field accesses with calls to access functions.
Most importantly, get rid of the mis-declared group descriptor
pointer which caused the wrong fields to be updated.

Signed-off-by: Nick Dokos <nicholas.dokos@hp.com>
---
 lib/ext2fs/csum.c |   30 +++++++++++++++++-------------
 1 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/lib/ext2fs/csum.c b/lib/ext2fs/csum.c
index a0f25e3..def3ddd 100644
--- a/lib/ext2fs/csum.c
+++ b/lib/ext2fs/csum.c
@@ -105,7 +105,6 @@ static __u32 find_last_inode_ingrp(ext2fs_inode_bitmap bitmap,
 errcode_t ext2fs_set_gdt_csum(ext2_filsys fs)
 {
 	struct ext2_super_block *sb = fs->super;
-	struct ext2_group_desc *bg = fs->group_desc;
 	int dirty = 0;
 	dgrp_t i;
 
@@ -116,27 +115,32 @@ errcode_t ext2fs_set_gdt_csum(ext2_filsys fs)
 					EXT4_FEATURE_RO_COMPAT_GDT_CSUM))
 		return 0;
 
-	for (i = 0; i < fs->group_desc_count; i++, bg++) {
-		int old_csum = bg->bg_checksum;
-		int old_unused = bg->bg_itable_unused;
-		int old_flags = bg->bg_flags;
+	for (i = 0; i < fs->group_desc_count; i++) {
+		unsigned int old_csum = ext2fs_bg_checksum(fs, i);
+                int old_unused = ext2fs_bg_itable_unused(fs, i);
+		unsigned int old_flags = ext2fs_bg_flags(fs, i);
+                int old_free_inodes_count = ext2fs_bg_free_inodes_count(fs, i);
+                
 
-		if (bg->bg_free_inodes_count == sb->s_inodes_per_group) {
-			bg->bg_flags |= EXT2_BG_INODE_UNINIT;
-			bg->bg_itable_unused = sb->s_inodes_per_group;
+		if (old_free_inodes_count == sb->s_inodes_per_group) {
+			ext2fs_bg_flags_set(fs, i, old_flags | EXT2_BG_INODE_UNINIT);
+			ext2fs_bg_itable_unused_set(fs, i, sb->s_inodes_per_group);
 		} else {
-			bg->bg_flags &= ~EXT2_BG_INODE_UNINIT;
-			bg->bg_itable_unused = sb->s_inodes_per_group -
+			int unused = sb->s_inodes_per_group -
 				find_last_inode_ingrp(fs->inode_map,
 						      sb->s_inodes_per_group,i);
+
+			ext2fs_bg_flags_set(fs, i, old_flags & ~EXT2_BG_INODE_UNINIT);
+			
+			ext2fs_bg_itable_unused_set(fs, i, unused);
 		}
 
 		ext2fs_group_desc_csum_set(fs, i);
-		if (old_flags != bg->bg_flags)
+		if (old_flags != ext2fs_bg_flags(fs, i))
 			dirty = 1;
-		if (old_unused != bg->bg_itable_unused)
+		if (old_unused != ext2fs_bg_itable_unused(fs, i))
 			dirty = 1;
-		if (old_csum != bg->bg_checksum)
+		if (old_csum != ext2fs_bg_checksum(fs, i))
 			dirty = 1;
 	}
 	if (dirty)
-- 
1.6.0.6


^ permalink raw reply related	[flat|nested] 7+ messages in thread
* Re: [PATCH] Fix ext2fs_set_gdt_csum() to use access functions.
@ 2009-09-03  5:22 Nick Dokos
  0 siblings, 0 replies; 7+ messages in thread
From: Nick Dokos @ 2009-09-03  5:22 UTC (permalink / raw)
  To: linux-ext4; +Cc: nicholas.dokos

Forgot to copy the list...

------- Forwarded Message

Date:    Thu, 03 Sep 2009 01:20:00 -0400
From:    Nick Dokos <nicholas.dokos@hp.com>
To:      Eric Sandeen <sandeen@redhat.com>
cc:      nicholas.dokos@hp.com
Subject: Re: [PATCH] Fix ext2fs_set_gdt_csum() to use access functions.

> Eric Sandeen <sandeen@redhat.com> wrote:
> 
> ...
> right.  Ok, I was just confused when you said "mis-declared" - thought 
> you meant something was wrong with how bg was set or initialized.
> 
Oh, I see: yes, "mis-declared" is not right - it should not exist
at all!-) I'll rephrase it somehow.

Thanks,
Nick


------- End of Forwarded Message


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2009-09-03 18:22 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-03  3:21 [PATCH] Fix ext2fs_set_gdt_csum() to use access functions Nick Dokos
2009-09-03  4:51 ` Eric Sandeen
2009-09-03  5:11   ` Nick Dokos
2009-09-03  5:12     ` Eric Sandeen
2009-09-03 18:16     ` Justin Maggard
2009-09-03  5:21 ` Andreas Dilger
  -- strict thread matches above, loose matches on Subject: below --
2009-09-03  5:22 Nick Dokos

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).