# distributions, update the BUILD_GEN variable in build/lbuild)
#BUILD_GEN+=".0"
#BUILD_GEN+=".1" # added --with firmware to rpmbuild for rhel6
-BUILD_GEN+=".0" # TT-107: don't cache the BUILD dir (reset major to 5)
+#BUILD_GEN+=".0" # TT-107: don't cache the BUILD dir (reset major to 5)
+BUILD_GEN+=".1" # LU-50: kernel: configurable BH LRU size
source ${0%/*}/lbuild-rhel
echo "# $Arch" > configs/kernel-%{version}-$Arch.config\
cat %{_topdir}/lustre/lustre/kernel_patches/kernel_configs/kernel-%{version}-2.6-rhel6-$Arch.config >> configs/kernel-%{version}-$Arch.config\
fi'\
+ -e '/^# Dynamically generate kernel/a echo "CONFIG_BH_LRU_SIZE=16" >> config-generic'\
SPECS/$SPEC_NAME 2>&1 || \
fatal 1 "Error while editing SPECS/$SPEC_NAME"
--- /dev/null
+--- linux-2.6.32-131.6.1/fs/buffer.c
++++ linux-2.6.32-131.6.1-pdo/fs/buffer.c
+@@ -1250,8 +1250,7 @@
+ * The LRUs themselves only need locking against invalidate_bh_lrus. We use
+ * a local interrupt disable for that.
+ */
+-
+-#define BH_LRU_SIZE 8
++#define BH_LRU_SIZE CONFIG_BH_LRU_SIZE
+
+ struct bh_lru {
+ struct buffer_head *bhs[BH_LRU_SIZE];
+--- linux-2.6.32-131.6.1/fs/Kconfig
++++ linux-2.6.32-131.6.1-pdo/fs/Kconfig
+@@ -253,4 +253,13 @@
+ source "fs/nls/Kconfig"
+ source "fs/dlm/Kconfig"
+
++config BH_LRU_SIZE
++ int "buffer head per-CPU LRU size"
++ range 8 64
++ default "8"
++ help
++ This sets the per-CPU LRU size for buffer heads in memory.
++ More complex filesystems may be modiyfing multiple blocks
++ within a single transaction, so keeping the buffer heads in
++ CPU-local cache speeds up modifations significantly.
+ endmenu