[PATCH] ocfs2: Remove expensive bitmap scanning
authorJan Kara <jack@suse.cz>
Tue, 13 Nov 2007 18:59:33 +0000 (19:59 +0100)
committerMark Fasheh <mark.fasheh@oracle.com>
Wed, 28 Nov 2007 00:47:02 +0000 (16:47 -0800)
Enable expensive bitmap scanning only if DEBUG option is enabled.
The bitmap scanning quite loads the CPU and on my machine the write
throughput of dd if=/dev/zero of=/ocfs2/file bs=1M count=500 conv=sync
improves from 37 MB/s to 45.4 MB/s in local mode...

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
fs/Kconfig
fs/ocfs2/localalloc.c

index 429a002285075c7556b30f1364a3d091a3052c57..635f3e286ad83a01a062d5bad763d6be54101b93 100644 (file)
@@ -459,6 +459,15 @@ config OCFS2_DEBUG_MASKLOG
          This option will enlarge your kernel, but it allows debugging of
          ocfs2 filesystem issues.
 
+config OCFS2_DEBUG_FS
+       bool "OCFS2 expensive checks"
+       depends on OCFS2_FS
+       default n
+       help
+         This option will enable expensive consistency checks. Enable
+         this option for debugging only as it is likely to decrease
+         performance of the filesystem.
+
 config MINIX_FS
        tristate "Minix fs support"
        help
index d272847d5a070491d22cda6b1f0b482423b33a39..58ea88b5af36c44a25e1159f1f13e098a1dd54c4 100644 (file)
@@ -484,6 +484,7 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
 
        alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
 
+#ifdef OCFS2_DEBUG_FS
        if (le32_to_cpu(alloc->id1.bitmap1.i_used) !=
            ocfs2_local_alloc_count_bits(alloc)) {
                ocfs2_error(osb->sb, "local alloc inode %llu says it has "
@@ -494,6 +495,7 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
                status = -EIO;
                goto bail;
        }
+#endif
 
        free_bits = le32_to_cpu(alloc->id1.bitmap1.i_total) -
                le32_to_cpu(alloc->id1.bitmap1.i_used);
@@ -712,9 +714,8 @@ static int ocfs2_sync_local_to_main(struct ocfs2_super *osb,
        void *bitmap;
        struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc);
 
-       mlog_entry("total = %u, COUNT = %u, used = %u\n",
+       mlog_entry("total = %u, used = %u\n",
                   le32_to_cpu(alloc->id1.bitmap1.i_total),
-                  ocfs2_local_alloc_count_bits(alloc),
                   le32_to_cpu(alloc->id1.bitmap1.i_used));
 
        if (!alloc->id1.bitmap1.i_total) {