diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-12-01 13:35:19 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2010-12-02 09:55:21 -0500 |
commit | 6072d13c429373c5d63b69dadbbef40a9b035552 (patch) | |
tree | a2bf745efaa4092f2a8d7d9a9b160c2a7a3b303f /Documentation/filesystems/vfs.txt | |
parent | 0aded708d125a3ff7e5abaea9c2d9c6d7ebbfdcd (diff) |
Call the filesystem back whenever a page is removed from the page cache
NFS needs to be able to release objects that are stored in the page
cache once the page itself is no longer visible from the page cache.
This patch adds a callback to the address space operations that allows
filesystems to perform page cleanups once the page has been removed
from the page cache.
Original patch by: Linus Torvalds <torvalds@linux-foundation.org>
[trondmy: cover the cases of invalidate_inode_pages2() and
truncate_inode_pages()]
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'Documentation/filesystems/vfs.txt')
-rw-r--r-- | Documentation/filesystems/vfs.txt | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index ed7e5efc06d8..3b14a557eca6 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
@@ -534,6 +534,7 @@ struct address_space_operations { | |||
534 | sector_t (*bmap)(struct address_space *, sector_t); | 534 | sector_t (*bmap)(struct address_space *, sector_t); |
535 | int (*invalidatepage) (struct page *, unsigned long); | 535 | int (*invalidatepage) (struct page *, unsigned long); |
536 | int (*releasepage) (struct page *, int); | 536 | int (*releasepage) (struct page *, int); |
537 | void (*freepage)(struct page *); | ||
537 | ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov, | 538 | ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov, |
538 | loff_t offset, unsigned long nr_segs); | 539 | loff_t offset, unsigned long nr_segs); |
539 | struct page* (*get_xip_page)(struct address_space *, sector_t, | 540 | struct page* (*get_xip_page)(struct address_space *, sector_t, |
@@ -679,6 +680,12 @@ struct address_space_operations { | |||
679 | need to ensure this. Possibly it can clear the PageUptodate | 680 | need to ensure this. Possibly it can clear the PageUptodate |
680 | bit if it cannot free private data yet. | 681 | bit if it cannot free private data yet. |
681 | 682 | ||
683 | freepage: freepage is called once the page is no longer visible in | ||
684 | the page cache in order to allow the cleanup of any private | ||
685 | data. Since it may be called by the memory reclaimer, it | ||
686 | should not assume that the original address_space mapping still | ||
687 | exists, and it should not block. | ||
688 | |||
682 | direct_IO: called by the generic read/write routines to perform | 689 | direct_IO: called by the generic read/write routines to perform |
683 | direct_IO - that is IO requests which bypass the page cache | 690 | direct_IO - that is IO requests which bypass the page cache |
684 | and transfer data directly between the storage and the | 691 | and transfer data directly between the storage and the |