diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2016-01-14 23:52:59 +0100 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-01-14 23:56:54 +0100 |
commit | e8ecde25f5e08f89b61d86c32bbb56b405e90c32 (patch) | |
tree | 826e424c86cd079b845ad497bd8c9867b490524f /Documentation/filesystems | |
parent | Merge tag 'upstream-4.5-rc1' of git://git.infradead.org/linux-ubifs (diff) | |
download | linux-e8ecde25f5e08f89b61d86c32bbb56b405e90c32.tar.xz linux-e8ecde25f5e08f89b61d86c32bbb56b405e90c32.zip |
Make sure that highmem pages are not added to symlink page cache
inode_nohighmem() is sufficient to make sure that page_get_link()
won't try to allocate a highmem page. Moreover, it is sufficient
to make sure that page_symlink/__page_symlink won't do the same
thing. However, any filesystem that manually preseeds the symlink's
page cache upon symlink(2) needs to make sure that the page it
inserts there won't be a highmem one.
Fortunately, only nfs and shmem have run afoul of that...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'Documentation/filesystems')
-rw-r--r-- | Documentation/filesystems/porting | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting index 0f88e6020487..f1b87d8aa2da 100644 --- a/Documentation/filesystems/porting +++ b/Documentation/filesystems/porting @@ -508,7 +508,11 @@ in your dentry operations instead. [mandatory] any symlink that might use page_follow_link_light/page_put_link() must have inode_nohighmem(inode) called before anything might start playing with - its pagecache. + its pagecache. No highmem pages should end up in the pagecache of such + symlinks. That includes any preseeding that might be done during symlink + creation. __page_symlink() will honour the mapping gfp flags, so once + you've done inode_nohighmem() it's safe to use, but if you allocate and + insert the page manually, make sure to use the right gfp flags. -- [mandatory] ->follow_link() is replaced with ->get_link(); same API, except that |