diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ext3/namei.c | 3 | ||||
-rw-r--r-- | fs/namei.c | 13 |
2 files changed, 13 insertions, 3 deletions
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c index 8bd8ac077704..b8f5cd1e540d 100644 --- a/fs/ext3/namei.c +++ b/fs/ext3/namei.c | |||
@@ -2141,7 +2141,8 @@ retry: | |||
2141 | * We have a transaction open. All is sweetness. It also sets | 2141 | * We have a transaction open. All is sweetness. It also sets |
2142 | * i_size in generic_commit_write(). | 2142 | * i_size in generic_commit_write(). |
2143 | */ | 2143 | */ |
2144 | err = page_symlink(inode, symname, l); | 2144 | err = __page_symlink(inode, symname, l, |
2145 | mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS); | ||
2145 | if (err) { | 2146 | if (err) { |
2146 | ext3_dec_count(handle, inode); | 2147 | ext3_dec_count(handle, inode); |
2147 | ext3_mark_inode_dirty(handle, inode); | 2148 | ext3_mark_inode_dirty(handle, inode); |
diff --git a/fs/namei.c b/fs/namei.c index 557dcf395ca1..8dc2b038d5d9 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
@@ -2613,13 +2613,15 @@ void page_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie) | |||
2613 | } | 2613 | } |
2614 | } | 2614 | } |
2615 | 2615 | ||
2616 | int page_symlink(struct inode *inode, const char *symname, int len) | 2616 | int __page_symlink(struct inode *inode, const char *symname, int len, |
2617 | gfp_t gfp_mask) | ||
2617 | { | 2618 | { |
2618 | struct address_space *mapping = inode->i_mapping; | 2619 | struct address_space *mapping = inode->i_mapping; |
2619 | struct page *page = grab_cache_page(mapping, 0); | 2620 | struct page *page; |
2620 | int err = -ENOMEM; | 2621 | int err = -ENOMEM; |
2621 | char *kaddr; | 2622 | char *kaddr; |
2622 | 2623 | ||
2624 | page = find_or_create_page(mapping, 0, gfp_mask); | ||
2623 | if (!page) | 2625 | if (!page) |
2624 | goto fail; | 2626 | goto fail; |
2625 | err = mapping->a_ops->prepare_write(NULL, page, 0, len-1); | 2627 | err = mapping->a_ops->prepare_write(NULL, page, 0, len-1); |
@@ -2654,6 +2656,12 @@ fail: | |||
2654 | return err; | 2656 | return err; |
2655 | } | 2657 | } |
2656 | 2658 | ||
2659 | int page_symlink(struct inode *inode, const char *symname, int len) | ||
2660 | { | ||
2661 | return __page_symlink(inode, symname, len, | ||
2662 | mapping_gfp_mask(inode->i_mapping)); | ||
2663 | } | ||
2664 | |||
2657 | struct inode_operations page_symlink_inode_operations = { | 2665 | struct inode_operations page_symlink_inode_operations = { |
2658 | .readlink = generic_readlink, | 2666 | .readlink = generic_readlink, |
2659 | .follow_link = page_follow_link_light, | 2667 | .follow_link = page_follow_link_light, |
@@ -2672,6 +2680,7 @@ EXPORT_SYMBOL(lookup_one_len); | |||
2672 | EXPORT_SYMBOL(page_follow_link_light); | 2680 | EXPORT_SYMBOL(page_follow_link_light); |
2673 | EXPORT_SYMBOL(page_put_link); | 2681 | EXPORT_SYMBOL(page_put_link); |
2674 | EXPORT_SYMBOL(page_readlink); | 2682 | EXPORT_SYMBOL(page_readlink); |
2683 | EXPORT_SYMBOL(__page_symlink); | ||
2675 | EXPORT_SYMBOL(page_symlink); | 2684 | EXPORT_SYMBOL(page_symlink); |
2676 | EXPORT_SYMBOL(page_symlink_inode_operations); | 2685 | EXPORT_SYMBOL(page_symlink_inode_operations); |
2677 | EXPORT_SYMBOL(path_lookup); | 2686 | EXPORT_SYMBOL(path_lookup); |