summaryrefslogtreecommitdiff
path: root/pfinet/linux-src/include/linux/pagemap.h
diff options
context:
space:
mode:
Diffstat (limited to 'pfinet/linux-src/include/linux/pagemap.h')
-rw-r--r--pfinet/linux-src/include/linux/pagemap.h16
1 files changed, 9 insertions, 7 deletions
diff --git a/pfinet/linux-src/include/linux/pagemap.h b/pfinet/linux-src/include/linux/pagemap.h
index 1f5a62dd..9bf5efd8 100644
--- a/pfinet/linux-src/include/linux/pagemap.h
+++ b/pfinet/linux-src/include/linux/pagemap.h
@@ -38,11 +38,15 @@ static inline unsigned long page_address(struct page * page)
*/
#define page_cache_entry(x) (mem_map + MAP_NR(x))
-#define PAGE_HASH_BITS 12
-#define PAGE_HASH_SIZE (1 << PAGE_HASH_BITS)
+#define PAGE_HASH_BITS page_hash_bits
+#define PAGE_HASH_MASK page_hash_mask
extern unsigned long page_cache_size; /* # of pages currently in the hash table */
-extern struct page * page_hash_table[PAGE_HASH_SIZE];
+extern unsigned int page_hash_bits;
+extern unsigned int page_hash_mask;
+extern struct page **page_hash_table;
+
+extern void page_cache_init(unsigned long);
/*
* We use a power-of-two hash table to avoid a modulus,
@@ -53,12 +57,10 @@ extern struct page * page_hash_table[PAGE_HASH_SIZE];
static inline unsigned long _page_hashfn(struct inode * inode, unsigned long offset)
{
#define i (((unsigned long) inode)/(sizeof(struct inode) & ~ (sizeof(struct inode) - 1)))
-#define o (offset >> PAGE_SHIFT)
-#define s(x) ((x)+((x)>>PAGE_HASH_BITS))
- return s(i+o) & (PAGE_HASH_SIZE-1);
+#define o ((offset >> PAGE_SHIFT) + (offset & ~PAGE_MASK))
+ return ((i+o) & PAGE_HASH_MASK);
#undef i
#undef o
-#undef s
}
#define page_hash(inode,offset) (page_hash_table+_page_hashfn(inode,offset))