aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoman Zippel <zippel@linux-m68k.org>2005-03-28 04:08:23 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-03-28 04:08:23 -0800
commitd59b40a3e666ca6cb7b261bc8d11cdabb75a40d2 (patch)
treeb933e44ac63127c0e224480ea1ab507438cc99e9
parent1a61e05e6b5b87ddb42e08a45b0b51787d3ba652 (diff)
downloadhistory-d59b40a3e666ca6cb7b261bc8d11cdabb75a40d2.tar.gz
[PATCH] hfs: free page buffers in releasepage
Call try_to_free_buffers() when a page can be released. This behaviour changed during 2.5 and wasn't fixed in hfs while porting it to 2.6. Also remove an unnecessary PageActive() check, only the node ref count is really relevant. Signed-off-by: Roman Zippel <zippel@linux-m68k.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--fs/hfs/inode.c8
-rw-r--r--fs/hfsplus/inode.c8
2 files changed, 2 insertions, 14 deletions
diff --git a/fs/hfs/inode.c b/fs/hfs/inode.c
index f1757d1390ed2..6aa0935e26ca2 100644
--- a/fs/hfs/inode.c
+++ b/fs/hfs/inode.c
@@ -74,12 +74,6 @@ static int hfs_releasepage(struct page *page, int mask)
;
else if (atomic_read(&node->refcnt))
res = 0;
- else for (i = 0; i < tree->pages_per_bnode; i++) {
- if (PageActive(node->page[i])) {
- res = 0;
- break;
- }
- }
if (res && node) {
hfs_bnode_unhash(node);
hfs_bnode_free(node);
@@ -103,7 +97,7 @@ static int hfs_releasepage(struct page *page, int mask)
spin_unlock(&tree->hash_lock);
}
//printk("releasepage: %lu,%x = %d\n", page->index, mask, res);
- return res;
+ return res ? try_to_free_buffers(page) : 0;
}
static int hfs_get_blocks(struct inode *inode, sector_t iblock, unsigned long max_blocks,
diff --git a/fs/hfsplus/inode.c b/fs/hfsplus/inode.c
index b2b56c3836a26..d5642705f6336 100644
--- a/fs/hfsplus/inode.c
+++ b/fs/hfsplus/inode.c
@@ -71,12 +71,6 @@ static int hfsplus_releasepage(struct page *page, int mask)
;
else if (atomic_read(&node->refcnt))
res = 0;
- else for (i = 0; i < tree->pages_per_bnode; i++) {
- if (PageActive(node->page[i])) {
- res = 0;
- break;
- }
- }
if (res && node) {
hfs_bnode_unhash(node);
hfs_bnode_free(node);
@@ -100,7 +94,7 @@ static int hfsplus_releasepage(struct page *page, int mask)
spin_unlock(&tree->hash_lock);
}
//printk("releasepage: %lu,%x = %d\n", page->index, mask, res);
- return res;
+ return res ? try_to_free_buffers(page) : 0;
}
static int hfsplus_get_blocks(struct inode *inode, sector_t iblock, unsigned long max_blocks,