summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/blkdev.h4
-rw-r--r--include/linux/fs.h2
-rw-r--r--include/linux/kernel_stat.h11
-rw-r--r--include/linux/page-flags.h26
-rw-r--r--include/linux/pagemap.h3
-rw-r--r--include/linux/pagevec.h3
-rw-r--r--include/linux/radix-tree.h3
-rw-r--r--include/linux/sched.h1
-rw-r--r--include/linux/shmem_fs.h6
-rw-r--r--include/linux/swap.h2
10 files changed, 47 insertions, 14 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 55e0742783ed..a93abb3df305 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -400,4 +400,8 @@ static inline void put_dev_sector(Sector p)
page_cache_release(p.v);
}
+extern atomic_t nr_iowait_tasks;
+void io_schedule(void);
+void io_schedule_timeout(long timeout);
+
#endif
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 56f2bab87d7f..f0ba1e96325c 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1140,7 +1140,7 @@ extern int full_check_disk_change(struct block_device *);
extern int __check_disk_change(dev_t);
extern int invalidate_inodes(struct super_block *);
extern int invalidate_device(kdev_t, int);
-extern void invalidate_inode_pages(struct inode *);
+extern void invalidate_inode_pages(struct address_space *mapping);
extern void invalidate_inode_pages2(struct address_space *mapping);
extern void write_inode_now(struct inode *, int);
extern int filemap_fdatawrite(struct address_space *);
diff --git a/include/linux/kernel_stat.h b/include/linux/kernel_stat.h
index 75533ee86b73..a687f5b224e9 100644
--- a/include/linux/kernel_stat.h
+++ b/include/linux/kernel_stat.h
@@ -18,19 +18,14 @@
struct kernel_stat {
unsigned int per_cpu_user[NR_CPUS],
per_cpu_nice[NR_CPUS],
- per_cpu_system[NR_CPUS];
+ per_cpu_system[NR_CPUS],
+ per_cpu_idle[NR_CPUS],
+ per_cpu_iowait[NR_CPUS];
unsigned int dk_drive[DK_MAX_MAJOR][DK_MAX_DISK];
unsigned int dk_drive_rio[DK_MAX_MAJOR][DK_MAX_DISK];
unsigned int dk_drive_wio[DK_MAX_MAJOR][DK_MAX_DISK];
unsigned int dk_drive_rblk[DK_MAX_MAJOR][DK_MAX_DISK];
unsigned int dk_drive_wblk[DK_MAX_MAJOR][DK_MAX_DISK];
- unsigned int pgpgin, pgpgout;
- unsigned int pswpin, pswpout;
- unsigned int pgalloc, pgfree;
- unsigned int pgactivate, pgdeactivate;
- unsigned int pgfault, pgmajfault;
- unsigned int pgscan, pgsteal;
- unsigned int pageoutrun, allocstall;
#if !defined(CONFIG_ARCH_S390)
unsigned int irqs[NR_CPUS][NR_IRQS];
#endif
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index 0e32a1b9dd5e..5c770f49787a 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -70,7 +70,8 @@
#define PG_direct 16 /* ->pte_chain points directly at pte */
/*
- * Global page accounting. One instance per CPU.
+ * Global page accounting. One instance per CPU. Only unsigned longs are
+ * allowed.
*/
extern struct page_state {
unsigned long nr_dirty;
@@ -80,9 +81,32 @@ extern struct page_state {
unsigned long nr_reverse_maps;
unsigned long nr_mapped;
unsigned long nr_slab;
+#define GET_PAGE_STATE_LAST nr_slab
+
+ /*
+ * The below are zeroed by get_page_state(). Use get_full_page_state()
+ * to add up all these.
+ */
+ unsigned long pgpgin;
+ unsigned long pgpgout;
+ unsigned long pswpin;
+ unsigned long pswpout;
+ unsigned long pgalloc;
+ unsigned long pgfree;
+ unsigned long pgactivate;
+ unsigned long pgdeactivate;
+ unsigned long pgfault;
+ unsigned long pgmajfault;
+ unsigned long pgscan;
+ unsigned long pgrefill;
+ unsigned long pgsteal;
+ unsigned long kswapd_steal;
+ unsigned long pageoutrun;
+ unsigned long allocstall;
} ____cacheline_aligned_in_smp page_states[NR_CPUS];
extern void get_page_state(struct page_state *ret);
+extern void get_full_page_state(struct page_state *ret);
#define mod_page_state(member, delta) \
do { \
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index bfc986131fe6..1fe640eaf601 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -41,6 +41,9 @@ extern struct page * find_trylock_page(struct address_space *mapping,
unsigned long index);
extern struct page * find_or_create_page(struct address_space *mapping,
unsigned long index, unsigned int gfp_mask);
+extern unsigned int find_get_pages(struct address_space *mapping,
+ pgoff_t start, unsigned int nr_pages,
+ struct page **pages);
/*
* Returns locked page at given index in given cache, creating it if needed.
diff --git a/include/linux/pagevec.h b/include/linux/pagevec.h
index 278689b2fb2a..0207270b0fe7 100644
--- a/include/linux/pagevec.h
+++ b/include/linux/pagevec.h
@@ -8,6 +8,7 @@
#define PAGEVEC_SIZE 16
struct page;
+struct address_space;
struct pagevec {
unsigned nr;
@@ -21,6 +22,8 @@ void __pagevec_lru_add(struct pagevec *pvec);
void lru_add_drain(void);
void pagevec_deactivate_inactive(struct pagevec *pvec);
void pagevec_strip(struct pagevec *pvec);
+unsigned int pagevec_lookup(struct pagevec *pvec, struct address_space *mapping,
+ pgoff_t start, unsigned int nr_pages);
static inline void pagevec_init(struct pagevec *pvec)
{
diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h
index fb2e3f3350d3..56d1c668ff2e 100644
--- a/include/linux/radix-tree.h
+++ b/include/linux/radix-tree.h
@@ -45,5 +45,8 @@ extern int radix_tree_reserve(struct radix_tree_root *, unsigned long, void ***)
extern int radix_tree_insert(struct radix_tree_root *, unsigned long, void *);
extern void *radix_tree_lookup(struct radix_tree_root *, unsigned long);
extern int radix_tree_delete(struct radix_tree_root *, unsigned long);
+extern unsigned int
+radix_tree_gang_lookup(struct radix_tree_root *root, void **results,
+ unsigned long first_index, unsigned int max_items);
#endif /* _LINUX_RADIX_TREE_H */
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 850a01b4455c..59dcfad4667e 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -430,6 +430,7 @@ do { if (atomic_dec_and_test(&(tsk)->usage)) __put_task_struct(tsk); } while(0)
#define PF_FROZEN 0x00040000 /* frozen for system suspend */
#define PF_SYNC 0x00080000 /* performing fsync(), etc */
#define PF_FSTRANS 0x00100000 /* inside a filesystem transaction */
+#define PF_KSWAPD 0x00200000 /* I am kswapd */
/*
* Ptrace flags
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h
index 9d39c403c0a0..dce3d7f9c252 100644
--- a/include/linux/shmem_fs.h
+++ b/include/linux/shmem_fs.h
@@ -11,11 +11,11 @@ extern atomic_t shmem_nrpages;
struct shmem_inode_info {
spinlock_t lock;
- struct semaphore sem;
unsigned long next_index;
swp_entry_t i_direct[SHMEM_NR_DIRECT]; /* for the first blocks */
- void **i_indirect; /* indirect blocks */
- unsigned long swapped;
+ struct page *i_indirect; /* indirect blocks */
+ unsigned long alloced; /* data pages allocated to file */
+ unsigned long swapped; /* subtotal assigned to swap */
unsigned long flags;
struct list_head list;
struct inode vfs_inode;
diff --git a/include/linux/swap.h b/include/linux/swap.h
index f4acbd1e9b46..4ec8559245c6 100644
--- a/include/linux/swap.h
+++ b/include/linux/swap.h
@@ -218,7 +218,7 @@ extern spinlock_t swaplock;
#define swap_device_lock(p) spin_lock(&p->sdev_lock)
#define swap_device_unlock(p) spin_unlock(&p->sdev_lock)
-extern void shmem_unuse(swp_entry_t entry, struct page *page);
+extern int shmem_unuse(swp_entry_t entry, struct page *page);
#endif /* __KERNEL__*/