summaryrefslogtreecommitdiffstats
path: root/fs/ufs/util.c
diff options
context:
space:
mode:
authorEvgeniy Dushistov <dushistov@mail.ru>2006-08-05 21:13:57 +0200
committerLinus Torvalds <torvalds@g5.osdl.org>2006-08-06 17:57:46 +0200
commit06fa45d3a19c6fbfccbf295e9f08087492338631 (patch)
tree24cc6843b98272e8ef5a8a1c78ef5b452f4a2d84 /fs/ufs/util.c
parent[PATCH] ufs: ufs_get_locked_page() race fix (diff)
downloadlinux-06fa45d3a19c6fbfccbf295e9f08087492338631.tar.xz
linux-06fa45d3a19c6fbfccbf295e9f08087492338631.zip
[PATCH] ufs: handle truncated pages
ufs_get_locked_page is called twice in ufs code, one time in ufs_truncate path(we allocated last block), and another time when fragments are reallocated. In ideal world in the second case on allocation/free block layer we should not know that things like `truncate' exists, but now with such crutch like ufs_get_locked_page we can (or should?) skip truncated pages. Signed-off-by: Evgeniy Dushistov <dushistov@mail.ru> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to '')
-rw-r--r--fs/ufs/util.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/ufs/util.c b/fs/ufs/util.c
index 005d6815adf5..22f820a9b15c 100644
--- a/fs/ufs/util.c
+++ b/fs/ufs/util.c
@@ -251,7 +251,6 @@ struct page *ufs_get_locked_page(struct address_space *mapping,
{
struct page *page;
-try_again:
page = find_lock_page(mapping, index);
if (!page) {
page = read_cache_page(mapping, index,
@@ -271,7 +270,8 @@ try_again:
/* Truncate got there first */
unlock_page(page);
page_cache_release(page);
- goto try_again;
+ page = NULL;
+ goto out;
}
if (!PageUptodate(page) || PageError(page)) {