diff options
| author | Andrew Morton <akpm@digeo.com> | 2002-10-02 22:57:40 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-10-02 22:57:40 -0700 |
| commit | 735a257344c83ebe06e2b4df1d4b3e5769704e19 (patch) | |
| tree | 5bb2660ac553470ec4bf45c0ab57d3f53a92d1ae /include/linux/fs.h | |
| parent | 55b407322622e0d86acda07f756cb08879030a90 (diff) | |
[PATCH] truncate/invalidate_inode_pages rewrite
Rewrite these functions to use gang lookup.
- This probably has similar performance to the old code in the common case.
- It will be vastly quicker than current code for the worst case
(single-page truncate).
- invalidate_inode_pages() has been changed. It used to use
page_count(page) as the "is it mapped into pagetables" heuristic. It
now uses the (page->pte.direct != 0) heuristic.
- Removes the worst cause of scheduling latency in the kernel.
- It's a big code cleanup.
- invalidate_inode_pages() has been changed to take an address_space
*, not an inode *.
- the maximum hold times for mapping->page_lock are enormously reduced,
making it quite feasible to turn this into an irq-safe lock. Which, it
seems, is a requirement for sane AIO<->direct-io integration, as well
as possibly other AIO things.
(Thanks Hugh for fixing a bug in this one as well).
(Christoph added some stuff too)
Diffstat (limited to 'include/linux/fs.h')
| -rw-r--r-- | include/linux/fs.h | 2 |
1 files changed, 1 insertions, 1 deletions
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 *); |
