2010-12-27 21:55:03

by Josh Hunt

[permalink] [raw]
Subject: [PATCH] Resolve 'dereferencing pointer to incomplete type' when enabling EXT2_XATTR_DEBUG

When I enable EXT2_XATTR_DEBUG in fs/ext2/xattr.c I get a build error stating
the following:

CC fs/ext2/xattr.o
fs/ext2/xattr.c: In function 'ext2_xattr_cache_insert':
fs/ext2/xattr.c:841: error: dereferencing pointer to incomplete type
fs/ext2/xattr.c:846: error: dereferencing pointer to incomplete type
make[2]: *** [fs/ext2/xattr.o] Error 1
make[1]: *** [fs/ext2] Error 2
make: *** [fs] Error 2

These lines reference ext2_xattr_cache->c_entry_count which is defined
in struct mb_cache. struct mb_cache is currently only defined in fs/mbcache.c.
Moving struct mb_cache definition to include/linux/mbcache.h to resolve the
issue.

Signed-off-by: Josh Hunt <[email protected]>
---
fs/mbcache.c | 12 ------------
include/linux/mbcache.h | 11 +++++++++++
2 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/fs/mbcache.c b/fs/mbcache.c
index 9344474..a25444a 100644
--- a/fs/mbcache.c
+++ b/fs/mbcache.c
@@ -76,18 +76,6 @@ EXPORT_SYMBOL(mb_cache_entry_find_first);
EXPORT_SYMBOL(mb_cache_entry_find_next);
#endif

-struct mb_cache {
- struct list_head c_cache_list;
- const char *c_name;
- atomic_t c_entry_count;
- int c_max_entries;
- int c_bucket_bits;
- struct kmem_cache *c_entry_cache;
- struct list_head *c_block_hash;
- struct list_head *c_index_hash;
-};
-
-
/*
* Global data: list of all mbcache's, lru list, and a spinlock for
* accessing cache data structures on SMP machines. The lru list is
diff --git a/include/linux/mbcache.h b/include/linux/mbcache.h
index 54cbbac..5525d37 100644
--- a/include/linux/mbcache.h
+++ b/include/linux/mbcache.h
@@ -18,6 +18,17 @@ struct mb_cache_entry {
} e_index;
};

+struct mb_cache {
+ struct list_head c_cache_list;
+ const char *c_name;
+ atomic_t c_entry_count;
+ int c_max_entries;
+ int c_bucket_bits;
+ struct kmem_cache *c_entry_cache;
+ struct list_head *c_block_hash;
+ struct list_head *c_index_hash;
+};
+
/* Functions on caches */

struct mb_cache *mb_cache_create(const char *, int);
--
1.7.0.4



2011-01-06 15:43:17

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH] Resolve 'dereferencing pointer to incomplete type' when enabling EXT2_XATTR_DEBUG

On Mon 27-12-10 13:46:38, Josh Hunt wrote:
> When I enable EXT2_XATTR_DEBUG in fs/ext2/xattr.c I get a build error stating
> the following:
>
> CC fs/ext2/xattr.o
> fs/ext2/xattr.c: In function 'ext2_xattr_cache_insert':
> fs/ext2/xattr.c:841: error: dereferencing pointer to incomplete type
> fs/ext2/xattr.c:846: error: dereferencing pointer to incomplete type
> make[2]: *** [fs/ext2/xattr.o] Error 1
> make[1]: *** [fs/ext2] Error 2
> make: *** [fs] Error 2
>
> These lines reference ext2_xattr_cache->c_entry_count which is defined
> in struct mb_cache. struct mb_cache is currently only defined in fs/mbcache.c.
> Moving struct mb_cache definition to include/linux/mbcache.h to resolve the
> issue.
Thanks. I've applied the patch.

Honza

>
> Signed-off-by: Josh Hunt <[email protected]>
> ---
> fs/mbcache.c | 12 ------------
> include/linux/mbcache.h | 11 +++++++++++
> 2 files changed, 11 insertions(+), 12 deletions(-)
>
> diff --git a/fs/mbcache.c b/fs/mbcache.c
> index 9344474..a25444a 100644
> --- a/fs/mbcache.c
> +++ b/fs/mbcache.c
> @@ -76,18 +76,6 @@ EXPORT_SYMBOL(mb_cache_entry_find_first);
> EXPORT_SYMBOL(mb_cache_entry_find_next);
> #endif
>
> -struct mb_cache {
> - struct list_head c_cache_list;
> - const char *c_name;
> - atomic_t c_entry_count;
> - int c_max_entries;
> - int c_bucket_bits;
> - struct kmem_cache *c_entry_cache;
> - struct list_head *c_block_hash;
> - struct list_head *c_index_hash;
> -};
> -
> -
> /*
> * Global data: list of all mbcache's, lru list, and a spinlock for
> * accessing cache data structures on SMP machines. The lru list is
> diff --git a/include/linux/mbcache.h b/include/linux/mbcache.h
> index 54cbbac..5525d37 100644
> --- a/include/linux/mbcache.h
> +++ b/include/linux/mbcache.h
> @@ -18,6 +18,17 @@ struct mb_cache_entry {
> } e_index;
> };
>
> +struct mb_cache {
> + struct list_head c_cache_list;
> + const char *c_name;
> + atomic_t c_entry_count;
> + int c_max_entries;
> + int c_bucket_bits;
> + struct kmem_cache *c_entry_cache;
> + struct list_head *c_block_hash;
> + struct list_head *c_index_hash;
> +};
> +
> /* Functions on caches */
>
> struct mb_cache *mb_cache_create(const char *, int);
> --
> 1.7.0.4
>
--
Jan Kara <[email protected]>
SUSE Labs, CR