summary refs log tree commit diff
diff options
context:
space:
mode:
authorJan Stancek <jstancek@redhat.com>2020-01-03 18:37:18 +0100
committerLinus Torvalds <torvalds@linux-foundation.org>2020-01-03 10:39:08 -0800
commit15f0ec941f4f908fefa23a30ded8358977cc1cc0 (patch)
tree98915c2ae263664ccbf0503d5b65df81cacd10bd
parent7ca4ad5ba886557b67d42242a80f303c3a99ded1 (diff)
downloadlinux-15f0ec941f4f908fefa23a30ded8358977cc1cc0.tar.gz
mm/hugetlbfs: fix for_each_hstate() loop in init_hugetlbfs_fs()
LTP memfd_create04 started failing for some huge page sizes
after v5.4-10135-gc3bfc5dd73c6.

The problem is the check introduced to for_each_hstate() loop that
should skip default_hstate_idx.  Since it doesn't update 'i' counter,
all subsequent huge page sizes are skipped as well.

Fixes: 8fc312b32b25 ("mm/hugetlbfs: fix error handling when setting up mounts")
Signed-off-by: Jan Stancek <jstancek@redhat.com>
Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--fs/hugetlbfs/inode.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
index d5c2a3158610..a66e425884d1 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -1498,8 +1498,10 @@ static int __init init_hugetlbfs_fs(void)
 	/* other hstates are optional */
 	i = 0;
 	for_each_hstate(h) {
-		if (i == default_hstate_idx)
+		if (i == default_hstate_idx) {
+			i++;
 			continue;
+		}
 
 		mnt = mount_one_hugetlbfs(h);
 		if (IS_ERR(mnt))