summary refs log tree commit diff
path: root/Documentation
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2016-01-14 17:52:59 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2016-01-14 17:56:54 -0500
commite8ecde25f5e08f89b61d86c32bbb56b405e90c32 (patch)
tree826e424c86cd079b845ad497bd8c9867b490524f /Documentation
parent60b7eca1dc2ec066916b3b7ac6ad89bea13cb9af (diff)
downloadlinux-e8ecde25f5e08f89b61d86c32bbb56b405e90c32.tar.gz
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')
-rw-r--r--Documentation/filesystems/porting6
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