[PATCH] conditionalize some boring buffer_head checks

Jeff Garzik
2004-04-14T07:43:29Z

[-- Attachment #1: Type: text/plain, Size: 463 bytes --]

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.

[-- Attachment #2: patch --]
[-- Type: text/plain, Size: 849 bytes --]

===== 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 */