This is an automated email from the git hooks/post-receive script.
andyp pushed a commit to branch andyp-fsck_cx in repository gfs2-utils.
commit 24a3ebaf1855c408393a80acf93bfb6737361036 Author: Andrew Price anprice@redhat.com AuthorDate: Fri Jul 29 19:55:35 2022 +0100
fsck.gfs2: Move the global inodetree into fsck_cx
Signed-off-by: Andrew Price anprice@redhat.com --- gfs2/fsck/fsck.h | 2 +- gfs2/fsck/initialize.c | 8 ++++---- gfs2/fsck/inode_hash.c | 14 +++++++------- gfs2/fsck/inode_hash.h | 8 +++++--- gfs2/fsck/link.c | 10 +++++----- gfs2/fsck/main.c | 1 - gfs2/fsck/metawalk.c | 6 +++--- gfs2/fsck/pass1b.c | 4 ++-- gfs2/fsck/pass2.c | 4 ++-- gfs2/fsck/pass4.c | 2 +- 10 files changed, 30 insertions(+), 29 deletions(-)
diff --git a/gfs2/fsck/fsck.h b/gfs2/fsck/fsck.h index 2ae182d5..38b73529 100644 --- a/gfs2/fsck/fsck.h +++ b/gfs2/fsck/fsck.h @@ -112,6 +112,7 @@ struct fsck_cx { struct lgfs2_sbd *sdp; struct osi_root dup_blocks; struct osi_root dirtree; + struct osi_root inodetree; };
extern struct lgfs2_inode *fsck_load_inode(struct lgfs2_sbd *sdp, uint64_t block); @@ -156,7 +157,6 @@ extern int skip_this_pass, fsck_abort; extern int errors_found, errors_corrected; extern uint64_t last_data_block; extern uint64_t first_data_block; -extern struct osi_root inodetree; extern int dups_found; /* How many duplicate references have we found? */ extern int dups_found_first; /* How many duplicates have we found the original reference for? */ diff --git a/gfs2/fsck/initialize.c b/gfs2/fsck/initialize.c index f671abba..efceb271 100644 --- a/gfs2/fsck/initialize.c +++ b/gfs2/fsck/initialize.c @@ -89,14 +89,14 @@ static void dirtree_free(struct fsck_cx *cx) } }
-static void inodetree_free(void) +static void inodetree_free(struct fsck_cx *cx) { struct osi_node *n; struct inode_info *dt;
- while ((n = osi_first(&inodetree))) { + while ((n = osi_first(&cx->inodetree))) { dt = (struct inode_info *)n; - inodetree_delete(dt); + inodetree_delete(cx, dt); } }
@@ -114,7 +114,7 @@ static void empty_super_block(struct fsck_cx *cx) log_info( _("Freeing buffers.\n")); lgfs2_rgrp_free(cx->sdp, &cx->sdp->rgtree);
- inodetree_free(); + inodetree_free(cx); dirtree_free(cx); dup_free(cx); } diff --git a/gfs2/fsck/inode_hash.c b/gfs2/fsck/inode_hash.c index a1e67b23..f32b7c73 100644 --- a/gfs2/fsck/inode_hash.c +++ b/gfs2/fsck/inode_hash.c @@ -12,9 +12,9 @@ #include "fsck.h" #define _(String) gettext(String)
-struct inode_info *inodetree_find(uint64_t block) +struct inode_info *inodetree_find(struct fsck_cx *cx, uint64_t block) { - struct osi_node *node = inodetree.osi_node; + struct osi_node *node = cx->inodetree.osi_node;
while (node) { struct inode_info *data = (struct inode_info *)node; @@ -29,9 +29,9 @@ struct inode_info *inodetree_find(uint64_t block) return NULL; }
-struct inode_info *inodetree_insert(struct lgfs2_inum no) +struct inode_info *inodetree_insert(struct fsck_cx *cx, struct lgfs2_inum no) { - struct osi_node **newn = &inodetree.osi_node, *parent = NULL; + struct osi_node **newn = &cx->inodetree.osi_node, *parent = NULL; struct inode_info *data;
/* Figure out where to put new node */ @@ -55,13 +55,13 @@ struct inode_info *inodetree_insert(struct lgfs2_inum no) /* Add new node and rebalance tree. */ data->num = no; osi_link_node(&data->node, parent, newn); - osi_insert_color(&data->node, &inodetree); + osi_insert_color(&data->node, &cx->inodetree);
return data; }
-void inodetree_delete(struct inode_info *b) +void inodetree_delete(struct fsck_cx *cx, struct inode_info *b) { - osi_erase(&b->node, &inodetree); + osi_erase(&b->node, &cx->inodetree); free(b); } diff --git a/gfs2/fsck/inode_hash.h b/gfs2/fsck/inode_hash.h index da9d15ce..5f6b499f 100644 --- a/gfs2/fsck/inode_hash.h +++ b/gfs2/fsck/inode_hash.h @@ -1,10 +1,12 @@ #ifndef _INODE_HASH_H #define _INODE_HASH_H
+#include "fsck.h" + struct inode_info;
-extern struct inode_info *inodetree_find(uint64_t block); -extern struct inode_info *inodetree_insert(struct lgfs2_inum no); -extern void inodetree_delete(struct inode_info *b); +extern struct inode_info *inodetree_find(struct fsck_cx *cx, uint64_t block); +extern struct inode_info *inodetree_insert(struct fsck_cx *cx, struct lgfs2_inum no); +extern void inodetree_delete(struct fsck_cx *cx, struct inode_info *b);
#endif /* _INODE_HASH_H */ diff --git a/gfs2/fsck/link.c b/gfs2/fsck/link.c index 690d58ef..426552b6 100644 --- a/gfs2/fsck/link.c +++ b/gfs2/fsck/link.c @@ -58,10 +58,10 @@ int set_di_nlink(struct fsck_cx *cx, struct lgfs2_inode *ip) /*log_debug( _("Setting link count to %u for %" PRIu64 " (0x%" PRIx64 ")\n"), count, inode_no, inode_no);*/ /* If the list has entries, look for one that matches inode_no */ - ii = inodetree_find(ip->i_num.in_addr); + ii = inodetree_find(cx, ip->i_num.in_addr); if (!ii) { struct lgfs2_inum no = ip->i_num; - ii = inodetree_insert(no); + ii = inodetree_insert(cx, no); } if (ii) ii->di_nlink = ip->i_nlink; @@ -93,7 +93,7 @@ int incr_link_count(struct fsck_cx *cx, struct lgfs2_inum no, struct lgfs2_inode whyincr(no.in_addr, why, referenced_from, di->counted_links); return INCR_LINK_GOOD; } - ii = inodetree_find(no.in_addr); + ii = inodetree_find(cx, no.in_addr); /* If the list has entries, look for one that matches inode_no */ if (ii) { if (ii->num.in_formal_ino != no.in_formal_ino) @@ -122,7 +122,7 @@ int incr_link_count(struct fsck_cx *cx, struct lgfs2_inum no, struct lgfs2_inode /* If no match was found, it must be a hard link. In theory, it can't be a duplicate because those were resolved in pass1b. Add a new inodetree entry and set its counted links to 2 */ - ii = inodetree_insert(no); + ii = inodetree_insert(cx, no); if (!ii) { log_debug(_("Ref: 0x%"PRIx64" Error incrementing link for 0x%"PRIx64"\n"), referenced_from, no.in_addr); @@ -166,7 +166,7 @@ int decr_link_count(struct fsck_cx *cx, uint64_t inode_no, uint64_t referenced_f return 0; }
- ii = inodetree_find(inode_no); + ii = inodetree_find(cx, inode_no); /* If the list has entries, look for one that matches * inode_no */ if (ii) { diff --git a/gfs2/fsck/main.c b/gfs2/fsck/main.c index 34111103..d980f864 100644 --- a/gfs2/fsck/main.c +++ b/gfs2/fsck/main.c @@ -34,7 +34,6 @@ int skip_this_pass = 0, fsck_abort = 0; int errors_found = 0, errors_corrected = 0; uint64_t last_data_block; uint64_t first_data_block; -struct osi_root inodetree; int dups_found = 0, dups_found_first = 0; int sb_fixed = 0; int print_level = MSG_NOTICE; diff --git a/gfs2/fsck/metawalk.c b/gfs2/fsck/metawalk.c index 25557673..498a2abe 100644 --- a/gfs2/fsck/metawalk.c +++ b/gfs2/fsck/metawalk.c @@ -97,9 +97,9 @@ int check_n_fix_bitmap(struct fsck_cx *cx, struct lgfs2_rgrp_tree *rgd, dirtree_delete(cx, dt); treat_as_inode = 1; } - ii = inodetree_find(blk); + ii = inodetree_find(cx, blk); if (ii) { - inodetree_delete(ii); + inodetree_delete(cx, ii); treat_as_inode = 1; } else if (!sdp->gfs1) { treat_as_inode = 1; @@ -134,7 +134,7 @@ int check_n_fix_bitmap(struct fsck_cx *cx, struct lgfs2_rgrp_tree *rgd, if (dt) treat_as_inode = 1; else { - ii = inodetree_find(blk); + ii = inodetree_find(cx, blk); if (ii) treat_as_inode = 1; } diff --git a/gfs2/fsck/pass1b.c b/gfs2/fsck/pass1b.c index 480b2a13..b3fe1b4f 100644 --- a/gfs2/fsck/pass1b.c +++ b/gfs2/fsck/pass1b.c @@ -332,9 +332,9 @@ static void resolve_dup_references(struct fsck_cx *cx, struct duptree *dt, _("duplicate referencing bad"), GFS2_BLKST_FREE); /* Remove the inode from the inode tree */ - ii = inodetree_find(ip->i_num.in_addr); + ii = inodetree_find(cx, ip->i_num.in_addr); if (ii) - inodetree_delete(ii); + inodetree_delete(cx, ii); di = dirtree_find(cx, ip->i_num.in_addr); if (di) dirtree_delete(cx, di); diff --git a/gfs2/fsck/pass2.c b/gfs2/fsck/pass2.c index 8e07b225..9d5f2489 100644 --- a/gfs2/fsck/pass2.c +++ b/gfs2/fsck/pass2.c @@ -173,7 +173,7 @@ static int bad_formal_ino(struct fsck_cx *cx, struct lgfs2_inode *ip, struct gfs int error; struct lgfs2_inum inum = {0};
- ii = inodetree_find(entry.in_addr); + ii = inodetree_find(cx, entry.in_addr); if (ii) inum = ii->num; else { @@ -569,7 +569,7 @@ static int basic_dentry_checks(struct fsck_cx *cx, struct lgfs2_inode *ip, struc } /* We need to verify the formal inode number matches. If it doesn't, it needs to be deleted. */ - ii = inodetree_find(entry->in_addr); + ii = inodetree_find(cx, entry->in_addr); if (ii) inum = ii->num; else { diff --git a/gfs2/fsck/pass4.c b/gfs2/fsck/pass4.c index c81f0114..12afabbd 100644 --- a/gfs2/fsck/pass4.c +++ b/gfs2/fsck/pass4.c @@ -170,7 +170,7 @@ static int scan_inode_list(struct fsck_cx *cx)
/* FIXME: should probably factor this out into a generic * scanning fxn */ - for (tmp = osi_first(&inodetree); tmp; tmp = next) { + for (tmp = osi_first(&cx->inodetree); tmp; tmp = next) { if (skip_this_pass || fsck_abort) /* if asked to skip the rest */ return 0; next = osi_next(tmp);