[Cluster-devel] [PATCH 3/5] fsck.gfs2: Use the new list.h

Andrew Price anprice at redhat.com
Wed Aug 14 17:01:03 UTC 2019


Signed-off-by: Andrew Price <anprice at redhat.com>
---
 gfs2/fsck/fs_recovery.c | 29 +++++++++---------
 gfs2/fsck/fsck.h        |  7 +++--
 gfs2/fsck/inode_hash.c  |  1 -
 gfs2/fsck/main.c        |  1 -
 gfs2/fsck/metawalk.c    |  4 +--
 gfs2/fsck/pass1b.c      | 34 ++++++++++-----------
 gfs2/fsck/pass3.c       |  1 -
 gfs2/fsck/rgrepair.c    |  1 -
 gfs2/fsck/util.c        | 66 +++++++++++++++++++----------------------
 9 files changed, 69 insertions(+), 75 deletions(-)

diff --git a/gfs2/fsck/fs_recovery.c b/gfs2/fsck/fs_recovery.c
index 4c0932b8..0da77453 100644
--- a/gfs2/fsck/fs_recovery.c
+++ b/gfs2/fsck/fs_recovery.c
@@ -10,6 +10,7 @@
 #define _(String) gettext(String)
 
 #include <logging.h>
+#include <list.h>
 #include "fsck.h"
 #include "fs_recovery.h"
 #include "libgfs2.h"
@@ -22,23 +23,23 @@
 unsigned int sd_found_jblocks = 0, sd_replayed_jblocks = 0;
 unsigned int sd_found_metablocks = 0, sd_replayed_metablocks = 0;
 unsigned int sd_found_revokes = 0;
-osi_list_t sd_revoke_list;
+struct list_head sd_revoke_list;
 unsigned int sd_replay_tail;
 
 struct gfs2_revoke_replay {
-	osi_list_t rr_list;
+	struct list_head rr_list;
 	uint64_t rr_blkno;
 	unsigned int rr_where;
 };
 
 int gfs2_revoke_add(struct gfs2_sbd *sdp, uint64_t blkno, unsigned int where)
 {
-	osi_list_t *tmp, *head = &sd_revoke_list;
+	struct list_head *tmp, *head = &sd_revoke_list;
 	struct gfs2_revoke_replay *rr;
 	int found = 0;
 
-	osi_list_foreach(tmp, head) {
-		rr = osi_list_entry(tmp, struct gfs2_revoke_replay, rr_list);
+	list_for_each(tmp, head) {
+		rr = list_entry(tmp, struct gfs2_revoke_replay, rr_list);
 		if (rr->rr_blkno == blkno) {
 			found = 1;
 			break;
@@ -56,19 +57,19 @@ int gfs2_revoke_add(struct gfs2_sbd *sdp, uint64_t blkno, unsigned int where)
 
 	rr->rr_blkno = blkno;
 	rr->rr_where = where;
-	osi_list_add(&rr->rr_list, head);
+	list_add(&rr->rr_list, head);
 	return 1;
 }
 
 int gfs2_revoke_check(struct gfs2_sbd *sdp, uint64_t blkno, unsigned int where)
 {
-	osi_list_t *tmp;
+	struct list_head *tmp;
 	struct gfs2_revoke_replay *rr;
 	int wrap, a, b;
 	int found = 0;
 
-	osi_list_foreach(tmp, &sd_revoke_list) {
-		rr = osi_list_entry(tmp, struct gfs2_revoke_replay, rr_list);
+	list_for_each(tmp, &sd_revoke_list) {
+		rr = list_entry(tmp, struct gfs2_revoke_replay, rr_list);
 		if (rr->rr_blkno == blkno) {
 			found = 1;
 			break;
@@ -86,12 +87,12 @@ int gfs2_revoke_check(struct gfs2_sbd *sdp, uint64_t blkno, unsigned int where)
 
 void gfs2_revoke_clean(struct gfs2_sbd *sdp)
 {
-	osi_list_t *head = &sd_revoke_list;
+	struct list_head *head = &sd_revoke_list;
 	struct gfs2_revoke_replay *rr;
 
-	while (!osi_list_empty(head)) {
-		rr = osi_list_entry(head->next, struct gfs2_revoke_replay, rr_list);
-		osi_list_del(&rr->rr_list);
+	while (!list_empty(head)) {
+		rr = list_entry(head->next, struct gfs2_revoke_replay, rr_list);
+		list_del(&rr->rr_list);
 		free(rr);
 	}
 }
@@ -502,7 +503,7 @@ static int gfs2_recover_journal(struct gfs2_inode *ip, int j, int preen,
 	*was_clean = 0;
 	log_info( _("jid=%u: Looking at journal...\n"), j);
 
-	osi_list_init(&sd_revoke_list);
+	INIT_LIST_HEAD(&sd_revoke_list);
 	error = gfs2_find_jhead(ip, &head);
 	if (!error) {
 		error = check_journal_seq_no(ip, 0);
diff --git a/gfs2/fsck/fsck.h b/gfs2/fsck/fsck.h
index 877448c3..13376a87 100644
--- a/gfs2/fsck/fsck.h
+++ b/gfs2/fsck/fsck.h
@@ -1,6 +1,7 @@
 #ifndef _FSCK_H
 #define _FSCK_H
 
+#include <list.h>
 #include "libgfs2.h"
 #include "osi_tree.h"
 
@@ -69,8 +70,8 @@ struct duptree {
 	int dup_flags;
 	int refs;
 	uint64_t block;
-	osi_list_t ref_inode_list; /* list of inodes referencing a dup block */
-	osi_list_t ref_invinode_list; /* list of invalid inodes referencing */
+	struct list_head ref_inode_list; /* list of inodes referencing a dup block */
+	struct list_head ref_invinode_list; /* list of invalid inodes referencing */
 };
 
 enum dup_ref_type {
@@ -84,7 +85,7 @@ enum dup_ref_type {
 };
 
 struct inode_with_dups {
-	osi_list_t list;
+	struct list_head list;
 	uint64_t block_no;
 	int dup_count;
 	int reftypecount[ref_types];
diff --git a/gfs2/fsck/inode_hash.c b/gfs2/fsck/inode_hash.c
index 09303d73..6f57733e 100644
--- a/gfs2/fsck/inode_hash.c
+++ b/gfs2/fsck/inode_hash.c
@@ -7,7 +7,6 @@
 
 #include <logging.h>
 #include "libgfs2.h"
-#include "osi_list.h"
 #include "inode_hash.h"
 #include "fsck.h"
 #define _(String) gettext(String)
diff --git a/gfs2/fsck/main.c b/gfs2/fsck/main.c
index ecdcd0f6..3f06d61b 100644
--- a/gfs2/fsck/main.c
+++ b/gfs2/fsck/main.c
@@ -21,7 +21,6 @@
 #include "libgfs2.h"
 #include "fsck.h"
 #include "link.h"
-#include "osi_list.h"
 #include "metawalk.h"
 #include "util.h"
 
diff --git a/gfs2/fsck/metawalk.c b/gfs2/fsck/metawalk.c
index d256dd2f..3b8fefab 100644
--- a/gfs2/fsck/metawalk.c
+++ b/gfs2/fsck/metawalk.c
@@ -1585,7 +1585,7 @@ int check_metatree(struct gfs2_inode *ip, struct metawalk_fxns *pass)
 			free_metalist(ip, &metalist[0]);
 			return 0;
 		}
-		bh = osi_list_entry(tmp, struct gfs2_buffer_head, b_altlist);
+		bh = list_entry(tmp, struct gfs2_buffer_head, b_altlist);
 		head_size = hdr_size(bh, height);
 		if (!head_size)
 			continue;
@@ -1625,7 +1625,7 @@ undo_metalist:
 	for (i = 0; pass->undo_check_meta && i < height; i++) {
 		while (!osi_list_empty(&metalist[i])) {
 			list = &metalist[i];
-			bh = osi_list_entry(list->next,
+			bh = list_entry(list->next,
 					    struct gfs2_buffer_head,
 					    b_altlist);
 			log_err(_("Undoing metadata work for block %llu "
diff --git a/gfs2/fsck/pass1b.c b/gfs2/fsck/pass1b.c
index 574622bf..a6dbf887 100644
--- a/gfs2/fsck/pass1b.c
+++ b/gfs2/fsck/pass1b.c
@@ -9,10 +9,10 @@
 #define _(String) gettext(String)
 
 #include <logging.h>
+#include <list.h>
 #include "libgfs2.h"
 #include "link.h"
 #include "fsck.h"
-#include "osi_list.h"
 #include "util.h"
 #include "metawalk.h"
 #include "inode_hash.h"
@@ -45,12 +45,12 @@ static int clone_data(struct gfs2_inode *ip, uint64_t metablock,
 		      uint64_t block, void *private,
 		      struct gfs2_buffer_head *bh, uint64_t *ptr);
 
-static void log_inode_reference(struct duptree *dt, osi_list_t *tmp, int inval)
+static void log_inode_reference(struct duptree *dt, struct list_head *tmp, int inval)
 {
 	char reftypestring[32];
 	struct inode_with_dups *id;
 
-	id = osi_list_entry(tmp, struct inode_with_dups, list);
+	id = list_entry(tmp, struct inode_with_dups, list);
 	if (id->dup_count == 1)
 		sprintf(reftypestring, "as %s", reftypes[get_ref_type(id)]);
 	else
@@ -145,7 +145,7 @@ static void clone_data_block(struct gfs2_sbd *sdp, struct duptree *dt,
  */
 static void revise_dup_handler(uint64_t dup_blk, struct dup_handler *dh)
 {
-	osi_list_t *tmp;
+	struct list_head *tmp;
 	struct duptree *dt;
 	struct inode_with_dups *id;
 
@@ -159,13 +159,13 @@ static void revise_dup_handler(uint64_t dup_blk, struct dup_handler *dh)
 
 	dh->dt = dt;
 	/* Count the duplicate references, both valid and invalid */
-	osi_list_foreach(tmp, &dt->ref_invinode_list) {
-		id = osi_list_entry(tmp, struct inode_with_dups, list);
+	list_for_each(tmp, &dt->ref_invinode_list) {
+		id = list_entry(tmp, struct inode_with_dups, list);
 		dh->ref_inode_count++;
 		dh->ref_count += id->dup_count;
 	}
-	osi_list_foreach(tmp, &dt->ref_inode_list) {
-		id = osi_list_entry(tmp, struct inode_with_dups, list);
+	list_for_each(tmp, &dt->ref_inode_list) {
+		id = list_entry(tmp, struct inode_with_dups, list);
 		dh->ref_inode_count++;
 		dh->ref_count += id->dup_count;
 	}
@@ -185,13 +185,13 @@ static void revise_dup_handler(uint64_t dup_blk, struct dup_handler *dh)
  *                  _but_ this type.  Try to save references as this type.
  */
 static void resolve_dup_references(struct gfs2_sbd *sdp, struct duptree *dt,
-				   osi_list_t *ref_list,
+				   struct list_head *ref_list,
 				   struct dup_handler *dh,
 				   int inval, int acceptable_ref)
 {
 	struct gfs2_inode *ip;
 	struct inode_with_dups *id;
-	osi_list_t *tmp, *x;
+	struct list_head *tmp, *x;
 	struct metawalk_fxns pass1b_fxns_delete = {
 		.private = NULL,
 		.check_metalist = delete_metadata,
@@ -208,11 +208,11 @@ static void resolve_dup_references(struct gfs2_sbd *sdp, struct duptree *dt,
 	int found_good_ref = 0;
 	int q;
 
-	osi_list_foreach_safe(tmp, ref_list, x) {
+	list_for_each_safe(tmp, x, ref_list) {
 		if (skip_this_pass || fsck_abort)
 			return;
 
-		id = osi_list_entry(tmp, struct inode_with_dups, list);
+		id = list_entry(tmp, struct inode_with_dups, list);
 		dh->dt = dt;
 
 		if (dh->ref_inode_count == 1) /* down to the last reference */
@@ -553,7 +553,7 @@ static void resolve_last_reference(struct gfs2_sbd *sdp, struct duptree *dt,
 {
 	struct gfs2_inode *ip;
 	struct inode_with_dups *id;
-	osi_list_t *tmp;
+	struct list_head *tmp;
 	int q;
 
 	log_notice( _("Block %llu (0x%llx) has only one remaining "
@@ -566,7 +566,7 @@ static void resolve_last_reference(struct gfs2_sbd *sdp, struct duptree *dt,
 	   from invalid to data or metadata. Start at the first one
 	   in the list, not the structure's place holder. */
 	tmp = dt->ref_inode_list.next;
-	id = osi_list_entry(tmp, struct inode_with_dups, list);
+	id = list_entry(tmp, struct inode_with_dups, list);
 	log_debug( _("----------------------------------------------\n"
 		     "Step 4. Set block type based on the remaining "
 		     "reference in inode %lld (0x%llx).\n"),
@@ -648,7 +648,7 @@ static void resolve_last_reference(struct gfs2_sbd *sdp, struct duptree *dt,
  */
 static int handle_dup_blk(struct gfs2_sbd *sdp, struct duptree *dt)
 {
-	osi_list_t *tmp;
+	struct list_head *tmp;
 	struct dup_handler dh = {0};
 	struct gfs2_buffer_head *bh;
 	uint32_t cmagic, ctype;
@@ -665,9 +665,9 @@ static int handle_dup_blk(struct gfs2_sbd *sdp, struct duptree *dt)
 		    (unsigned long long)dt->block,
 		    dh.ref_inode_count, dh.ref_count);
 
-	osi_list_foreach(tmp, &dt->ref_invinode_list)
+	list_for_each(tmp, &dt->ref_invinode_list)
 		log_inode_reference(dt, tmp, 1);
-	osi_list_foreach(tmp, &dt->ref_inode_list)
+	list_for_each(tmp, &dt->ref_inode_list)
 		log_inode_reference(dt, tmp, 0);
 
 	/* Figure out the block type to see if we can eliminate references
diff --git a/gfs2/fsck/pass3.c b/gfs2/fsck/pass3.c
index 4b9c54d8..daac4ba7 100644
--- a/gfs2/fsck/pass3.c
+++ b/gfs2/fsck/pass3.c
@@ -10,7 +10,6 @@
 
 #include <logging.h>
 #include "libgfs2.h"
-#include "osi_list.h"
 #include "fsck.h"
 #include "lost_n_found.h"
 #include "link.h"
diff --git a/gfs2/fsck/rgrepair.c b/gfs2/fsck/rgrepair.c
index ac44efd2..76dd0eba 100644
--- a/gfs2/fsck/rgrepair.c
+++ b/gfs2/fsck/rgrepair.c
@@ -12,7 +12,6 @@
 
 #include <logging.h>
 #include "libgfs2.h"
-#include "osi_list.h"
 #include "fsck.h"
 #include "fs_recovery.h"
 
diff --git a/gfs2/fsck/util.c b/gfs2/fsck/util.c
index 1c3ed9c3..663217fa 100644
--- a/gfs2/fsck/util.c
+++ b/gfs2/fsck/util.c
@@ -13,6 +13,7 @@
 #define _(String) gettext(String)
 
 #include <logging.h>
+#include <list.h>
 #include "libgfs2.h"
 #include "metawalk.h"
 #include "util.h"
@@ -261,8 +262,8 @@ static struct duptree *gfs2_dup_set(uint64_t dblock, int create)
 	dt->block = dblock;
 	dt->refs = 1; /* reference 1 is actually the reference we need to
 			 discover in pass1b. */
-	osi_list_init(&dt->ref_inode_list);
-	osi_list_init(&dt->ref_invinode_list);
+	INIT_LIST_HEAD(&dt->ref_inode_list);
+	INIT_LIST_HEAD(&dt->ref_invinode_list);
 	osi_link_node(&dt->node, parent, newn);
 	osi_insert_color(&dt->node, &dup_blocks);
 
@@ -275,17 +276,17 @@ static struct duptree *gfs2_dup_set(uint64_t dblock, int create)
 struct inode_with_dups *find_dup_ref_inode(struct duptree *dt,
 					   struct gfs2_inode *ip)
 {
-	osi_list_t *ref;
+	struct list_head *ref;
 	struct inode_with_dups *id;
 
-	osi_list_foreach(ref, &dt->ref_invinode_list) {
-		id = osi_list_entry(ref, struct inode_with_dups, list);
+	list_for_each(ref, &dt->ref_invinode_list) {
+		id = list_entry(ref, struct inode_with_dups, list);
 
 		if (id->block_no == ip->i_di.di_num.no_addr)
 			return id;
 	}
-	osi_list_foreach(ref, &dt->ref_inode_list) {
-		id = osi_list_entry(ref, struct inode_with_dups, list);
+	list_for_each(ref, &dt->ref_inode_list) {
+		id = list_entry(ref, struct inode_with_dups, list);
 
 		if (id->block_no == ip->i_di.di_num.no_addr)
 			return id;
@@ -298,17 +299,17 @@ struct inode_with_dups *find_dup_ref_inode(struct duptree *dt,
  */
 int count_dup_meta_refs(struct duptree *dt)
 {
-	osi_list_t *ref;
+	struct list_head *ref;
 	struct inode_with_dups *id;
 	int metarefs = 0;
 
-	osi_list_foreach(ref, &dt->ref_invinode_list) {
-		id = osi_list_entry(ref, struct inode_with_dups, list);
+	list_for_each(ref, &dt->ref_invinode_list) {
+		id = list_entry(ref, struct inode_with_dups, list);
 		if (id->reftypecount[ref_as_meta])
 			metarefs++;
 	}
-	osi_list_foreach(ref, &dt->ref_inode_list) {
-		id = osi_list_entry(ref, struct inode_with_dups, list);
+	list_for_each(ref, &dt->ref_inode_list) {
+		id = list_entry(ref, struct inode_with_dups, list);
 		if (id->reftypecount[ref_as_meta])
 			metarefs++;
 	}
@@ -398,7 +399,7 @@ int add_duplicate_ref(struct gfs2_inode *ip, uint64_t block,
 		/* If it's an invalid dinode, put it first on the invalid
 		   inode reference list otherwise put it on the normal list. */
 		if (!inode_valid || q == GFS2_BLKST_UNLINKED)
-			osi_list_add_prev(&id->list, &dt->ref_invinode_list);
+			list_add_tail(&id->list, &dt->ref_invinode_list);
 		else {
 			/* If this is a system dinode, we want the duplicate
 			   processing to find it first. That way references
@@ -406,10 +407,9 @@ int add_duplicate_ref(struct gfs2_inode *ip, uint64_t block,
 			   We don't want to delete journals in favor of dinodes
 			   that reference a block inside a journal. */
 			if (fsck_system_inode(ip->i_sbd, id->block_no))
-				osi_list_add(&id->list, &dt->ref_inode_list);
+				list_add(&id->list, &dt->ref_inode_list);
 			else
-				osi_list_add_prev(&id->list,
-						  &dt->ref_inode_list);
+				list_add_tail(&id->list, &dt->ref_inode_list);
 		}
 	}
 	id->reftypecount[reftype]++;
@@ -518,23 +518,23 @@ void dup_listent_delete(struct duptree *dt, struct inode_with_dups *id)
 	dt->refs--; /* one less reference */
 	if (id->name)
 		free(id->name);
-	osi_list_del(&id->list);
+	list_del(&id->list);
 	free(id);
 }
 
 void dup_delete(struct duptree *dt)
 {
 	struct inode_with_dups *id;
-	osi_list_t *tmp;
+	struct list_head *tmp;
 
-	while (!osi_list_empty(&dt->ref_invinode_list)) {
+	while (!list_empty(&dt->ref_invinode_list)) {
 		tmp = (&dt->ref_invinode_list)->next;
-		id = osi_list_entry(tmp, struct inode_with_dups, list);
+		id = list_entry(tmp, struct inode_with_dups, list);
 		dup_listent_delete(dt, id);
 	}
-	while (!osi_list_empty(&dt->ref_inode_list)) {
+	while (!list_empty(&dt->ref_inode_list)) {
 		tmp = (&dt->ref_inode_list)->next;
-		id = osi_list_entry(tmp, struct inode_with_dups, list);
+		id = list_entry(tmp, struct inode_with_dups, list);
 		dup_listent_delete(dt, id);
 	}
 	osi_erase(&dt->node, &dup_blocks);
@@ -608,7 +608,7 @@ void delete_all_dups(struct gfs2_inode *ip)
 {
 	struct osi_node *n, *next;
 	struct duptree *dt;
-	osi_list_t *tmp, *x;
+	struct list_head *tmp, *x;
 	struct inode_with_dups *id;
 	int found;
 
@@ -619,15 +619,15 @@ void delete_all_dups(struct gfs2_inode *ip)
 		found = 0;
 		id = NULL;
 
-		osi_list_foreach_safe(tmp, &dt->ref_invinode_list, x) {
-			id = osi_list_entry(tmp, struct inode_with_dups, list);
+		list_for_each_safe(tmp, x, &dt->ref_invinode_list) {
+			id = list_entry(tmp, struct inode_with_dups, list);
 			if (id->block_no == ip->i_di.di_num.no_addr) {
 				dup_listent_delete(dt, id);
 				found = 1;
 			}
 		}
-		osi_list_foreach_safe(tmp, &dt->ref_inode_list, x) {
-			id = osi_list_entry(tmp, struct inode_with_dups, list);
+		list_for_each_safe(tmp, x, &dt->ref_inode_list) {
+			id = list_entry(tmp, struct inode_with_dups, list);
 			if (id->block_no == ip->i_di.di_num.no_addr) {
 				dup_listent_delete(dt, id);
 				found = 1;
@@ -648,14 +648,10 @@ void delete_all_dups(struct gfs2_inode *ip)
 				continue;
 
 			id = NULL;
-			osi_list_foreach(tmp, &dt->ref_invinode_list)
-				id = osi_list_entry(tmp,
-						    struct inode_with_dups,
-						    list);
-			osi_list_foreach(tmp, &dt->ref_inode_list)
-				id = osi_list_entry(tmp,
-						    struct inode_with_dups,
-						    list);
+			list_for_each(tmp, &dt->ref_invinode_list)
+				id = list_entry(tmp, struct inode_with_dups, list);
+			list_for_each(tmp, &dt->ref_inode_list)
+				id = list_entry(tmp, struct inode_with_dups, list);
 			if (id)
 				log_debug("Last reference is from inode "
 					  "0x%llx\n",
-- 
2.21.0




More information about the Cluster-devel mailing list