diff options
author | Roman Zippel <zippel@linux-m68k.org> | 2005-03-28 04:08:23 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-03-28 04:08:23 -0800 |
commit | d59b40a3e666ca6cb7b261bc8d11cdabb75a40d2 (patch) | |
tree | b933e44ac63127c0e224480ea1ab507438cc99e9 | |
parent | 1a61e05e6b5b87ddb42e08a45b0b51787d3ba652 (diff) | |
download | history-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.c | 8 | ||||
-rw-r--r-- | fs/hfsplus/inode.c | 8 |
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, |