From 98f5f4e3b487754436c230cd1f700c5f1ec5fd60 Mon Sep 17 00:00:00 2001 From: Evgeniy Dushistov Date: Sat, 5 Aug 2006 12:13:55 -0700 Subject: [PATCH] --- yaml --- r: 33225 b: refs/heads/master c: 1fb32b7bd8203d0175649a75ede3ee7634d6a941 h: refs/heads/master i: 33223: 6e5a9cc4659c72b107267e658860158765ea35bb v: v3 --- [refs] | 2 +- trunk/fs/ufs/util.c | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 6ffdffbf928d..4f557ed5c3af 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e91467ecd1ef381377fd327c0ded922835ec52ab +refs/heads/master: 1fb32b7bd8203d0175649a75ede3ee7634d6a941 diff --git a/trunk/fs/ufs/util.c b/trunk/fs/ufs/util.c index 337cf2c46d10..005d6815adf5 100644 --- a/trunk/fs/ufs/util.c +++ b/trunk/fs/ufs/util.c @@ -257,6 +257,7 @@ struct page *ufs_get_locked_page(struct address_space *mapping, page = read_cache_page(mapping, index, (filler_t*)mapping->a_ops->readpage, NULL); + if (IS_ERR(page)) { printk(KERN_ERR "ufs_change_blocknr: " "read_cache_page error: ino %lu, index: %lu\n", @@ -266,6 +267,13 @@ struct page *ufs_get_locked_page(struct address_space *mapping, lock_page(page); + if (unlikely(page->mapping == NULL)) { + /* Truncate got there first */ + unlock_page(page); + page_cache_release(page); + goto try_again; + } + if (!PageUptodate(page) || PageError(page)) { unlock_page(page); page_cache_release(page); @@ -275,15 +283,8 @@ struct page *ufs_get_locked_page(struct address_space *mapping, mapping->host->i_ino, index); page = ERR_PTR(-EIO); - goto out; } } - - if (unlikely(!page->mapping || !page_has_buffers(page))) { - unlock_page(page); - page_cache_release(page); - goto try_again;/*we really need these buffers*/ - } out: return page; }