diff options
Diffstat (limited to 'ipc/shm.c')
-rw-r--r-- | ipc/shm.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -491,10 +491,14 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params) | |||
491 | 491 | ||
492 | sprintf (name, "SYSV%08x", key); | 492 | sprintf (name, "SYSV%08x", key); |
493 | if (shmflg & SHM_HUGETLB) { | 493 | if (shmflg & SHM_HUGETLB) { |
494 | struct hstate *hs = hstate_sizelog((shmflg >> SHM_HUGE_SHIFT) | ||
495 | & SHM_HUGE_MASK); | ||
496 | size_t hugesize = ALIGN(size, huge_page_size(hs)); | ||
497 | |||
494 | /* hugetlb_file_setup applies strict accounting */ | 498 | /* hugetlb_file_setup applies strict accounting */ |
495 | if (shmflg & SHM_NORESERVE) | 499 | if (shmflg & SHM_NORESERVE) |
496 | acctflag = VM_NORESERVE; | 500 | acctflag = VM_NORESERVE; |
497 | file = hugetlb_file_setup(name, 0, size, acctflag, | 501 | file = hugetlb_file_setup(name, hugesize, acctflag, |
498 | &shp->mlock_user, HUGETLB_SHMFS_INODE, | 502 | &shp->mlock_user, HUGETLB_SHMFS_INODE, |
499 | (shmflg >> SHM_HUGE_SHIFT) & SHM_HUGE_MASK); | 503 | (shmflg >> SHM_HUGE_SHIFT) & SHM_HUGE_MASK); |
500 | } else { | 504 | } else { |