|
@@ -257,6 +257,7 @@ try_again:
|
|
|
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 @@ try_again:
|
|
|
|
|
|
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 @@ try_again:
|
|
|
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;
|
|
|
}
|