All of lore.kernel.org
 help / color / mirror / Atom feed
From: rpeterso@sourceware.org <rpeterso@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] cluster/gfs2/fsck metawalk.c pass1.c pass1b.c  ...
Date: 18 Sep 2007 18:14:08 -0000	[thread overview]
Message-ID: <20070918181408.19147.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/cluster
Module name:	cluster
Changes by:	rpeterso at sourceware.org	2007-09-18 18:14:06

Modified files:
	gfs2/fsck      : metawalk.c pass1.c pass1b.c pass1c.c pass2.c 

Log message:
	Resolves: bz 291451: gfs2_fsck -n, Bad file descriptor on line 63 of
	file buf.c (addendum)

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/fsck/metawalk.c.diff?cvsroot=cluster&r1=1.12&r2=1.13
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/fsck/pass1.c.diff?cvsroot=cluster&r1=1.10&r2=1.11
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/fsck/pass1b.c.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/fsck/pass1c.c.diff?cvsroot=cluster&r1=1.6&r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs2/fsck/pass2.c.diff?cvsroot=cluster&r1=1.8&r2=1.9

--- cluster/gfs2/fsck/metawalk.c	2007/09/17 17:08:20	1.12
+++ cluster/gfs2/fsck/metawalk.c	2007/09/18 18:14:04	1.13
@@ -140,7 +140,8 @@
 				de.de_inum.no_addr = de.de_inum.no_formal_ino;
 				de.de_inum.no_formal_ino = 0;
 				gfs2_dirent_out(&de, (char *)dent);
-				*update = 1; /* Mark dirent buffer as modified */
+				*update = (opts.no ? not_updated : updated);
+				/* Mark dirent buffer as modified */
 				first = 0;
 			}
 			else {
@@ -282,7 +283,7 @@
 					       old_leaf, index,
 					       "that is not really a leaf");
 				memcpy(&leaf, &oldleaf, sizeof(oldleaf));
-				brelse(lbh, updated);
+				brelse(lbh, (opts.no ? not_updated : updated));
 				break;
 			}
 			gfs2_leaf_in(&leaf, lbh->b_data);
@@ -303,7 +304,7 @@
 				leaf.lf_dirent_format = GFS2_FORMAT_DE;
 				gfs2_leaf_out(&leaf, lbh->b_data);
 				log_debug("Fixing lf_dirent_format.\n");
-				*update = updated;
+				*update = (opts.no ? not_updated : updated);
 			}
 
 			/* Make sure it's really a leaf. */
@@ -768,15 +769,12 @@
 	memset(&dentry, 0, sizeof(struct gfs2_dirent));
 	gfs2_dirent_in(&dentry, (char *)dent);
 	de = &dentry;
+	*update = (opts.no ? not_updated : updated);
 
-	if(de->de_inum.no_addr == *dentryblock) {
-		*update = 1;
+	if(de->de_inum.no_addr == *dentryblock)
 		dirent2_del(ip, bh, prev_de, dent);
-	}
-	else {
+	else
 		(*count)++;
-		*update = 1;
-	}
 
 	return 0;
 
--- cluster/gfs2/fsck/pass1.c	2007/08/15 22:28:18	1.10
+++ cluster/gfs2/fsck/pass1.c	2007/09/18 18:14:04	1.11
@@ -253,7 +253,7 @@
 			    void *private)
 {
 	struct gfs2_sbd *sdp = ip->i_sbd;
-	struct gfs2_buffer_head *leaf_bh;
+	struct gfs2_buffer_head *leaf_bh = NULL;
 	int ret = 0;
 	struct gfs2_block_query q = {0};
 	struct block_count *bc = (struct block_count *) private;
--- cluster/gfs2/fsck/pass1b.c	2007/06/28 23:41:37	1.5
+++ cluster/gfs2/fsck/pass1b.c	2007/09/18 18:14:04	1.6
@@ -367,7 +367,7 @@
 		id->ea_only = myfi.ea_only;
 		osi_list_add_prev(&id->list, &b->ref_inode_list);
 	}
-	inode_put(ip, updated); /* out, brelse, free */
+	inode_put(ip, (opts.no ? not_updated : updated)); /* out, brelse, free */
 	return 0;
 }
 
@@ -464,7 +464,7 @@
 	struct blocks *b;
 	uint64_t i;
 	struct gfs2_block_query q;
-	osi_list_t *tmp;
+	osi_list_t *tmp = NULL;
 	struct metawalk_fxns find_dirents = {0};
 	find_dirents.check_dentry = &find_dentry;
 	int rc = 0;
--- cluster/gfs2/fsck/pass1c.c	2007/06/28 23:41:37	1.6
+++ cluster/gfs2/fsck/pass1c.c	2007/09/18 18:14:04	1.7
@@ -52,7 +52,7 @@
 	if(gfs2_check_range(sbp, block)) {
 		log_err("Extended attributes indirect block out of range...removing\n");
 		ip->i_di.di_eattr = 0;
-		*update = 1;
+		*update = (opts.no ? not_updated : updated);
 		return 1;
 	}
 	else if (gfs2_block_check(bl, block, &q)) {
@@ -62,7 +62,7 @@
 	else if(q.block_type != gfs2_indir_blk) {
 		log_err("Extended attributes indirect block invalid...removing\n");
 		ip->i_di.di_eattr = 0;
-		*update = 1;
+		*update = (opts.no ? not_updated : updated);
 		return 1;
 	}
 	else
@@ -82,7 +82,7 @@
 	if(gfs2_check_range(sbp, block)) {
 		log_err("Extended attributes block out of range...removing\n");
 		ip->i_di.di_eattr = 0;
-		*update = 1;
+		*update = (opts.no ? not_updated : updated);
 		return 1;
 	}
 	else if (gfs2_block_check(bl, block, &q)) {
@@ -92,7 +92,7 @@
 	else if(q.block_type != gfs2_meta_eattr) {
 		log_err("Extended attributes block invalid...removing\n");
 		ip->i_di.di_eattr = 0;
-		*update = 1;
+		*update = (opts.no ? not_updated : updated);
 		return 1;
 	}
 	else 
--- cluster/gfs2/fsck/pass2.c	2007/09/17 17:08:20	1.8
+++ cluster/gfs2/fsck/pass2.c	2007/09/18 18:14:04	1.9
@@ -157,9 +157,9 @@
 /* FIXME: should maybe refactor this a bit - but need to deal with
  * FIXMEs internally first */
 int check_dentry(struct gfs2_inode *ip, struct gfs2_dirent *dent,
-				 struct gfs2_dirent *prev_de,
-				 struct gfs2_buffer_head *bh, char *filename, int *update,
-				 uint16_t *count, void *priv)
+		 struct gfs2_dirent *prev_de,
+		 struct gfs2_buffer_head *bh, char *filename,
+		 int *update, uint16_t *count, void *priv)
 {
 	struct gfs2_sbd *sbp = ip->i_sbd;
 	struct gfs2_block_query q = {0};
@@ -231,10 +231,10 @@
 				 "Clear directory entry tp out of range block? (y/n) ")) {
 			log_err("Clearing %s\n", tmp_name);
 			dirent2_del(ip, bh, prev_de, dent);
+			*update = 1;
 			return 1;
 		} else {
 			log_err("Directory entry to out of range block remains\n");
-			*update = 1;
 			(*count)++;
 			ds->entry_count++;
 			return 0;
@@ -265,10 +265,10 @@
 			dirent2_del(ip, bh, prev_de, dent);
 
 			gfs2_block_set(bl, de->de_inum.no_addr, gfs2_meta_inval);
+			*update = 1;
 			return 1;
 		} else {
 			log_warn("Entry to inode containing bad blocks remains\n");
-			*update = 1;
 			(*count)++;
 			ds->entry_count++;
 			return 0;
@@ -291,11 +291,11 @@
 			 * this inode are cleared in the bitmap */
 
 			dirent2_del(ip, bh, prev_de, dent);
+			*update = 1;
 			log_warn("Directory entry '%s' cleared\n", tmp_name);
 			return 1;
 		} else {
 			log_err("Directory entry to non-inode block remains\n");
-			*update = 1;
 			(*count)++;
 			ds->entry_count++;
 			return 0;
@@ -319,10 +319,10 @@
 			inode_put(entry_ip, not_updated);
 
 			dirent2_del(ip, bh, prev_de, dent);
+			*update  = 1;
 			return 1;
 		} else {
 			log_err("Stale directory entry remains\n");
-			*update  = 1;
 			(*count)++;
 			ds->entry_count++;
 			return 0;
@@ -343,6 +343,7 @@
 				inode_put(entry_ip, not_updated);
 
 				dirent2_del(ip, bh, prev_de, dent);
+				*update  = 1;
 				return 1;
 			} else {
 				log_err("Duplicate '.' entry remains\n");
@@ -350,7 +351,6 @@
 				 * and check the rest of the '.'
 				 * entry? */
 				increment_link(sbp, de->de_inum.no_addr);
-				*update  = 1;
 				(*count)++;
 				ds->entry_count++;
 				return 0;
@@ -374,6 +374,7 @@
 				inode_put(entry_ip, not_updated);
 
 				dirent2_del(ip, bh, prev_de, dent);
+				*update = 1;
 				return 1;
 
 			} else {
@@ -381,7 +382,6 @@
 				/* Not setting ds->dotdir here since
 				 * this '.' entry is invalid */
 				increment_link(sbp, de->de_inum.no_addr);
-				*update = 1;
 				(*count)++;
 				ds->entry_count++;
 				return 0;
@@ -390,7 +390,7 @@
 
 		ds->dotdir = 1;
 		increment_link(sbp, de->de_inum.no_addr);
-		*update = 1;
+		*update = (opts.no ? not_updated : updated);
 		(*count)++;
 		ds->entry_count++;
 
@@ -417,7 +417,6 @@
 				 * and check the rest of the '..'
 				 * entry? */
 				increment_link(sbp, de->de_inum.no_addr);
-				*update  = 1;
 				(*count)++;
 				ds->entry_count++;
 				return 0;
@@ -440,7 +439,6 @@
 			} else {
 				log_err("Bad '..' directory entry remains\n");
 				increment_link(sbp, de->de_inum.no_addr);
-				*update  = 1;
 				(*count)++;
 				ds->entry_count++;
 				return 0;
@@ -459,7 +457,7 @@
 
 		ds->dotdotdir = 1;
 		increment_link(sbp, de->de_inum.no_addr);
-		*update = 1;
+		*update = (opts.no ? not_updated : updated);
 		(*count)++;
 		ds->entry_count++;
 		return 0;
@@ -470,7 +468,7 @@
 	if(q.block_type != gfs2_inode_dir) {
 		log_debug("Found non-dir inode dentry\n");
 		increment_link(sbp, de->de_inum.no_addr);
-		*update = 1;
+		*update = (opts.no ? not_updated : updated);
 		(*count)++;
 		ds->entry_count++;
 		return 0;
@@ -491,7 +489,6 @@
 			return 1;
 		} else {
 			log_err("Hard link to directory remains\n");
-			*update = 1;
 			(*count)++;
 			ds->entry_count++;
 			return 0;
@@ -502,7 +499,7 @@
 		return -1;
 	}
 	increment_link(sbp, de->de_inum.no_addr);
-	*update = 1;
+	*update = (opts.no ? not_updated : updated);
 	(*count)++;
 	ds->entry_count++;
 	/* End of checks */



             reply	other threads:[~2007-09-18 18:14 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-18 18:14 rpeterso [this message]
  -- strict thread matches above, loose matches on Subject: below --
2007-06-28 23:42 [Cluster-devel] cluster/gfs2/fsck metawalk.c pass1.c pass1b.c rpeterso
2007-06-28 23:41 rpeterso

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070918181408.19147.qmail@sourceware.org \
    --to=rpeterso@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.