aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/filesystems/porting5
-rw-r--r--fs/affs/inode.c1
-rw-r--r--fs/affs/namei.c1
-rw-r--r--fs/affs/symlink.c4
-rw-r--r--fs/afs/inode.c1
-rw-r--r--fs/befs/linuxvfs.c5
-rw-r--r--fs/btrfs/inode.c2
-rw-r--r--fs/coda/cnode.c2
-rw-r--r--fs/coda/symlink.c4
-rw-r--r--fs/cramfs/inode.c1
-rw-r--r--fs/efs/inode.c1
-rw-r--r--fs/efs/symlink.c4
-rw-r--r--fs/exofs/inode.c1
-rw-r--r--fs/exofs/namei.c1
-rw-r--r--fs/ext2/inode.c1
-rw-r--r--fs/ext2/namei.c1
-rw-r--r--fs/ext4/inode.c1
-rw-r--r--fs/ext4/namei.c1
-rw-r--r--fs/ext4/symlink.c10
-rw-r--r--fs/f2fs/inode.c1
-rw-r--r--fs/f2fs/namei.c5
-rw-r--r--fs/freevxfs/vxfs_inode.c1
-rw-r--r--fs/hfsplus/inode.c2
-rw-r--r--fs/hpfs/inode.c1
-rw-r--r--fs/hpfs/namei.c5
-rw-r--r--fs/hugetlbfs/inode.c1
-rw-r--r--fs/inode.c6
-rw-r--r--fs/isofs/inode.c1
-rw-r--r--fs/isofs/rock.c4
-rw-r--r--fs/jfs/inode.c1
-rw-r--r--fs/jfs/namei.c1
-rw-r--r--fs/logfs/dir.c1
-rw-r--r--fs/logfs/inode.c1
-rw-r--r--fs/minix/inode.c1
-rw-r--r--fs/namei.c9
-rw-r--r--fs/ncpfs/inode.c1
-rw-r--r--fs/nfs/inode.c5
-rw-r--r--fs/nfs/symlink.c2
-rw-r--r--fs/nilfs2/inode.c1
-rw-r--r--fs/nilfs2/namei.c1
-rw-r--r--fs/ocfs2/inode.c1
-rw-r--r--fs/ocfs2/namei.c1
-rw-r--r--fs/qnx4/inode.c1
-rw-r--r--fs/qnx6/inode.c1
-rw-r--r--fs/ramfs/inode.c1
-rw-r--r--fs/reiserfs/inode.c1
-rw-r--r--fs/reiserfs/namei.c1
-rw-r--r--fs/romfs/super.c1
-rw-r--r--fs/squashfs/inode.c2
-rw-r--r--fs/sysv/inode.c1
-rw-r--r--fs/udf/inode.c1
-rw-r--r--fs/udf/namei.c1
-rw-r--r--fs/udf/symlink.c4
-rw-r--r--fs/ufs/inode.c1
-rw-r--r--fs/ufs/namei.c1
-rw-r--r--include/linux/fs.h1
-rw-r--r--mm/shmem.c9
57 files changed, 81 insertions, 46 deletions
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting
index f24d1b833957..3eb7c35c9698 100644
--- a/Documentation/filesystems/porting
+++ b/Documentation/filesystems/porting
@@ -504,3 +504,8 @@ in your dentry operations instead.
504[mandatory] 504[mandatory]
505 __fd_install() & fd_install() can now sleep. Callers should not 505 __fd_install() & fd_install() can now sleep. Callers should not
506 hold a spinlock or other resources that do not allow a schedule. 506 hold a spinlock or other resources that do not allow a schedule.
507--
508[mandatory]
509 any symlink that might use page_follow_link_light/page_put_link() must
510 have inode_nohighmem(inode) called before anything might start playing with
511 its pagecache.
diff --git a/fs/affs/inode.c b/fs/affs/inode.c
index 17349500592d..0fdb0f5b2239 100644
--- a/fs/affs/inode.c
+++ b/fs/affs/inode.c
@@ -140,6 +140,7 @@ struct inode *affs_iget(struct super_block *sb, unsigned long ino)
140 break; 140 break;
141 case ST_SOFTLINK: 141 case ST_SOFTLINK:
142 inode->i_mode |= S_IFLNK; 142 inode->i_mode |= S_IFLNK;
143 inode_nohighmem(inode);
143 inode->i_op = &affs_symlink_inode_operations; 144 inode->i_op = &affs_symlink_inode_operations;
144 inode->i_data.a_ops = &affs_symlink_aops; 145 inode->i_data.a_ops = &affs_symlink_aops;
145 break; 146 break;
diff --git a/fs/affs/namei.c b/fs/affs/namei.c
index 181e05b46e72..00d3002a6780 100644
--- a/fs/affs/namei.c
+++ b/fs/affs/namei.c
@@ -344,6 +344,7 @@ affs_symlink(struct inode *dir, struct dentry *dentry, const char *symname)
344 return -ENOSPC; 344 return -ENOSPC;
345 345
346 inode->i_op = &affs_symlink_inode_operations; 346 inode->i_op = &affs_symlink_inode_operations;
347 inode_nohighmem(inode);
347 inode->i_data.a_ops = &affs_symlink_aops; 348 inode->i_data.a_ops = &affs_symlink_aops;
348 inode->i_mode = S_IFLNK | 0777; 349 inode->i_mode = S_IFLNK | 0777;
349 mode_to_prot(inode); 350 mode_to_prot(inode);
diff --git a/fs/affs/symlink.c b/fs/affs/symlink.c
index ea5b69a18ba9..e3f9dc3ae8cc 100644
--- a/fs/affs/symlink.c
+++ b/fs/affs/symlink.c
@@ -14,7 +14,7 @@ static int affs_symlink_readpage(struct file *file, struct page *page)
14{ 14{
15 struct buffer_head *bh; 15 struct buffer_head *bh;
16 struct inode *inode = page->mapping->host; 16 struct inode *inode = page->mapping->host;
17 char *link = kmap(page); 17 char *link = page_address(page);
18 struct slink_front *lf; 18 struct slink_front *lf;
19 int i, j; 19 int i, j;
20 char c; 20 char c;
@@ -57,12 +57,10 @@ static int affs_symlink_readpage(struct file *file, struct page *page)
57 link[i] = '\0'; 57 link[i] = '\0';
58 affs_brelse(bh); 58 affs_brelse(bh);
59 SetPageUptodate(page); 59 SetPageUptodate(page);
60 kunmap(page);
61 unlock_page(page); 60 unlock_page(page);
62 return 0; 61 return 0;
63fail: 62fail:
64 SetPageError(page); 63 SetPageError(page);
65 kunmap(page);
66 unlock_page(page); 64 unlock_page(page);
67 return -EIO; 65 return -EIO;
68} 66}
diff --git a/fs/afs/inode.c b/fs/afs/inode.c
index e06f5a23352a..86cc7264c21c 100644
--- a/fs/afs/inode.c
+++ b/fs/afs/inode.c
@@ -56,6 +56,7 @@ static int afs_inode_map_status(struct afs_vnode *vnode, struct key *key)
56 case AFS_FTYPE_SYMLINK: 56 case AFS_FTYPE_SYMLINK:
57 inode->i_mode = S_IFLNK | vnode->status.mode; 57 inode->i_mode = S_IFLNK | vnode->status.mode;
58 inode->i_op = &page_symlink_inode_operations; 58 inode->i_op = &page_symlink_inode_operations;
59 inode_nohighmem(inode);
59 break; 60 break;
60 default: 61 default:
61 printk("kAFS: AFS vnode with undefined type\n"); 62 printk("kAFS: AFS vnode with undefined type\n");
diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c
index 1c8b0dca8b50..25250fa87086 100644
--- a/fs/befs/linuxvfs.c
+++ b/fs/befs/linuxvfs.c
@@ -397,6 +397,7 @@ static struct inode *befs_iget(struct super_block *sb, unsigned long ino)
397 } else if (S_ISLNK(inode->i_mode)) { 397 } else if (S_ISLNK(inode->i_mode)) {
398 if (befs_ino->i_flags & BEFS_LONG_SYMLINK) { 398 if (befs_ino->i_flags & BEFS_LONG_SYMLINK) {
399 inode->i_op = &page_symlink_inode_operations; 399 inode->i_op = &page_symlink_inode_operations;
400 inode_nohighmem(inode);
400 inode->i_mapping->a_ops = &befs_symlink_aops; 401 inode->i_mapping->a_ops = &befs_symlink_aops;
401 } else { 402 } else {
402 inode->i_link = befs_ino->i_data.symlink; 403 inode->i_link = befs_ino->i_data.symlink;
@@ -469,7 +470,7 @@ static int befs_symlink_readpage(struct file *unused, struct page *page)
469 struct befs_inode_info *befs_ino = BEFS_I(inode); 470 struct befs_inode_info *befs_ino = BEFS_I(inode);
470 befs_data_stream *data = &befs_ino->i_data.ds; 471 befs_data_stream *data = &befs_ino->i_data.ds;
471 befs_off_t len = data->size; 472 befs_off_t len = data->size;
472 char *link = kmap(page); 473 char *link = page_address(page);
473 474
474 if (len == 0 || len > PAGE_SIZE) { 475 if (len == 0 || len > PAGE_SIZE) {
475 befs_error(sb, "Long symlink with illegal length"); 476 befs_error(sb, "Long symlink with illegal length");
@@ -483,12 +484,10 @@ static int befs_symlink_readpage(struct file *unused, struct page *page)
483 } 484 }
484 link[len - 1] = '\0'; 485 link[len - 1] = '\0';
485 SetPageUptodate(page); 486 SetPageUptodate(page);
486 kunmap(page);
487 unlock_page(page); 487 unlock_page(page);
488 return 0; 488 return 0;
489fail: 489fail:
490 SetPageError(page); 490 SetPageError(page);
491 kunmap(page);
492 unlock_page(page); 491 unlock_page(page);
493 return -EIO; 492 return -EIO;
494} 493}
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index a70c5790f8f5..70f98bfde277 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -3774,6 +3774,7 @@ cache_acl:
3774 break; 3774 break;
3775 case S_IFLNK: 3775 case S_IFLNK:
3776 inode->i_op = &btrfs_symlink_inode_operations; 3776 inode->i_op = &btrfs_symlink_inode_operations;
3777 inode_nohighmem(inode);
3777 inode->i_mapping->a_ops = &btrfs_symlink_aops; 3778 inode->i_mapping->a_ops = &btrfs_symlink_aops;
3778 break; 3779 break;
3779 default: 3780 default:
@@ -9705,6 +9706,7 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry,
9705 btrfs_free_path(path); 9706 btrfs_free_path(path);
9706 9707
9707 inode->i_op = &btrfs_symlink_inode_operations; 9708 inode->i_op = &btrfs_symlink_inode_operations;
9709 inode_nohighmem(inode);
9708 inode->i_mapping->a_ops = &btrfs_symlink_aops; 9710 inode->i_mapping->a_ops = &btrfs_symlink_aops;
9709 inode_set_bytes(inode, name_len); 9711 inode_set_bytes(inode, name_len);
9710 btrfs_i_size_write(inode, name_len); 9712 btrfs_i_size_write(inode, name_len);
diff --git a/fs/coda/cnode.c b/fs/coda/cnode.c
index 7740b1c871c1..dd6a79ef4750 100644
--- a/fs/coda/cnode.c
+++ b/fs/coda/cnode.c
@@ -8,6 +8,7 @@
8 8
9#include <linux/coda.h> 9#include <linux/coda.h>
10#include <linux/coda_psdev.h> 10#include <linux/coda_psdev.h>
11#include <linux/pagemap.h>
11#include "coda_linux.h" 12#include "coda_linux.h"
12 13
13static inline int coda_fideq(struct CodaFid *fid1, struct CodaFid *fid2) 14static inline int coda_fideq(struct CodaFid *fid1, struct CodaFid *fid2)
@@ -35,6 +36,7 @@ static void coda_fill_inode(struct inode *inode, struct coda_vattr *attr)
35 inode->i_fop = &coda_dir_operations; 36 inode->i_fop = &coda_dir_operations;
36 } else if (S_ISLNK(inode->i_mode)) { 37 } else if (S_ISLNK(inode->i_mode)) {
37 inode->i_op = &coda_symlink_inode_operations; 38 inode->i_op = &coda_symlink_inode_operations;
39 inode_nohighmem(inode);
38 inode->i_data.a_ops = &coda_symlink_aops; 40 inode->i_data.a_ops = &coda_symlink_aops;
39 inode->i_mapping = &inode->i_data; 41 inode->i_mapping = &inode->i_data;
40 } else 42 } else
diff --git a/fs/coda/symlink.c b/fs/coda/symlink.c
index ab94ef63caef..03736e20d720 100644
--- a/fs/coda/symlink.c
+++ b/fs/coda/symlink.c
@@ -26,7 +26,7 @@ static int coda_symlink_filler(struct file *file, struct page *page)
26 int error; 26 int error;
27 struct coda_inode_info *cii; 27 struct coda_inode_info *cii;
28 unsigned int len = PAGE_SIZE; 28 unsigned int len = PAGE_SIZE;
29 char *p = kmap(page); 29 char *p = page_address(page);
30 30
31 cii = ITOC(inode); 31 cii = ITOC(inode);
32 32
@@ -34,13 +34,11 @@ static int coda_symlink_filler(struct file *file, struct page *page)
34 if (error) 34 if (error)
35 goto fail; 35 goto fail;
36 SetPageUptodate(page); 36 SetPageUptodate(page);
37 kunmap(page);
38 unlock_page(page); 37 unlock_page(page);
39 return 0; 38 return 0;
40 39
41fail: 40fail:
42 SetPageError(page); 41 SetPageError(page);
43 kunmap(page);
44 unlock_page(page); 42 unlock_page(page);
45 return error; 43 return error;
46} 44}
diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c
index 355c522f3585..b862bc219cd7 100644
--- a/fs/cramfs/inode.c
+++ b/fs/cramfs/inode.c
@@ -100,6 +100,7 @@ static struct inode *get_cramfs_inode(struct super_block *sb,
100 break; 100 break;
101 case S_IFLNK: 101 case S_IFLNK:
102 inode->i_op = &page_symlink_inode_operations; 102 inode->i_op = &page_symlink_inode_operations;
103 inode_nohighmem(inode);
103 inode->i_data.a_ops = &cramfs_aops; 104 inode->i_data.a_ops = &cramfs_aops;
104 break; 105 break;
105 default: 106 default:
diff --git a/fs/efs/inode.c b/fs/efs/inode.c
index 079d20306ee1..cdf0872382af 100644
--- a/fs/efs/inode.c
+++ b/fs/efs/inode.c
@@ -151,6 +151,7 @@ struct inode *efs_iget(struct super_block *super, unsigned long ino)
151 break; 151 break;
152 case S_IFLNK: 152 case S_IFLNK:
153 inode->i_op = &page_symlink_inode_operations; 153 inode->i_op = &page_symlink_inode_operations;
154 inode_nohighmem(inode);
154 inode->i_data.a_ops = &efs_symlink_aops; 155 inode->i_data.a_ops = &efs_symlink_aops;
155 break; 156 break;
156 case S_IFCHR: 157 case S_IFCHR:
diff --git a/fs/efs/symlink.c b/fs/efs/symlink.c
index 75117d0dac2b..4870cc82deb0 100644
--- a/fs/efs/symlink.c
+++ b/fs/efs/symlink.c
@@ -13,7 +13,7 @@
13 13
14static int efs_symlink_readpage(struct file *file, struct page *page) 14static int efs_symlink_readpage(struct file *file, struct page *page)
15{ 15{
16 char *link = kmap(page); 16 char *link = page_address(page);
17 struct buffer_head * bh; 17 struct buffer_head * bh;
18 struct inode * inode = page->mapping->host; 18 struct inode * inode = page->mapping->host;
19 efs_block_t size = inode->i_size; 19 efs_block_t size = inode->i_size;
@@ -39,12 +39,10 @@ static int efs_symlink_readpage(struct file *file, struct page *page)
39 } 39 }
40 link[size] = '\0'; 40 link[size] = '\0';
41 SetPageUptodate(page); 41 SetPageUptodate(page);
42 kunmap(page);
43 unlock_page(page); 42 unlock_page(page);
44 return 0; 43 return 0;
45fail: 44fail:
46 SetPageError(page); 45 SetPageError(page);
47 kunmap(page);
48 unlock_page(page); 46 unlock_page(page);
49 return err; 47 return err;
50} 48}
diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c
index 73c64daa0f55..d8e9c18171a9 100644
--- a/fs/exofs/inode.c
+++ b/fs/exofs/inode.c
@@ -1227,6 +1227,7 @@ struct inode *exofs_iget(struct super_block *sb, unsigned long ino)
1227 inode->i_link = (char *)oi->i_data; 1227 inode->i_link = (char *)oi->i_data;
1228 } else { 1228 } else {
1229 inode->i_op = &page_symlink_inode_operations; 1229 inode->i_op = &page_symlink_inode_operations;
1230 inode_nohighmem(inode);
1230 inode->i_mapping->a_ops = &exofs_aops; 1231 inode->i_mapping->a_ops = &exofs_aops;
1231 } 1232 }
1232 } else { 1233 } else {
diff --git a/fs/exofs/namei.c b/fs/exofs/namei.c
index 994e078da4bb..c20d77df2679 100644
--- a/fs/exofs/namei.c
+++ b/fs/exofs/namei.c
@@ -111,6 +111,7 @@ static int exofs_symlink(struct inode *dir, struct dentry *dentry,
111 if (l > sizeof(oi->i_data)) { 111 if (l > sizeof(oi->i_data)) {
112 /* slow symlink */ 112 /* slow symlink */
113 inode->i_op = &page_symlink_inode_operations; 113 inode->i_op = &page_symlink_inode_operations;
114 inode_nohighmem(inode);
114 inode->i_mapping->a_ops = &exofs_aops; 115 inode->i_mapping->a_ops = &exofs_aops;
115 memset(oi->i_data, 0, sizeof(oi->i_data)); 116 memset(oi->i_data, 0, sizeof(oi->i_data));
116 117
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c
index 0aa9bf6e6e53..338eefda70c6 100644
--- a/fs/ext2/inode.c
+++ b/fs/ext2/inode.c
@@ -1420,6 +1420,7 @@ struct inode *ext2_iget (struct super_block *sb, unsigned long ino)
1420 sizeof(ei->i_data) - 1); 1420 sizeof(ei->i_data) - 1);
1421 } else { 1421 } else {
1422 inode->i_op = &ext2_symlink_inode_operations; 1422 inode->i_op = &ext2_symlink_inode_operations;
1423 inode_nohighmem(inode);
1423 if (test_opt(inode->i_sb, NOBH)) 1424 if (test_opt(inode->i_sb, NOBH))
1424 inode->i_mapping->a_ops = &ext2_nobh_aops; 1425 inode->i_mapping->a_ops = &ext2_nobh_aops;
1425 else 1426 else
diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c
index 3267a80dbbe2..7a2be8f7f3c3 100644
--- a/fs/ext2/namei.c
+++ b/fs/ext2/namei.c
@@ -183,6 +183,7 @@ static int ext2_symlink (struct inode * dir, struct dentry * dentry,
183 if (l > sizeof (EXT2_I(inode)->i_data)) { 183 if (l > sizeof (EXT2_I(inode)->i_data)) {
184 /* slow symlink */ 184 /* slow symlink */
185 inode->i_op = &ext2_symlink_inode_operations; 185 inode->i_op = &ext2_symlink_inode_operations;
186 inode_nohighmem(inode);
186 if (test_opt(inode->i_sb, NOBH)) 187 if (test_opt(inode->i_sb, NOBH))
187 inode->i_mapping->a_ops = &ext2_nobh_aops; 188 inode->i_mapping->a_ops = &ext2_nobh_aops;
188 else 189 else
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index ea433a7f4bca..b3bd912df6bf 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -4283,6 +4283,7 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
4283 inode->i_op = &ext4_symlink_inode_operations; 4283 inode->i_op = &ext4_symlink_inode_operations;
4284 ext4_set_aops(inode); 4284 ext4_set_aops(inode);
4285 } 4285 }
4286 inode_nohighmem(inode);
4286 } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || 4287 } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) ||
4287 S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) { 4288 S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) {
4288 inode->i_op = &ext4_special_inode_operations; 4289 inode->i_op = &ext4_special_inode_operations;
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index a969ab39f302..f27e0c2598c5 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -3132,6 +3132,7 @@ static int ext4_symlink(struct inode *dir,
3132 if ((disk_link.len > EXT4_N_BLOCKS * 4)) { 3132 if ((disk_link.len > EXT4_N_BLOCKS * 4)) {
3133 if (!encryption_required) 3133 if (!encryption_required)
3134 inode->i_op = &ext4_symlink_inode_operations; 3134 inode->i_op = &ext4_symlink_inode_operations;
3135 inode_nohighmem(inode);
3135 ext4_set_aops(inode); 3136 ext4_set_aops(inode);
3136 /* 3137 /*
3137 * We cannot call page_symlink() with transaction started 3138 * We cannot call page_symlink() with transaction started
diff --git a/fs/ext4/symlink.c b/fs/ext4/symlink.c
index abe2401ce405..0e6dc44c5ebf 100644
--- a/fs/ext4/symlink.c
+++ b/fs/ext4/symlink.c
@@ -45,7 +45,7 @@ static const char *ext4_encrypted_follow_link(struct dentry *dentry, void **cook
45 cpage = read_mapping_page(inode->i_mapping, 0, NULL); 45 cpage = read_mapping_page(inode->i_mapping, 0, NULL);
46 if (IS_ERR(cpage)) 46 if (IS_ERR(cpage))
47 return ERR_CAST(cpage); 47 return ERR_CAST(cpage);
48 caddr = kmap(cpage); 48 caddr = page_address(cpage);
49 caddr[size] = 0; 49 caddr[size] = 0;
50 } 50 }
51 51
@@ -75,16 +75,12 @@ static const char *ext4_encrypted_follow_link(struct dentry *dentry, void **cook
75 /* Null-terminate the name */ 75 /* Null-terminate the name */
76 if (res <= plen) 76 if (res <= plen)
77 paddr[res] = '\0'; 77 paddr[res] = '\0';
78 if (cpage) { 78 if (cpage)
79 kunmap(cpage);
80 page_cache_release(cpage); 79 page_cache_release(cpage);
81 }
82 return *cookie = paddr; 80 return *cookie = paddr;
83errout: 81errout:
84 if (cpage) { 82 if (cpage)
85 kunmap(cpage);
86 page_cache_release(cpage); 83 page_cache_release(cpage);
87 }
88 kfree(paddr); 84 kfree(paddr);
89 return ERR_PTR(res); 85 return ERR_PTR(res);
90} 86}
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 97e20decacb4..5528801a5baf 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -202,6 +202,7 @@ make_now:
202 inode->i_op = &f2fs_encrypted_symlink_inode_operations; 202 inode->i_op = &f2fs_encrypted_symlink_inode_operations;
203 else 203 else
204 inode->i_op = &f2fs_symlink_inode_operations; 204 inode->i_op = &f2fs_symlink_inode_operations;
205 inode_nohighmem(inode);
205 inode->i_mapping->a_ops = &f2fs_dblock_aops; 206 inode->i_mapping->a_ops = &f2fs_dblock_aops;
206 } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || 207 } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) ||
207 S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) { 208 S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) {
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 2c32110f9fc0..484df6850747 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -351,6 +351,7 @@ static int f2fs_symlink(struct inode *dir, struct dentry *dentry,
351 inode->i_op = &f2fs_encrypted_symlink_inode_operations; 351 inode->i_op = &f2fs_encrypted_symlink_inode_operations;
352 else 352 else
353 inode->i_op = &f2fs_symlink_inode_operations; 353 inode->i_op = &f2fs_symlink_inode_operations;
354 inode_nohighmem(inode);
354 inode->i_mapping->a_ops = &f2fs_dblock_aops; 355 inode->i_mapping->a_ops = &f2fs_dblock_aops;
355 356
356 f2fs_lock_op(sbi); 357 f2fs_lock_op(sbi);
@@ -942,7 +943,7 @@ static const char *f2fs_encrypted_follow_link(struct dentry *dentry, void **cook
942 cpage = read_mapping_page(inode->i_mapping, 0, NULL); 943 cpage = read_mapping_page(inode->i_mapping, 0, NULL);
943 if (IS_ERR(cpage)) 944 if (IS_ERR(cpage))
944 return ERR_CAST(cpage); 945 return ERR_CAST(cpage);
945 caddr = kmap(cpage); 946 caddr = page_address(cpage);
946 caddr[size] = 0; 947 caddr[size] = 0;
947 948
948 /* Symlink is encrypted */ 949 /* Symlink is encrypted */
@@ -982,13 +983,11 @@ static const char *f2fs_encrypted_follow_link(struct dentry *dentry, void **cook
982 /* Null-terminate the name */ 983 /* Null-terminate the name */
983 paddr[res] = '\0'; 984 paddr[res] = '\0';
984 985
985 kunmap(cpage);
986 page_cache_release(cpage); 986 page_cache_release(cpage);
987 return *cookie = paddr; 987 return *cookie = paddr;
988errout: 988errout:
989 kfree(cstr.name); 989 kfree(cstr.name);
990 f2fs_fname_crypto_free_buffer(&pstr); 990 f2fs_fname_crypto_free_buffer(&pstr);
991 kunmap(cpage);
992 page_cache_release(cpage); 991 page_cache_release(cpage);
993 return ERR_PTR(res); 992 return ERR_PTR(res);
994} 993}
diff --git a/fs/freevxfs/vxfs_inode.c b/fs/freevxfs/vxfs_inode.c
index ef73ed674a27..3e2ccade61ed 100644
--- a/fs/freevxfs/vxfs_inode.c
+++ b/fs/freevxfs/vxfs_inode.c
@@ -326,6 +326,7 @@ vxfs_iget(struct super_block *sbp, ino_t ino)
326 } else if (S_ISLNK(ip->i_mode)) { 326 } else if (S_ISLNK(ip->i_mode)) {
327 if (!VXFS_ISIMMED(vip)) { 327 if (!VXFS_ISIMMED(vip)) {
328 ip->i_op = &page_symlink_inode_operations; 328 ip->i_op = &page_symlink_inode_operations;
329 inode_nohighmem(ip);
329 ip->i_mapping->a_ops = &vxfs_aops; 330 ip->i_mapping->a_ops = &vxfs_aops;
330 } else { 331 } else {
331 ip->i_op = &simple_symlink_inode_operations; 332 ip->i_op = &simple_symlink_inode_operations;
diff --git a/fs/hfsplus/inode.c b/fs/hfsplus/inode.c
index 6dd107d7421e..19b33f8151f1 100644
--- a/fs/hfsplus/inode.c
+++ b/fs/hfsplus/inode.c
@@ -403,6 +403,7 @@ struct inode *hfsplus_new_inode(struct super_block *sb, umode_t mode)
403 } else if (S_ISLNK(inode->i_mode)) { 403 } else if (S_ISLNK(inode->i_mode)) {
404 sbi->file_count++; 404 sbi->file_count++;
405 inode->i_op = &page_symlink_inode_operations; 405 inode->i_op = &page_symlink_inode_operations;
406 inode_nohighmem(inode);
406 inode->i_mapping->a_ops = &hfsplus_aops; 407 inode->i_mapping->a_ops = &hfsplus_aops;
407 hip->clump_blocks = 1; 408 hip->clump_blocks = 1;
408 } else 409 } else
@@ -526,6 +527,7 @@ int hfsplus_cat_read_inode(struct inode *inode, struct hfs_find_data *fd)
526 inode->i_mapping->a_ops = &hfsplus_aops; 527 inode->i_mapping->a_ops = &hfsplus_aops;
527 } else if (S_ISLNK(inode->i_mode)) { 528 } else if (S_ISLNK(inode->i_mode)) {
528 inode->i_op = &page_symlink_inode_operations; 529 inode->i_op = &page_symlink_inode_operations;
530 inode_nohighmem(inode);
529 inode->i_mapping->a_ops = &hfsplus_aops; 531 inode->i_mapping->a_ops = &hfsplus_aops;
530 } else { 532 } else {
531 init_special_inode(inode, inode->i_mode, 533 init_special_inode(inode, inode->i_mode,
diff --git a/fs/hpfs/inode.c b/fs/hpfs/inode.c
index 933c73780813..1f3c6d76200b 100644
--- a/fs/hpfs/inode.c
+++ b/fs/hpfs/inode.c
@@ -77,6 +77,7 @@ void hpfs_read_inode(struct inode *i)
77 kfree(ea); 77 kfree(ea);
78 i->i_mode = S_IFLNK | 0777; 78 i->i_mode = S_IFLNK | 0777;
79 i->i_op = &page_symlink_inode_operations; 79 i->i_op = &page_symlink_inode_operations;
80 inode_nohighmem(i);
80 i->i_data.a_ops = &hpfs_symlink_aops; 81 i->i_data.a_ops = &hpfs_symlink_aops;
81 set_nlink(i, 1); 82 set_nlink(i, 1);
82 i->i_size = ea_size; 83 i->i_size = ea_size;
diff --git a/fs/hpfs/namei.c b/fs/hpfs/namei.c
index ae4d5a1fa4c9..506765afa1a3 100644
--- a/fs/hpfs/namei.c
+++ b/fs/hpfs/namei.c
@@ -332,6 +332,7 @@ static int hpfs_symlink(struct inode *dir, struct dentry *dentry, const char *sy
332 result->i_blocks = 1; 332 result->i_blocks = 1;
333 set_nlink(result, 1); 333 set_nlink(result, 1);
334 result->i_size = strlen(symlink); 334 result->i_size = strlen(symlink);
335 inode_nohighmem(result);
335 result->i_op = &page_symlink_inode_operations; 336 result->i_op = &page_symlink_inode_operations;
336 result->i_data.a_ops = &hpfs_symlink_aops; 337 result->i_data.a_ops = &hpfs_symlink_aops;
337 338
@@ -500,7 +501,7 @@ out:
500 501
501static int hpfs_symlink_readpage(struct file *file, struct page *page) 502static int hpfs_symlink_readpage(struct file *file, struct page *page)
502{ 503{
503 char *link = kmap(page); 504 char *link = page_address(page);
504 struct inode *i = page->mapping->host; 505 struct inode *i = page->mapping->host;
505 struct fnode *fnode; 506 struct fnode *fnode;
506 struct buffer_head *bh; 507 struct buffer_head *bh;
@@ -516,14 +517,12 @@ static int hpfs_symlink_readpage(struct file *file, struct page *page)
516 goto fail; 517 goto fail;
517 hpfs_unlock(i->i_sb); 518 hpfs_unlock(i->i_sb);
518 SetPageUptodate(page); 519 SetPageUptodate(page);
519 kunmap(page);
520 unlock_page(page); 520 unlock_page(page);
521 return 0; 521 return 0;
522 522
523fail: 523fail:
524 hpfs_unlock(i->i_sb); 524 hpfs_unlock(i->i_sb);
525 SetPageError(page); 525 SetPageError(page);
526 kunmap(page);
527 unlock_page(page); 526 unlock_page(page);
528 return err; 527 return err;
529} 528}
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
index de4bdfac0cec..d8f51ee8126b 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -760,6 +760,7 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb,
760 break; 760 break;
761 case S_IFLNK: 761 case S_IFLNK:
762 inode->i_op = &page_symlink_inode_operations; 762 inode->i_op = &page_symlink_inode_operations;
763 inode_nohighmem(inode);
763 break; 764 break;
764 } 765 }
765 lockdep_annotate_inode_mutex_key(inode); 766 lockdep_annotate_inode_mutex_key(inode);
diff --git a/fs/inode.c b/fs/inode.c
index 1be5f9003eb3..5bb85a064ce7 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -2028,3 +2028,9 @@ void inode_set_flags(struct inode *inode, unsigned int flags,
2028 new_flags) != old_flags)); 2028 new_flags) != old_flags));
2029} 2029}
2030EXPORT_SYMBOL(inode_set_flags); 2030EXPORT_SYMBOL(inode_set_flags);
2031
2032void inode_nohighmem(struct inode *inode)
2033{
2034 mapping_set_gfp_mask(inode->i_mapping, GFP_USER);
2035}
2036EXPORT_SYMBOL(inode_nohighmem);
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
index d67a16f2a45d..61abdc4920da 100644
--- a/fs/isofs/inode.c
+++ b/fs/isofs/inode.c
@@ -1417,6 +1417,7 @@ static int isofs_read_inode(struct inode *inode, int relocated)
1417 inode->i_fop = &isofs_dir_operations; 1417 inode->i_fop = &isofs_dir_operations;
1418 } else if (S_ISLNK(inode->i_mode)) { 1418 } else if (S_ISLNK(inode->i_mode)) {
1419 inode->i_op = &page_symlink_inode_operations; 1419 inode->i_op = &page_symlink_inode_operations;
1420 inode_nohighmem(inode);
1420 inode->i_data.a_ops = &isofs_symlink_aops; 1421 inode->i_data.a_ops = &isofs_symlink_aops;
1421 } else 1422 } else
1422 /* XXX - parse_rock_ridge_inode() had already set i_rdev. */ 1423 /* XXX - parse_rock_ridge_inode() had already set i_rdev. */
diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c
index 735d7522a3a9..5384ceb35b1c 100644
--- a/fs/isofs/rock.c
+++ b/fs/isofs/rock.c
@@ -687,7 +687,7 @@ static int rock_ridge_symlink_readpage(struct file *file, struct page *page)
687 struct inode *inode = page->mapping->host; 687 struct inode *inode = page->mapping->host;
688 struct iso_inode_info *ei = ISOFS_I(inode); 688 struct iso_inode_info *ei = ISOFS_I(inode);
689 struct isofs_sb_info *sbi = ISOFS_SB(inode->i_sb); 689 struct isofs_sb_info *sbi = ISOFS_SB(inode->i_sb);
690 char *link = kmap(page); 690 char *link = page_address(page);
691 unsigned long bufsize = ISOFS_BUFFER_SIZE(inode); 691 unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);
692 struct buffer_head *bh; 692 struct buffer_head *bh;
693 char *rpnt = link; 693 char *rpnt = link;
@@ -774,7 +774,6 @@ repeat:
774 brelse(bh); 774 brelse(bh);
775 *rpnt = '\0'; 775 *rpnt = '\0';
776 SetPageUptodate(page); 776 SetPageUptodate(page);
777 kunmap(page);
778 unlock_page(page); 777 unlock_page(page);
779 return 0; 778 return 0;
780 779
@@ -791,7 +790,6 @@ fail:
791 brelse(bh); 790 brelse(bh);
792error: 791error:
793 SetPageError(page); 792 SetPageError(page);
794 kunmap(page);
795 unlock_page(page); 793 unlock_page(page);
796 return -EIO; 794 return -EIO;
797} 795}
diff --git a/fs/jfs/inode.c b/fs/jfs/inode.c
index 41aa3ca6a6a4..9d9bae63ae2a 100644
--- a/fs/jfs/inode.c
+++ b/fs/jfs/inode.c
@@ -60,6 +60,7 @@ struct inode *jfs_iget(struct super_block *sb, unsigned long ino)
60 } else if (S_ISLNK(inode->i_mode)) { 60 } else if (S_ISLNK(inode->i_mode)) {
61 if (inode->i_size >= IDATASIZE) { 61 if (inode->i_size >= IDATASIZE) {
62 inode->i_op = &page_symlink_inode_operations; 62 inode->i_op = &page_symlink_inode_operations;
63 inode_nohighmem(inode);
63 inode->i_mapping->a_ops = &jfs_aops; 64 inode->i_mapping->a_ops = &jfs_aops;
64 } else { 65 } else {
65 inode->i_op = &jfs_fast_symlink_inode_operations; 66 inode->i_op = &jfs_fast_symlink_inode_operations;
diff --git a/fs/jfs/namei.c b/fs/jfs/namei.c
index 9d7551f5c32a..701f89370de7 100644
--- a/fs/jfs/namei.c
+++ b/fs/jfs/namei.c
@@ -983,6 +983,7 @@ static int jfs_symlink(struct inode *dip, struct dentry *dentry,
983 jfs_info("jfs_symlink: allocate extent ip:0x%p", ip); 983 jfs_info("jfs_symlink: allocate extent ip:0x%p", ip);
984 984
985 ip->i_op = &jfs_symlink_inode_operations; 985 ip->i_op = &jfs_symlink_inode_operations;
986 inode_nohighmem(ip);
986 ip->i_mapping->a_ops = &jfs_aops; 987 ip->i_mapping->a_ops = &jfs_aops;
987 988
988 /* 989 /*
diff --git a/fs/logfs/dir.c b/fs/logfs/dir.c
index 99944a406a29..542468e9bfb4 100644
--- a/fs/logfs/dir.c
+++ b/fs/logfs/dir.c
@@ -529,6 +529,7 @@ static int logfs_symlink(struct inode *dir, struct dentry *dentry,
529 return PTR_ERR(inode); 529 return PTR_ERR(inode);
530 530
531 inode->i_op = &page_symlink_inode_operations; 531 inode->i_op = &page_symlink_inode_operations;
532 inode_nohighmem(inode);
532 inode->i_mapping->a_ops = &logfs_reg_aops; 533 inode->i_mapping->a_ops = &logfs_reg_aops;
533 534
534 return __logfs_create(dir, dentry, inode, target, destlen); 535 return __logfs_create(dir, dentry, inode, target, destlen);
diff --git a/fs/logfs/inode.c b/fs/logfs/inode.c
index 06baa926a7a0..0fce46d62b9c 100644
--- a/fs/logfs/inode.c
+++ b/fs/logfs/inode.c
@@ -65,6 +65,7 @@ static void logfs_inode_setops(struct inode *inode)
65 break; 65 break;
66 case S_IFLNK: 66 case S_IFLNK:
67 inode->i_op = &page_symlink_inode_operations; 67 inode->i_op = &page_symlink_inode_operations;
68 inode_nohighmem(inode);
68 inode->i_mapping->a_ops = &logfs_reg_aops; 69 inode->i_mapping->a_ops = &logfs_reg_aops;
69 break; 70 break;
70 case S_IFSOCK: /* fall through */ 71 case S_IFSOCK: /* fall through */
diff --git a/fs/minix/inode.c b/fs/minix/inode.c
index 086cd0a61e80..67a23bfd7303 100644
--- a/fs/minix/inode.c
+++ b/fs/minix/inode.c
@@ -452,6 +452,7 @@ void minix_set_inode(struct inode *inode, dev_t rdev)
452 inode->i_mapping->a_ops = &minix_aops; 452 inode->i_mapping->a_ops = &minix_aops;
453 } else if (S_ISLNK(inode->i_mode)) { 453 } else if (S_ISLNK(inode->i_mode)) {
454 inode->i_op = &minix_symlink_inode_operations; 454 inode->i_op = &minix_symlink_inode_operations;
455 inode_nohighmem(inode);
455 inode->i_mapping->a_ops = &minix_aops; 456 inode->i_mapping->a_ops = &minix_aops;
456 } else 457 } else
457 init_special_inode(inode, inode->i_mode, rdev); 458 init_special_inode(inode, inode->i_mode, rdev);
diff --git a/fs/namei.c b/fs/namei.c
index 4bae5cbfaa85..2808958e6c67 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -4527,7 +4527,8 @@ static const char *page_getlink(struct dentry * dentry, void **cookie)
4527 if (IS_ERR(page)) 4527 if (IS_ERR(page))
4528 return (char*)page; 4528 return (char*)page;
4529 *cookie = page; 4529 *cookie = page;
4530 kaddr = kmap(page); 4530 BUG_ON(mapping_gfp_mask(mapping) & __GFP_HIGHMEM);
4531 kaddr = page_address(page);
4531 nd_terminate_link(kaddr, dentry->d_inode->i_size, PAGE_SIZE - 1); 4532 nd_terminate_link(kaddr, dentry->d_inode->i_size, PAGE_SIZE - 1);
4532 return kaddr; 4533 return kaddr;
4533} 4534}
@@ -4541,7 +4542,6 @@ EXPORT_SYMBOL(page_follow_link_light);
4541void page_put_link(struct inode *unused, void *cookie) 4542void page_put_link(struct inode *unused, void *cookie)
4542{ 4543{
4543 struct page *page = cookie; 4544 struct page *page = cookie;
4544 kunmap(page);
4545 page_cache_release(page); 4545 page_cache_release(page);
4546} 4546}
4547EXPORT_SYMBOL(page_put_link); 4547EXPORT_SYMBOL(page_put_link);
@@ -4565,7 +4565,6 @@ int __page_symlink(struct inode *inode, const char *symname, int len, int nofs)
4565 struct page *page; 4565 struct page *page;
4566 void *fsdata; 4566 void *fsdata;
4567 int err; 4567 int err;
4568 char *kaddr;
4569 unsigned int flags = AOP_FLAG_UNINTERRUPTIBLE; 4568 unsigned int flags = AOP_FLAG_UNINTERRUPTIBLE;
4570 if (nofs) 4569 if (nofs)
4571 flags |= AOP_FLAG_NOFS; 4570 flags |= AOP_FLAG_NOFS;
@@ -4576,9 +4575,7 @@ retry:
4576 if (err) 4575 if (err)
4577 goto fail; 4576 goto fail;
4578 4577
4579 kaddr = kmap_atomic(page); 4578 memcpy(page_address(page), symname, len-1);
4580 memcpy(kaddr, symname, len-1);
4581 kunmap_atomic(kaddr);
4582 4579
4583 err = pagecache_write_end(NULL, mapping, 0, len-1, len-1, 4580 err = pagecache_write_end(NULL, mapping, 0, len-1, len-1,
4584 page, fsdata); 4581 page, fsdata);
diff --git a/fs/ncpfs/inode.c b/fs/ncpfs/inode.c
index 9605a2f63549..bb856f7e05fd 100644
--- a/fs/ncpfs/inode.c
+++ b/fs/ncpfs/inode.c
@@ -283,6 +283,7 @@ ncp_iget(struct super_block *sb, struct ncp_entry_info *info)
283#if defined(CONFIG_NCPFS_EXTRAS) || defined(CONFIG_NCPFS_NFS_NS) 283#if defined(CONFIG_NCPFS_EXTRAS) || defined(CONFIG_NCPFS_NFS_NS)
284 } else if (S_ISLNK(inode->i_mode)) { 284 } else if (S_ISLNK(inode->i_mode)) {
285 inode->i_op = &ncp_symlink_inode_operations; 285 inode->i_op = &ncp_symlink_inode_operations;
286 inode_nohighmem(inode);
286 inode->i_data.a_ops = &ncp_symlink_aops; 287 inode->i_data.a_ops = &ncp_symlink_aops;
287#endif 288#endif
288 } else { 289 } else {
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 31b0a52223a7..ae9aa0b8155c 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -408,9 +408,10 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr, st
408 inode->i_fop = NULL; 408 inode->i_fop = NULL;
409 inode->i_flags |= S_AUTOMOUNT; 409 inode->i_flags |= S_AUTOMOUNT;
410 } 410 }
411 } else if (S_ISLNK(inode->i_mode)) 411 } else if (S_ISLNK(inode->i_mode)) {
412 inode->i_op = &nfs_symlink_inode_operations; 412 inode->i_op = &nfs_symlink_inode_operations;
413 else 413 inode_nohighmem(inode);
414 } else
414 init_special_inode(inode, inode->i_mode, fattr->rdev); 415 init_special_inode(inode, inode->i_mode, fattr->rdev);
415 416
416 memset(&inode->i_atime, 0, sizeof(inode->i_atime)); 417 memset(&inode->i_atime, 0, sizeof(inode->i_atime));
diff --git a/fs/nfs/symlink.c b/fs/nfs/symlink.c
index b6de433da5db..abd93bf015d6 100644
--- a/fs/nfs/symlink.c
+++ b/fs/nfs/symlink.c
@@ -56,7 +56,7 @@ static const char *nfs_follow_link(struct dentry *dentry, void **cookie)
56 if (IS_ERR(page)) 56 if (IS_ERR(page))
57 return ERR_CAST(page); 57 return ERR_CAST(page);
58 *cookie = page; 58 *cookie = page;
59 return kmap(page); 59 return page_address(page);
60} 60}
61 61
62/* 62/*
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
index ac2f64943ff4..10b22527a617 100644
--- a/fs/nilfs2/inode.c
+++ b/fs/nilfs2/inode.c
@@ -510,6 +510,7 @@ static int __nilfs_read_inode(struct super_block *sb,
510 inode->i_mapping->a_ops = &nilfs_aops; 510 inode->i_mapping->a_ops = &nilfs_aops;
511 } else if (S_ISLNK(inode->i_mode)) { 511 } else if (S_ISLNK(inode->i_mode)) {
512 inode->i_op = &nilfs_symlink_inode_operations; 512 inode->i_op = &nilfs_symlink_inode_operations;
513 inode_nohighmem(inode);
513 inode->i_mapping->a_ops = &nilfs_aops; 514 inode->i_mapping->a_ops = &nilfs_aops;
514 } else { 515 } else {
515 inode->i_op = &nilfs_special_inode_operations; 516 inode->i_op = &nilfs_special_inode_operations;
diff --git a/fs/nilfs2/namei.c b/fs/nilfs2/namei.c
index c9a1a491aa91..90b3ba960b9b 100644
--- a/fs/nilfs2/namei.c
+++ b/fs/nilfs2/namei.c
@@ -161,6 +161,7 @@ static int nilfs_symlink(struct inode *dir, struct dentry *dentry,
161 161
162 /* slow symlink */ 162 /* slow symlink */
163 inode->i_op = &nilfs_symlink_inode_operations; 163 inode->i_op = &nilfs_symlink_inode_operations;
164 inode_nohighmem(inode);
164 inode->i_mapping->a_ops = &nilfs_aops; 165 inode->i_mapping->a_ops = &nilfs_aops;
165 err = page_symlink(inode, symname, l); 166 err = page_symlink(inode, symname, l);
166 if (err) 167 if (err)
diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c
index 8f87e05ee25d..97a563bab9a8 100644
--- a/fs/ocfs2/inode.c
+++ b/fs/ocfs2/inode.c
@@ -361,6 +361,7 @@ void ocfs2_populate_inode(struct inode *inode, struct ocfs2_dinode *fe,
361 break; 361 break;
362 case S_IFLNK: 362 case S_IFLNK:
363 inode->i_op = &ocfs2_symlink_inode_operations; 363 inode->i_op = &ocfs2_symlink_inode_operations;
364 inode_nohighmem(inode);
364 i_size_write(inode, le64_to_cpu(fe->i_size)); 365 i_size_write(inode, le64_to_cpu(fe->i_size));
365 break; 366 break;
366 default: 367 default:
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
index a03f6f433075..2efe8afc82c5 100644
--- a/fs/ocfs2/namei.c
+++ b/fs/ocfs2/namei.c
@@ -1960,6 +1960,7 @@ static int ocfs2_symlink(struct inode *dir,
1960 inode->i_rdev = 0; 1960 inode->i_rdev = 0;
1961 newsize = l - 1; 1961 newsize = l - 1;
1962 inode->i_op = &ocfs2_symlink_inode_operations; 1962 inode->i_op = &ocfs2_symlink_inode_operations;
1963 inode_nohighmem(inode);
1963 if (l > ocfs2_fast_symlink_chars(sb)) { 1964 if (l > ocfs2_fast_symlink_chars(sb)) {
1964 u32 offset = 0; 1965 u32 offset = 0;
1965 1966
diff --git a/fs/qnx4/inode.c b/fs/qnx4/inode.c
index c4bcb778886e..f37b3deb01b4 100644
--- a/fs/qnx4/inode.c
+++ b/fs/qnx4/inode.c
@@ -316,6 +316,7 @@ struct inode *qnx4_iget(struct super_block *sb, unsigned long ino)
316 inode->i_fop = &qnx4_dir_operations; 316 inode->i_fop = &qnx4_dir_operations;
317 } else if (S_ISLNK(inode->i_mode)) { 317 } else if (S_ISLNK(inode->i_mode)) {
318 inode->i_op = &page_symlink_inode_operations; 318 inode->i_op = &page_symlink_inode_operations;
319 inode_nohighmem(inode);
319 inode->i_mapping->a_ops = &qnx4_aops; 320 inode->i_mapping->a_ops = &qnx4_aops;
320 qnx4_i(inode)->mmu_private = inode->i_size; 321 qnx4_i(inode)->mmu_private = inode->i_size;
321 } else { 322 } else {
diff --git a/fs/qnx6/inode.c b/fs/qnx6/inode.c
index 32d2e1a9774c..9728b5499e1d 100644
--- a/fs/qnx6/inode.c
+++ b/fs/qnx6/inode.c
@@ -582,6 +582,7 @@ struct inode *qnx6_iget(struct super_block *sb, unsigned ino)
582 inode->i_mapping->a_ops = &qnx6_aops; 582 inode->i_mapping->a_ops = &qnx6_aops;
583 } else if (S_ISLNK(inode->i_mode)) { 583 } else if (S_ISLNK(inode->i_mode)) {
584 inode->i_op = &page_symlink_inode_operations; 584 inode->i_op = &page_symlink_inode_operations;
585 inode_nohighmem(inode);
585 inode->i_mapping->a_ops = &qnx6_aops; 586 inode->i_mapping->a_ops = &qnx6_aops;
586 } else 587 } else
587 init_special_inode(inode, inode->i_mode, 0); 588 init_special_inode(inode, inode->i_mode, 0);
diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c
index 889d558b4e05..38981b037524 100644
--- a/fs/ramfs/inode.c
+++ b/fs/ramfs/inode.c
@@ -79,6 +79,7 @@ struct inode *ramfs_get_inode(struct super_block *sb,
79 break; 79 break;
80 case S_IFLNK: 80 case S_IFLNK:
81 inode->i_op = &page_symlink_inode_operations; 81 inode->i_op = &page_symlink_inode_operations;
82 inode_nohighmem(inode);
82 break; 83 break;
83 } 84 }
84 } 85 }
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
index 3d8e7e671d5b..ae9e5b308cf9 100644
--- a/fs/reiserfs/inode.c
+++ b/fs/reiserfs/inode.c
@@ -1361,6 +1361,7 @@ static void init_inode(struct inode *inode, struct treepath *path)
1361 inode->i_fop = &reiserfs_dir_operations; 1361 inode->i_fop = &reiserfs_dir_operations;
1362 } else if (S_ISLNK(inode->i_mode)) { 1362 } else if (S_ISLNK(inode->i_mode)) {
1363 inode->i_op = &reiserfs_symlink_inode_operations; 1363 inode->i_op = &reiserfs_symlink_inode_operations;
1364 inode_nohighmem(inode);
1364 inode->i_mapping->a_ops = &reiserfs_address_space_operations; 1365 inode->i_mapping->a_ops = &reiserfs_address_space_operations;
1365 } else { 1366 } else {
1366 inode->i_blocks = 0; 1367 inode->i_blocks = 0;
diff --git a/fs/reiserfs/namei.c b/fs/reiserfs/namei.c
index 47f96988fdd4..4fc2326fac03 100644
--- a/fs/reiserfs/namei.c
+++ b/fs/reiserfs/namei.c
@@ -1170,6 +1170,7 @@ static int reiserfs_symlink(struct inode *parent_dir,
1170 reiserfs_update_inode_transaction(parent_dir); 1170 reiserfs_update_inode_transaction(parent_dir);
1171 1171
1172 inode->i_op = &reiserfs_symlink_inode_operations; 1172 inode->i_op = &reiserfs_symlink_inode_operations;
1173 inode_nohighmem(inode);
1173 inode->i_mapping->a_ops = &reiserfs_address_space_operations; 1174 inode->i_mapping->a_ops = &reiserfs_address_space_operations;
1174 1175
1175 retval = reiserfs_add_entry(&th, parent_dir, dentry->d_name.name, 1176 retval = reiserfs_add_entry(&th, parent_dir, dentry->d_name.name,
diff --git a/fs/romfs/super.c b/fs/romfs/super.c
index 268733cda397..bb894e78a821 100644
--- a/fs/romfs/super.c
+++ b/fs/romfs/super.c
@@ -360,6 +360,7 @@ static struct inode *romfs_iget(struct super_block *sb, unsigned long pos)
360 break; 360 break;
361 case ROMFH_SYM: 361 case ROMFH_SYM:
362 i->i_op = &page_symlink_inode_operations; 362 i->i_op = &page_symlink_inode_operations;
363 inode_nohighmem(i);
363 i->i_data.a_ops = &romfs_aops; 364 i->i_data.a_ops = &romfs_aops;
364 mode |= S_IRWXUGO; 365 mode |= S_IRWXUGO;
365 break; 366 break;
diff --git a/fs/squashfs/inode.c b/fs/squashfs/inode.c
index a1ce5ce60632..0927b1e80ab6 100644
--- a/fs/squashfs/inode.c
+++ b/fs/squashfs/inode.c
@@ -41,6 +41,7 @@
41#include <linux/fs.h> 41#include <linux/fs.h>
42#include <linux/vfs.h> 42#include <linux/vfs.h>
43#include <linux/xattr.h> 43#include <linux/xattr.h>
44#include <linux/pagemap.h>
44 45
45#include "squashfs_fs.h" 46#include "squashfs_fs.h"
46#include "squashfs_fs_sb.h" 47#include "squashfs_fs_sb.h"
@@ -291,6 +292,7 @@ int squashfs_read_inode(struct inode *inode, long long ino)
291 set_nlink(inode, le32_to_cpu(sqsh_ino->nlink)); 292 set_nlink(inode, le32_to_cpu(sqsh_ino->nlink));
292 inode->i_size = le32_to_cpu(sqsh_ino->symlink_size); 293 inode->i_size = le32_to_cpu(sqsh_ino->symlink_size);
293 inode->i_op = &squashfs_symlink_inode_ops; 294 inode->i_op = &squashfs_symlink_inode_ops;
295 inode_nohighmem(inode);
294 inode->i_data.a_ops = &squashfs_symlink_aops; 296 inode->i_data.a_ops = &squashfs_symlink_aops;
295 inode->i_mode |= S_IFLNK; 297 inode->i_mode |= S_IFLNK;
296 squashfs_i(inode)->start = block; 298 squashfs_i(inode)->start = block;
diff --git a/fs/sysv/inode.c b/fs/sysv/inode.c
index 02fa1dcc5969..ef8bcdb80aca 100644
--- a/fs/sysv/inode.c
+++ b/fs/sysv/inode.c
@@ -163,6 +163,7 @@ void sysv_set_inode(struct inode *inode, dev_t rdev)
163 inode->i_mapping->a_ops = &sysv_aops; 163 inode->i_mapping->a_ops = &sysv_aops;
164 } else if (S_ISLNK(inode->i_mode)) { 164 } else if (S_ISLNK(inode->i_mode)) {
165 inode->i_op = &sysv_symlink_inode_operations; 165 inode->i_op = &sysv_symlink_inode_operations;
166 inode_nohighmem(inode);
166 inode->i_mapping->a_ops = &sysv_aops; 167 inode->i_mapping->a_ops = &sysv_aops;
167 } else 168 } else
168 init_special_inode(inode, inode->i_mode, rdev); 169 init_special_inode(inode, inode->i_mode, rdev);
diff --git a/fs/udf/inode.c b/fs/udf/inode.c
index 8675c2b53a71..055746350d16 100644
--- a/fs/udf/inode.c
+++ b/fs/udf/inode.c
@@ -1541,6 +1541,7 @@ reread:
1541 case ICBTAG_FILE_TYPE_SYMLINK: 1541 case ICBTAG_FILE_TYPE_SYMLINK:
1542 inode->i_data.a_ops = &udf_symlink_aops; 1542 inode->i_data.a_ops = &udf_symlink_aops;
1543 inode->i_op = &page_symlink_inode_operations; 1543 inode->i_op = &page_symlink_inode_operations;
1544 inode_nohighmem(inode);
1544 inode->i_mode = S_IFLNK | S_IRWXUGO; 1545 inode->i_mode = S_IFLNK | S_IRWXUGO;
1545 break; 1546 break;
1546 case ICBTAG_FILE_TYPE_MAIN: 1547 case ICBTAG_FILE_TYPE_MAIN:
diff --git a/fs/udf/namei.c b/fs/udf/namei.c
index d0e6de1d148c..42eafb91f7ff 100644
--- a/fs/udf/namei.c
+++ b/fs/udf/namei.c
@@ -922,6 +922,7 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry,
922 922
923 inode->i_data.a_ops = &udf_symlink_aops; 923 inode->i_data.a_ops = &udf_symlink_aops;
924 inode->i_op = &page_symlink_inode_operations; 924 inode->i_op = &page_symlink_inode_operations;
925 inode_nohighmem(inode);
925 926
926 if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) { 927 if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) {
927 struct kernel_lb_addr eloc; 928 struct kernel_lb_addr eloc;
diff --git a/fs/udf/symlink.c b/fs/udf/symlink.c
index 862535b3ba58..8d619773056b 100644
--- a/fs/udf/symlink.c
+++ b/fs/udf/symlink.c
@@ -107,7 +107,7 @@ static int udf_symlink_filler(struct file *file, struct page *page)
107 struct buffer_head *bh = NULL; 107 struct buffer_head *bh = NULL;
108 unsigned char *symlink; 108 unsigned char *symlink;
109 int err; 109 int err;
110 unsigned char *p = kmap(page); 110 unsigned char *p = page_address(page);
111 struct udf_inode_info *iinfo; 111 struct udf_inode_info *iinfo;
112 uint32_t pos; 112 uint32_t pos;
113 113
@@ -141,7 +141,6 @@ static int udf_symlink_filler(struct file *file, struct page *page)
141 141
142 up_read(&iinfo->i_data_sem); 142 up_read(&iinfo->i_data_sem);
143 SetPageUptodate(page); 143 SetPageUptodate(page);
144 kunmap(page);
145 unlock_page(page); 144 unlock_page(page);
146 return 0; 145 return 0;
147 146
@@ -149,7 +148,6 @@ out_unlock_inode:
149 up_read(&iinfo->i_data_sem); 148 up_read(&iinfo->i_data_sem);
150 SetPageError(page); 149 SetPageError(page);
151out_unmap: 150out_unmap:
152 kunmap(page);
153 unlock_page(page); 151 unlock_page(page);
154 return err; 152 return err;
155} 153}
diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c
index 737160a7b819..d897e169ab9c 100644
--- a/fs/ufs/inode.c
+++ b/fs/ufs/inode.c
@@ -533,6 +533,7 @@ static void ufs_set_inode_ops(struct inode *inode)
533 } else { 533 } else {
534 inode->i_mapping->a_ops = &ufs_aops; 534 inode->i_mapping->a_ops = &ufs_aops;
535 inode->i_op = &page_symlink_inode_operations; 535 inode->i_op = &page_symlink_inode_operations;
536 inode_nohighmem(inode);
536 } 537 }
537 } else 538 } else
538 init_special_inode(inode, inode->i_mode, 539 init_special_inode(inode, inode->i_mode,
diff --git a/fs/ufs/namei.c b/fs/ufs/namei.c
index 24b0cbd2d917..acf4a3b61b81 100644
--- a/fs/ufs/namei.c
+++ b/fs/ufs/namei.c
@@ -124,6 +124,7 @@ static int ufs_symlink (struct inode * dir, struct dentry * dentry,
124 if (l > UFS_SB(sb)->s_uspi->s_maxsymlinklen) { 124 if (l > UFS_SB(sb)->s_uspi->s_maxsymlinklen) {
125 /* slow symlink */ 125 /* slow symlink */
126 inode->i_op = &page_symlink_inode_operations; 126 inode->i_op = &page_symlink_inode_operations;
127 inode_nohighmem(inode);
127 inode->i_mapping->a_ops = &ufs_aops; 128 inode->i_mapping->a_ops = &ufs_aops;
128 err = page_symlink(inode, symname, l); 129 err = page_symlink(inode, symname, l);
129 if (err) 130 if (err)
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 3aa514254161..dfeda44b9ba4 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -3025,5 +3025,6 @@ static inline bool dir_relax(struct inode *inode)
3025} 3025}
3026 3026
3027extern bool path_noexec(const struct path *path); 3027extern bool path_noexec(const struct path *path);
3028extern void inode_nohighmem(struct inode *inode);
3028 3029
3029#endif /* _LINUX_FS_H */ 3030#endif /* _LINUX_FS_H */
diff --git a/mm/shmem.c b/mm/shmem.c
index 9187eee4128b..64bf5acb49fe 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -2444,7 +2444,6 @@ static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *s
2444 int len; 2444 int len;
2445 struct inode *inode; 2445 struct inode *inode;
2446 struct page *page; 2446 struct page *page;
2447 char *kaddr;
2448 struct shmem_inode_info *info; 2447 struct shmem_inode_info *info;
2449 2448
2450 len = strlen(symname) + 1; 2449 len = strlen(symname) + 1;
@@ -2483,9 +2482,8 @@ static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *s
2483 } 2482 }
2484 inode->i_mapping->a_ops = &shmem_aops; 2483 inode->i_mapping->a_ops = &shmem_aops;
2485 inode->i_op = &shmem_symlink_inode_operations; 2484 inode->i_op = &shmem_symlink_inode_operations;
2486 kaddr = kmap_atomic(page); 2485 inode_nohighmem(inode);
2487 memcpy(kaddr, symname, len); 2486 memcpy(page_address(page), symname, len);
2488 kunmap_atomic(kaddr);
2489 SetPageUptodate(page); 2487 SetPageUptodate(page);
2490 set_page_dirty(page); 2488 set_page_dirty(page);
2491 unlock_page(page); 2489 unlock_page(page);
@@ -2506,13 +2504,12 @@ static const char *shmem_follow_link(struct dentry *dentry, void **cookie)
2506 return ERR_PTR(error); 2504 return ERR_PTR(error);
2507 unlock_page(page); 2505 unlock_page(page);
2508 *cookie = page; 2506 *cookie = page;
2509 return kmap(page); 2507 return page_address(page);
2510} 2508}
2511 2509
2512static void shmem_put_link(struct inode *unused, void *cookie) 2510static void shmem_put_link(struct inode *unused, void *cookie)
2513{ 2511{
2514 struct page *page = cookie; 2512 struct page *page = cookie;
2515 kunmap(page);
2516 mark_page_accessed(page); 2513 mark_page_accessed(page);
2517 page_cache_release(page); 2514 page_cache_release(page);
2518} 2515}