[RFC:PATCH 01/07] Add tail to address space

Dave Kleikamp
2007-08-29T20:53:31Z

Add tail to address space

Signed-off-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>

---

fs/inode.c | 3 +++
include/linux/fs.h | 4 ++++
mm/Kconfig | 9 +++++++++
3 files changed, 16 insertions(+)

diff -Nurp linux000/fs/inode.c linux001/fs/inode.c
--- linux000/fs/inode.c 2007-08-28 09:57:14.000000000 -0500
+++ linux001/fs/inode.c 2007-08-29 13:27:46.000000000 -0500
@@ -197,6 +197,9 @@ void inode_init_once(struct inode *inode
spin_lock_init(&inode->i_data.i_mmap_lock);
INIT_LIST_HEAD(&inode->i_data.private_list);
spin_lock_init(&inode->i_data.private_lock);
+#ifdef CONFIG_VM_FILE_TAILS
+ spin_lock_init(&inode->i_data.tail_lock);
+#endif
INIT_RAW_PRIO_TREE_ROOT(&inode->i_data.i_mmap);
INIT_LIST_HEAD(&inode->i_data.i_mmap_nonlinear);
spin_lock_init(&inode->i_lock);
diff -Nurp linux000/include/linux/fs.h linux001/include/linux/fs.h
--- linux000/include/linux/fs.h 2007-08-28 09:57:17.000000000 -0500
+++ linux001/include/linux/fs.h 2007-08-29 13:27:46.000000000 -0500
@@ -453,6 +453,10 @@ struct address_space {
spinlock_t private_lock; /* for use by the address_space */
struct list_head private_list; /* ditto */
struct address_space *assoc_mapping; /* ditto */
+#ifdef CONFIG_VM_FILE_TAILS
+ void *tail; /* file tail */
+ spinlock_t tail_lock; /* protect tail */
+#endif
} __attribute__((aligned(sizeof(long))));
/*
* On most architectures that alignment is already the case; but
diff -Nurp linux000/mm/Kconfig linux001/mm/Kconfig
--- linux000/mm/Kconfig 2007-08-28 09:57:20.000000000 -0500
+++ linux001/mm/Kconfig 2007-08-29 13:27:46.000000000 -0500
@@ -176,3 +176,12 @@ config NR_QUICK
config VIRT_TO_BUS
def_bool y
depends on !ARCH_NO_VIRT_TO_BUS
+
+config VM_FILE_TAILS
+ bool "Store file tails in slab cache"
+ def_bool n
+ help
+ If the data at the end of a file, or the entire file, is small,
+ the kernel will attempt to store that data in the slab cache,
+ rather than allocate an entire page in the page cache.
+ If unsure, say N here.