|
@@ -173,12 +173,13 @@ prototypes:
|
|
|
sector_t (*bmap)(struct address_space *, sector_t);
|
|
|
int (*invalidatepage) (struct page *, unsigned long);
|
|
|
int (*releasepage) (struct page *, int);
|
|
|
+ void (*freepage)(struct page *);
|
|
|
int (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
|
|
loff_t offset, unsigned long nr_segs);
|
|
|
int (*launder_page) (struct page *);
|
|
|
|
|
|
locking rules:
|
|
|
- All except set_page_dirty may block
|
|
|
+ All except set_page_dirty and freepage may block
|
|
|
|
|
|
BKL PageLocked(page) i_mutex
|
|
|
writepage: no yes, unlocks (see below)
|
|
@@ -193,6 +194,7 @@ perform_write: no n/a yes
|
|
|
bmap: no
|
|
|
invalidatepage: no yes
|
|
|
releasepage: no yes
|
|
|
+freepage: no yes
|
|
|
direct_IO: no
|
|
|
launder_page: no yes
|
|
|
|
|
@@ -288,6 +290,9 @@ buffers from the page in preparation for freeing it. It returns zero to
|
|
|
indicate that the buffers are (or may be) freeable. If ->releasepage is zero,
|
|
|
the kernel assumes that the fs has no private interest in the buffers.
|
|
|
|
|
|
+ ->freepage() is called when the kernel is done dropping the page
|
|
|
+from the page cache.
|
|
|
+
|
|
|
->launder_page() may be called prior to releasing a page if
|
|
|
it is still found to be dirty. It returns zero if the page was successfully
|
|
|
cleaned, or an error value if not. Note that in order to prevent the page
|