> --- a/fs/ufs/dir.c > +++ b/fs/ufs/dir.c > @@ -193,7 +193,7 @@ static struct page *ufs_get_page(struct inode *dir, unsigned long n) > if (!IS_ERR(page)) { > kmap(page); > if (unlikely(!PageChecked(page))) { > - if (PageError(page) || !ufs_check_page(page)) > + if (!ufs_check_page(page)) > goto fail; > } Unrelated note: doing the PageChecked check inside of ufs_check_page wuld really help readability for the casual reader. > } > diff --git a/fs/ufs/util.c b/fs/ufs/util.c > index 4fa633f84274..08ddf41eaaad 100644 > --- a/fs/ufs/util.c > +++ b/fs/ufs/util.c > @@ -264,17 +264,6 @@ struct page *ufs_get_locked_page(struct address_space *mapping, > put_page(page); > return NULL; > } > - > - if (!PageUptodate(page) || PageError(page)) { > - unlock_page(page); > - put_page(page); > - > - printk(KERN_ERR "ufs_change_blocknr: " > - "can not read page: ino %lu, index: %lu\n", > - inode->i_ino, index); > - > - return ERR_PTR(-EIO); > - } This looks good. But this code could use some more love nd a removal of the find_lock_page call by always just using read_mapping_page. Especially a the truncate protection should apply equally to cached pages and not just those freshly read off the disk. But I guess for now this looks good: Reviewed-by: Christoph Hellwig <hch@xxxxxx>