From d26a158e267af9feeddf9feaec2906a6d5b03265 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Fri, 25 Jun 2010 19:15:32 +1000 Subject: [PATCH] Add has_ref to help debugging. It is sometimes helpful to BUG_ON whether a block has a certain ref or not. So add "has_ref" which returns -1 if we don't know (debugging disabled) or 0/1 depending on whether ref is held. Signed-off-by: NeilBrown --- block.c | 12 ++++++++++++ lafs.h | 3 +++ 2 files changed, 15 insertions(+) diff --git a/block.c b/block.c index d0c9687..19509cd 100644 --- a/block.c +++ b/block.c @@ -66,6 +66,18 @@ void del_ref(struct block *b, char *ref, char *file, int line) ref, file, line, strblk(b)); BUG(); } + +int has_ref(struct block *b, char *ref) +{ + int i; + spin_lock(&refl); + for (i = 0; i < 16; i++) + if (b->holders[i].cnt && + strcmp(b->holders[i].name, ref) == 0) + break; + spin_unlock(&refl); + return i < 16; +} #endif /* Based on grow_dev_page */ diff --git a/lafs.h b/lafs.h index 27de449..1408c97 100644 --- a/lafs.h +++ b/lafs.h @@ -34,6 +34,7 @@ extern void lafs_dump_tree(void); #define add_ref(a,b,c,d) lafs_add_ref(a,b,c,d) #define del_ref(a,b,c,d) lafs_del_ref(a,b,c,d) +#define has_ref(a,b) lafs_has_ref(a,b) #define lafs_get_block(a,b,c,d,e) _lafs_get_block(a,b,c,d,e) #define first_in_seg(a,b,c,d,e) _first_in_seg(a,b,c,d,e) @@ -52,6 +53,7 @@ extern void lafs_dump_tree(void); #define add_ref(a,b,c,d) do {} while (0) #define del_ref(a,b,c,d) do {} while (0) +#define has_ref(a,b) (-1) #define lafs_get_block(a,b,c,d,e) _lafs_get_block(a,b,c,d) #define first_in_seg(a,b,c,d,e) _first_in_seg(a,b,c,d) @@ -153,6 +155,7 @@ struct datablock *lafs_get_block(struct inode *ino, unsigned long index, #if DEBUG_REF void add_ref(struct block *b, char *ref, char *file, int line); void del_ref(struct block *b, char *ref, char *file, int line); +int has_ref(struct block *b, char *ref); #endif int lafs_setattr(struct dentry *dentry, struct iattr *attr); -- 2.39.5