diff options
| author | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 20:19:17 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@athlon.transmeta.com> | 2002-02-04 20:19:17 -0800 |
| commit | e2f6721a0a1b07612c0682d8240d3e9bc0a445a4 (patch) | |
| tree | aa6410ac8fc965f7d695031fa4c467347138c485 /include/linux | |
| parent | 269f8f707739116e68aee38d78d0cfb3d896b856 (diff) | |
v2.4.9.14 -> v2.4.9.15
- Jan Harkes: make Coda work with arbitrary host filesystems, not
just filesystems that use generic_file_read/write
- Al Viro: block device cleanups
- Hugh Dickins: swap device lock fixes - fix swap readahead race
- me, Andrea: more reference bit cleanups
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/fs.h | 4 | ||||
| -rw-r--r-- | include/linux/mm.h | 32 | ||||
| -rw-r--r-- | include/linux/swap.h | 19 |
3 files changed, 20 insertions, 35 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 31a2167afac8..9eca17f8ee1b 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -415,6 +415,7 @@ struct block_device { int bd_cache_openers; const struct block_device_operations *bd_op; struct semaphore bd_sem; /* open/close mutex */ + struct list_head bd_inodes; }; struct inode { @@ -452,6 +453,7 @@ struct inode { int i_mapping_overload; struct dquot *i_dquot[MAXQUOTAS]; /* These three should probably be a union */ + struct list_head i_devices; struct pipe_inode_info *i_pipe; struct block_device *i_bdev; struct char_device *i_cdev; @@ -1046,6 +1048,8 @@ enum {BDEV_FILE, BDEV_SWAP, BDEV_FS, BDEV_RAW}; extern int register_blkdev(unsigned int, const char *, struct block_device_operations *); extern int unregister_blkdev(unsigned int, const char *); extern struct block_device *bdget(dev_t); +extern int bd_acquire(struct inode *inode); +extern void bd_forget(struct inode *inode); extern void bdput(struct block_device *); extern struct char_device *cdget(dev_t); extern void cdput(struct char_device *); diff --git a/include/linux/mm.h b/include/linux/mm.h index 8f9e8bfbce88..494d025d143d 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -274,7 +274,6 @@ typedef struct page { #define PG_active 6 #define PG_inactive 7 #define PG_slab 8 -#define PG_swap_cache 9 #define PG_skip 10 #define PG_highmem 11 #define PG_checked 12 /* kill me in 2.5.<early>. */ @@ -326,18 +325,9 @@ static inline void set_page_dirty(struct page * page) #define SetPageDecrAfter(page) set_bit(PG_decr_after, &(page)->flags) #define PageTestandClearDecrAfter(page) test_and_clear_bit(PG_decr_after, &(page)->flags) #define PageSlab(page) test_bit(PG_slab, &(page)->flags) -#define PageSwapCache(page) test_bit(PG_swap_cache, &(page)->flags) -#define PageReserved(page) test_bit(PG_reserved, &(page)->flags) - #define PageSetSlab(page) set_bit(PG_slab, &(page)->flags) -#define PageSetSwapCache(page) set_bit(PG_swap_cache, &(page)->flags) - -#define PageTestandSetSwapCache(page) test_and_set_bit(PG_swap_cache, &(page)->flags) - -#define PageClearSlab(page) clear_bit(PG_slab, &(page)->flags) -#define PageClearSwapCache(page) clear_bit(PG_swap_cache, &(page)->flags) - -#define PageTestandClearSwapCache(page) test_and_clear_bit(PG_swap_cache, &(page)->flags) +#define PageClearSlab(page) clear_bit(PG_slab, &(page)->flags) +#define PageReserved(page) test_bit(PG_reserved, &(page)->flags) #define PageActive(page) test_bit(PG_active, &(page)->flags) #define SetPageActive(page) set_bit(PG_active, &(page)->flags) @@ -465,6 +455,9 @@ extern void show_mem(void); extern void si_meminfo(struct sysinfo * val); extern void swapin_readahead(swp_entry_t); +extern struct address_space swapper_space; +#define PageSwapCache(page) ((page)->mapping == &swapper_space) + static inline int is_page_cache_freeable(struct page * page) { return page_count(page) - !!page->buffers == 1; @@ -476,15 +469,13 @@ static inline int is_page_cache_freeable(struct page * page) */ static inline int exclusive_swap_page(struct page *page) { - unsigned int count; - if (!PageLocked(page)) BUG(); if (!PageSwapCache(page)) return 0; - count = page_count(page) - !!page->buffers; /* 2: us + swap cache */ - count += swap_count(page); /* +1: just swap cache */ - return count == 3; /* =3: total */ + if (page_count(page) - !!page->buffers != 2) /* 2: us + cache */ + return 0; + return swap_count(page) == 1; /* 1: just cache */ } extern void __free_pte(pte_t); @@ -565,11 +556,10 @@ extern struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int); #define GFP_NOFS (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO) #define GFP_ATOMIC (__GFP_HIGH) #define GFP_USER ( __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS) -#define GFP_HIGHUSER ( __GFP_WAIT | __GFP_IO | __GFP_HIGHIO \ - | __GFP_FS | __GFP_HIGHMEM) +#define GFP_HIGHUSER ( __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS | __GFP_HIGHMEM) #define GFP_KERNEL (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS) -#define GFP_NFS (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS) -#define GFP_KSWAPD ( __GFP_IO | __GFP_HIGHIO | __GFP_FS) +#define GFP_NFS (__GFP_HIGH | __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS) +#define GFP_KSWAPD ( __GFP_WAIT | __GFP_IO | __GFP_HIGHIO | __GFP_FS) /* Flag - indicates that the buffer will be suitable for DMA. Ignored on some platforms, used as appropriate on others */ diff --git a/include/linux/swap.h b/include/linux/swap.h index 0ce8a374a11d..0282b6bac60c 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -84,7 +84,6 @@ extern unsigned int nr_free_buffer_pages(void); extern int nr_active_pages; extern int nr_inactive_pages; extern atomic_t nr_async_pages; -extern struct address_space swapper_space; extern atomic_t page_cache_size; extern atomic_t buffermem_pages; extern spinlock_t pagecache_lock; @@ -122,35 +121,27 @@ extern void rw_swap_page_nolock(int, swp_entry_t, char *); /* linux/mm/swap_state.c */ extern void show_swap_cache_info(void); extern void add_to_swap_cache(struct page *, swp_entry_t); -extern int swap_check_entry(unsigned long); +extern void __delete_from_swap_cache(struct page *page); +extern void delete_from_swap_cache(struct page *page); +extern void free_page_and_swap_cache(struct page *page); extern struct page * lookup_swap_cache(swp_entry_t); extern struct page * read_swap_cache_async(swp_entry_t); /* linux/mm/oom_kill.c */ extern void oom_kill(void); -/* - * Make these inline later once they are working properly. - */ -extern void __delete_from_swap_cache(struct page *page); -extern void delete_from_swap_cache(struct page *page); -extern void delete_from_swap_cache_nolock(struct page *page); -extern void free_page_and_swap_cache(struct page *page); - /* linux/mm/swapfile.c */ extern unsigned int nr_swapfiles; extern struct swap_info_struct swap_info[]; extern int is_swap_partition(kdev_t); extern void si_swapinfo(struct sysinfo *); -extern swp_entry_t __get_swap_page(unsigned short); +extern swp_entry_t get_swap_page(void); extern void get_swaphandle_info(swp_entry_t, unsigned long *, kdev_t *, struct inode **); extern int swap_duplicate(swp_entry_t); extern int swap_count(struct page *); extern int valid_swaphandles(swp_entry_t, unsigned long *); -#define get_swap_page() __get_swap_page(1) -extern void __swap_free(swp_entry_t, unsigned short); -#define swap_free(entry) __swap_free((entry), 1) +extern void swap_free(swp_entry_t); struct swap_list_t { int head; /* head of priority-ordered swapfile list */ int next; /* swapfile to be used next */ |
