|
@@ -4527,7 +4527,8 @@ static const char *page_getlink(struct dentry * dentry, void **cookie)
|
|
if (IS_ERR(page))
|
|
if (IS_ERR(page))
|
|
return (char*)page;
|
|
return (char*)page;
|
|
*cookie = page;
|
|
*cookie = page;
|
|
- kaddr = kmap(page);
|
|
|
|
|
|
+ BUG_ON(mapping_gfp_mask(mapping) & __GFP_HIGHMEM);
|
|
|
|
+ kaddr = page_address(page);
|
|
nd_terminate_link(kaddr, dentry->d_inode->i_size, PAGE_SIZE - 1);
|
|
nd_terminate_link(kaddr, dentry->d_inode->i_size, PAGE_SIZE - 1);
|
|
return kaddr;
|
|
return kaddr;
|
|
}
|
|
}
|
|
@@ -4541,7 +4542,6 @@ EXPORT_SYMBOL(page_follow_link_light);
|
|
void page_put_link(struct inode *unused, void *cookie)
|
|
void page_put_link(struct inode *unused, void *cookie)
|
|
{
|
|
{
|
|
struct page *page = cookie;
|
|
struct page *page = cookie;
|
|
- kunmap(page);
|
|
|
|
page_cache_release(page);
|
|
page_cache_release(page);
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(page_put_link);
|
|
EXPORT_SYMBOL(page_put_link);
|
|
@@ -4565,7 +4565,6 @@ int __page_symlink(struct inode *inode, const char *symname, int len, int nofs)
|
|
struct page *page;
|
|
struct page *page;
|
|
void *fsdata;
|
|
void *fsdata;
|
|
int err;
|
|
int err;
|
|
- char *kaddr;
|
|
|
|
unsigned int flags = AOP_FLAG_UNINTERRUPTIBLE;
|
|
unsigned int flags = AOP_FLAG_UNINTERRUPTIBLE;
|
|
if (nofs)
|
|
if (nofs)
|
|
flags |= AOP_FLAG_NOFS;
|
|
flags |= AOP_FLAG_NOFS;
|
|
@@ -4576,9 +4575,7 @@ retry:
|
|
if (err)
|
|
if (err)
|
|
goto fail;
|
|
goto fail;
|
|
|
|
|
|
- kaddr = kmap_atomic(page);
|
|
|
|
- memcpy(kaddr, symname, len-1);
|
|
|
|
- kunmap_atomic(kaddr);
|
|
|
|
|
|
+ memcpy(page_address(page), symname, len-1);
|
|
|
|
|
|
err = pagecache_write_end(NULL, mapping, 0, len-1, len-1,
|
|
err = pagecache_write_end(NULL, mapping, 0, len-1, len-1,
|
|
page, fsdata);
|
|
page, fsdata);
|