if (offs != limit)
goto Eend;
out:
- SetPageFsMisc(page);
+ SetPageChecked(page);
return;
/* Too bad, we had an error */
dir->i_ino, (page->index<<PAGE_CACHE_SHIFT)+offs,
(unsigned long) le32_to_cpu(p->inode));
fail:
- SetPageFsMisc(page);
+ SetPageChecked(page);
SetPageError(page);
}
static struct page * ext2_get_page(struct inode *dir, unsigned long n)
{
struct address_space *mapping = dir->i_mapping;
- struct page *page = read_mapping_page(mapping, n, NULL);
+ struct page *page = read_cache_page(mapping, n,
+ (filler_t*)mapping->a_ops->readpage, NULL);
if (!IS_ERR(page)) {
wait_on_page_locked(page);
kmap(page);
if (!PageUptodate(page))
goto fail;
- if (!PageFsMisc(page))
+ if (!PageChecked(page))
ext2_check_page(page);
if (PageError(page))
goto fail;
}
if (++n >= npages)
n = 0;
+ /* next page is past the blocks we've got */
+ if (unlikely(n > (dir->i_blocks >> (PAGE_CACHE_SHIFT - 9)))) {
+ ext2_error(dir->i_sb, __FUNCTION__,
+ "dir %lu size %lld exceeds block count %llu",
+ dir->i_ino, dir->i_size,
+ (unsigned long long)dir->i_blocks);
+ goto out;
+ }
} while (n != start);
out:
return NULL;
de = ext2_find_entry (dir, dentry, &page);
if (de) {
res = le32_to_cpu(de->inode);
- ext2_put_page(page);
+ kunmap(page);
+ page_cache_release(page);
}
return res;
}
lock_page(page);
err = page->mapping->a_ops->prepare_write(NULL, page, from, to);
- BUG_ON(err);
+ if (err)
+ BUG();
de->inode = cpu_to_le32(inode->i_ino);
ext2_set_de_type (de, inode);
err = ext2_commit_chunk(page, from, to);
from = (char*)pde - (char*)page_address(page);
lock_page(page);
err = mapping->a_ops->prepare_write(NULL, page, from, to);
- BUG_ON(err);
+ if (err)
+ BUG();
if (pde)
pde->rec_len = cpu_to_le16(to-from);
dir->inode = 0;
return 0;
}
-const struct file_operations ext2_dir_operations = {
+struct file_operations ext2_dir_operations = {
.llseek = generic_file_llseek,
.read = generic_read_dir,
.readdir = ext2_readdir,