This is the mail archive of the cluster-cvs@sourceware.org mailing list for the cluster.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

master - GFS2: gfs2_fsck: fix segfault while running special blocklists.


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=24b6bb1ac02ad81507e291161298a4293303ddfb
Commit:        24b6bb1ac02ad81507e291161298a4293303ddfb
Parent:        21204977fb4c3f711fab112fd27c18fea41f1c21
Author:        Bob Peterson <rpeterso@redhat.com>
AuthorDate:    Wed Sep 24 11:50:22 2008 -0500
Committer:     Bob Peterson <rpeterso@redhat.com>
CommitterDate: Wed Sep 24 11:59:31 2008 -0500

GFS2: gfs2_fsck: fix segfault while running special block lists.

bz 463588 - GFS2: gfs2_fsck segfaults when extended attributes are on the file system

The gfs2_fsck tool was running special block lists with
osi_list_foreach but then it was sometimes deleting the
entries from the lists.  Therefore it should have been using
osi_list_foreach_safe instead.
---
 gfs2/fsck/pass1b.c |    4 ++--
 gfs2/fsck/pass1c.c |    4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/gfs2/fsck/pass1b.c b/gfs2/fsck/pass1b.c
index bfe0456..60ccf39 100644
--- a/gfs2/fsck/pass1b.c
+++ b/gfs2/fsck/pass1b.c
@@ -457,7 +457,7 @@ int pass1b(struct gfs2_sbd *sbp)
 	struct blocks *b;
 	uint64_t i;
 	struct gfs2_block_query q;
-	osi_list_t *tmp = NULL;
+	osi_list_t *tmp = NULL, *x;
 	struct metawalk_fxns find_dirents = {0};
 	find_dirents.check_dentry = &find_dentry;
 	int rc = 0;
@@ -493,7 +493,7 @@ int pass1b(struct gfs2_sbd *sbp)
 		   (q.block_type == gfs2_inode_chr) ||
 		   (q.block_type == gfs2_inode_fifo) ||
 		   (q.block_type == gfs2_inode_sock)) {
-			osi_list_foreach(tmp, &sbp->dup_blocks.list) {
+			osi_list_foreach_safe(tmp, &sbp->dup_blocks.list, x) {
 				b = osi_list_entry(tmp, struct blocks, list);
 				if(find_block_ref(sbp, i, b)) {
 					stack;
diff --git a/gfs2/fsck/pass1c.c b/gfs2/fsck/pass1c.c
index 45d3dec..ec097ad 100644
--- a/gfs2/fsck/pass1c.c
+++ b/gfs2/fsck/pass1c.c
@@ -226,7 +226,7 @@ int pass1c(struct gfs2_sbd *sbp)
 	struct gfs2_inode *ip = NULL;
 	struct metawalk_fxns pass1c_fxns = { 0 };
 	int error = 0;
-	osi_list_t *tmp;
+	osi_list_t *tmp, *x;
 	struct special_blocks *ea_block;
 	enum update_flags want_updated = not_updated;
 
@@ -237,7 +237,7 @@ int pass1c(struct gfs2_sbd *sbp)
 	pass1c_fxns.private = NULL;
 
 	log_info("Looking for inodes containing ea blocks...\n");
-	osi_list_foreach(tmp, &sbp->eattr_blocks.list) {
+	osi_list_foreach_safe(tmp, &sbp->eattr_blocks.list, x) {
 		ea_block = osi_list_entry(tmp, struct special_blocks, list);
 		block_no = ea_block->block;
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]