lkml.org 
[lkml]   [2004]   [Apr]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
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 */
\
 
 \ /
  Last update: 2005-03-22 14:02    [W:0.049 / U:0.176 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site