This is the mail archive of the
cluster-cvs@sourceware.org
mailing list for the cluster.
master - GFS2: gfs2_fsck: fix segfault while running special blocklists.
- From: Bob Peterson <rpeterso at fedoraproject dot org>
- To: cluster-cvs-relay at redhat dot com
- Date: Wed, 24 Sep 2008 16:59:42 +0000 (UTC)
- Subject: 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;