diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/blkdev.h | 4 | ||||
| -rw-r--r-- | include/linux/fs.h | 2 | ||||
| -rw-r--r-- | include/linux/kernel_stat.h | 11 | ||||
| -rw-r--r-- | include/linux/page-flags.h | 26 | ||||
| -rw-r--r-- | include/linux/pagemap.h | 3 | ||||
| -rw-r--r-- | include/linux/pagevec.h | 3 | ||||
| -rw-r--r-- | include/linux/radix-tree.h | 3 | ||||
| -rw-r--r-- | include/linux/sched.h | 1 | ||||
| -rw-r--r-- | include/linux/shmem_fs.h | 6 | ||||
| -rw-r--r-- | include/linux/swap.h | 2 |
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__*/ |
