Messages in this thread Patch in this message | | | Date | Wed, 14 Apr 2004 03:43:13 -0400 | From | Jeff Garzik <> | Subject | [PATCH] conditionalize some boring buffer_head checks |
| |
These checks are executed billions of times per day, with no stack dump bug reports sent to lkml. Arguably, they will only trigger on buggy filesystems (programmer error), and thus IMO shouldn't even be executed in a non-debug kernel.
Even though BUG_ON() includes unlikely(), I think this patch -- or something like it -- is preferable. The buffer_error() checks aren't even marked unlikely().
This is a micro-optimization on a key kernel fast path.
===== fs/buffer.c 1.237 vs edited ===== --- 1.237/fs/buffer.c Wed Apr 14 03:18:09 2004 +++ edited/fs/buffer.c Wed Apr 14 03:39:15 2004 @@ -2688,6 +2688,7 @@ { struct bio *bio; +#ifdef BH_DEBUG BUG_ON(!buffer_locked(bh)); BUG_ON(!buffer_mapped(bh)); BUG_ON(!bh->b_end_io); @@ -2698,6 +2699,7 @@ buffer_error(); if (rw == READ && buffer_dirty(bh)) buffer_error(); +#endif /* Only clear out a write error when rewriting */ if (test_set_buffer_req(bh) && rw == WRITE) ===== include/linux/buffer_head.h 1.47 vs edited ===== --- 1.47/include/linux/buffer_head.h Wed Apr 14 03:18:09 2004 +++ edited/include/linux/buffer_head.h Wed Apr 14 03:39:31 2004 @@ -13,6 +13,8 @@ #include <linux/wait.h> #include <asm/atomic.h> +#undef BH_DEBUG + enum bh_state_bits { BH_Uptodate, /* Contains valid data */ BH_Dirty, /* Is dirty */
| |