From: Brian Foster Date: Mon, 26 May 2014 23:07:06 +0000 (+1000) Subject: repair: helpers for finding in-core inode records w/ free inodes X-Git-Tag: v3.2.1~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=01159bd2fab0e9e6bc3c35a04ff20000a07fe43e;p=thirdparty%2Fxfsprogs-dev.git repair: helpers for finding in-core inode records w/ free inodes Add the findfirst_free_inode_rec() and next_free_ino_rec() helpers to assist scanning the in-core inode records for records with at least one free inode. These will be used to determine what records are included in the free inode btree. Signed-off-by: Brian Foster Reviewed-by: Dave Chinner Signed-off-by: Dave Chinner --- diff --git a/repair/incore.h b/repair/incore.h index 541988453..5f8c188ae 100644 --- a/repair/incore.h +++ b/repair/incore.h @@ -380,6 +380,33 @@ void clear_uncertain_ino_cache(xfs_agnumber_t agno); #define next_link_rec(ino_node_ptr) \ ((ino_tree_node_t *) ((ino_node_ptr)->avl_node.avl_forw)) +/* + * finobt helpers + */ +static inline ino_tree_node_t * +findfirst_free_inode_rec(xfs_agnumber_t agno) +{ + ino_tree_node_t *ino_rec; + + ino_rec = findfirst_inode_rec(agno); + + while (ino_rec && !ino_rec->ir_free) + ino_rec = next_ino_rec(ino_rec); + + return ino_rec; +} + +static inline ino_tree_node_t * +next_free_ino_rec(ino_tree_node_t *ino_rec) +{ + ino_rec = next_ino_rec(ino_rec); + + while (ino_rec && !ino_rec->ir_free) + ino_rec = next_ino_rec(ino_rec); + + return ino_rec; +} + /* * Has an inode been processed for phase 6 (reference count checking)? *