Commit d3883d4f authored by Al Viro's avatar Al Viro
Browse files

teach page_get_link() to work in RCU mode



more or less along the lines of Neil's patchset, sans the insanity
around kmap().

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 6b255391
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -4533,12 +4533,19 @@ const char *page_get_link(struct dentry *dentry, struct inode *inode,
	struct page *page;
	struct address_space *mapping = inode->i_mapping;

	if (!dentry)
	if (!dentry) {
		page = find_get_page(mapping, 0);
		if (!page)
			return ERR_PTR(-ECHILD);

		if (!PageUptodate(page)) {
			put_page(page);
			return ERR_PTR(-ECHILD);
		}
	} else {
		page = read_mapping_page(mapping, 0, NULL);
		if (IS_ERR(page))
			return (char*)page;
	}
	*cookie = page;
	BUG_ON(mapping_gfp_mask(mapping) & __GFP_HIGHMEM);
	kaddr = page_address(page);