Whamcloud - gitweb
tst_libext2fs: Avoid multiple definition of global variables
[tools/e2fsprogs.git] / lib / ext2fs / kernel-jbd.h
index c1fec3f..a7507b5 100644 (file)
@@ -46,7 +46,7 @@ extern int journal_enable_debug;
        } while (0)
 #else
 #ifdef __GNUC__
-#ifdef __KERNEL__
+#if defined(__KERNEL__) || !defined(CONFIG_JBD_DEBUG)
 #define jbd_debug(f, a...)     /**/
 #else
 extern int journal_enable_debug;
@@ -274,7 +274,12 @@ typedef struct journal_superblock_s
                                         JFS_FEATURE_INCOMPAT_CSUM_V2|\
                                         JFS_FEATURE_INCOMPAT_CSUM_V3)
 
-
+#ifdef NO_INLINE_FUNCS
+extern size_t journal_tag_bytes(journal_t *journal);
+extern int journal_has_csum_v2or3(journal_t *journal);
+extern int tid_gt(tid_t x, tid_t y) EXT2FS_ATTR((unused));
+extern int tid_geq(tid_t x, tid_t y) EXT2FS_ATTR((unused));
+#endif
 
 #if (defined(E2FSCK_INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS))
 #ifdef E2FSCK_INCLUDE_INLINE_FUNCS
@@ -297,17 +302,20 @@ typedef struct journal_superblock_s
 
 /* journal feature predicate functions */
 #define JFS_FEATURE_COMPAT_FUNCS(name, flagname) \
+_INLINE_ int jfs_has_feature_##name(journal_t *j); \
 _INLINE_ int jfs_has_feature_##name(journal_t *j) \
 { \
        return ((j)->j_format_version >= 2 && \
                ((j)->j_superblock->s_feature_compat & \
                 ext2fs_cpu_to_be32(JFS_FEATURE_COMPAT_##flagname)) != 0); \
 } \
+_INLINE_ void jfs_set_feature_##name(journal_t *j); \
 _INLINE_ void jfs_set_feature_##name(journal_t *j) \
 { \
        (j)->j_superblock->s_feature_compat |= \
                ext2fs_cpu_to_be32(JFS_FEATURE_COMPAT_##flagname); \
 } \
+_INLINE_ void jfs_clear_feature_##name(journal_t *j); \
 _INLINE_ void jfs_clear_feature_##name(journal_t *j) \
 { \
        (j)->j_superblock->s_feature_compat &= \
@@ -315,17 +323,20 @@ _INLINE_ void jfs_clear_feature_##name(journal_t *j) \
 }
 
 #define JFS_FEATURE_RO_COMPAT_FUNCS(name, flagname) \
- _INLINE_ int jfs_has_feature_##name(journal_t *j) \
+_INLINE_ int jfs_has_feature_##name(journal_t *j);     \
+_INLINE_ int jfs_has_feature_##name(journal_t *j) \
 { \
        return ((j)->j_format_version >= 2 && \
                ((j)->j_superblock->s_feature_ro_compat & \
                 ext2fs_cpu_to_be32(JFS_FEATURE_RO_COMPAT_##flagname)) != 0); \
 } \
+_INLINE_ void jfs_set_feature_##name(journal_t *j); \
 _INLINE_ void jfs_set_feature_##name(journal_t *j) \
 { \
        (j)->j_superblock->s_feature_ro_compat |= \
                ext2fs_cpu_to_be32(JFS_FEATURE_RO_COMPAT_##flagname); \
 } \
+_INLINE_ void jfs_clear_feature_##name(journal_t *j); \
 _INLINE_ void jfs_clear_feature_##name(journal_t *j) \
 { \
        (j)->j_superblock->s_feature_ro_compat &= \
@@ -333,23 +344,44 @@ _INLINE_ void jfs_clear_feature_##name(journal_t *j) \
 }
 
 #define JFS_FEATURE_INCOMPAT_FUNCS(name, flagname) \
+_INLINE_ int jfs_has_feature_##name(journal_t *j); \
 _INLINE_ int jfs_has_feature_##name(journal_t *j) \
 { \
        return ((j)->j_format_version >= 2 && \
                ((j)->j_superblock->s_feature_incompat & \
                 ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_##flagname)) != 0); \
 } \
+_INLINE_ void jfs_set_feature_##name(journal_t *j); \
 _INLINE_ void jfs_set_feature_##name(journal_t *j) \
 { \
        (j)->j_superblock->s_feature_incompat |= \
                ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_##flagname); \
 } \
+_INLINE_ void jfs_clear_feature_##name(journal_t *j); \
 _INLINE_ void jfs_clear_feature_##name(journal_t *j) \
 { \
        (j)->j_superblock->s_feature_incompat &= \
                ~ext2fs_cpu_to_be32(JFS_FEATURE_INCOMPAT_##flagname); \
 }
 
+#else
+#define JFS_FEATURE_COMPAT_FUNCS(name, flagname) \
+extern int jfs_has_feature_##name(journal_t *j); \
+extern void jfs_set_feature_##name(journal_t *j); \
+extern void jfs_clear_feature_##name(journal_t *j);
+
+#define JFS_FEATURE_RO_COMPAT_FUNCS(name, flagname) \
+extern int jfs_has_feature_##name(journal_t *j); \
+extern void jfs_set_feature_##name(journal_t *j); \
+extern void jfs_clear_feature_##name(journal_t *j);
+
+#define JFS_FEATURE_INCOMPAT_FUNCS(name, flagname) \
+extern int jfs_has_feature_##name(journal_t *j); \
+extern void jfs_set_feature_##name(journal_t *j); \
+extern void jfs_clear_feature_##name(journal_t *j);
+
+#endif /* (defined(E2FSCK_INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS)) */
+
 JFS_FEATURE_COMPAT_FUNCS(checksum,             CHECKSUM)
 
 JFS_FEATURE_INCOMPAT_FUNCS(revoke,             REVOKE)
@@ -358,6 +390,7 @@ JFS_FEATURE_INCOMPAT_FUNCS(async_commit,    ASYNC_COMMIT)
 JFS_FEATURE_INCOMPAT_FUNCS(csum2,              CSUM_V2)
 JFS_FEATURE_INCOMPAT_FUNCS(csum3,              CSUM_V3)
 
+#if (defined(E2FSCK_INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS))
 /*
  * helper functions to deal with 32 or 64bit block numbers.
  */
@@ -387,9 +420,6 @@ _INLINE_ int journal_has_csum_v2or3(journal_t *journal)
        return 0;
 }
 
-_INLINE_ int tid_gt(tid_t x, tid_t y) EXT2FS_ATTR((unused));
-_INLINE_ int tid_geq(tid_t x, tid_t y) EXT2FS_ATTR((unused));
-
 /* Comparison functions for transaction IDs: perform comparisons using
  * modulo arithmetic so that they work over sequence number wraps. */
 
@@ -404,9 +434,9 @@ _INLINE_ int tid_geq(tid_t x, tid_t y)
        int difference = (x - y);
        return (difference >= 0);
 }
+#endif /* (defined(E2FSCK_INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS)) */
 
 #undef _INLINE_
-#endif
 
 extern int journal_blocks_per_page(struct inode *inode);