diff options
Diffstat (limited to 'fs/hugetlbfs')
-rw-r--r-- | fs/hugetlbfs/inode.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 523464e62849..a3f868ae3fd4 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c | |||
@@ -909,11 +909,8 @@ static int can_do_hugetlb_shm(void) | |||
909 | 909 | ||
910 | static int get_hstate_idx(int page_size_log) | 910 | static int get_hstate_idx(int page_size_log) |
911 | { | 911 | { |
912 | struct hstate *h; | 912 | struct hstate *h = hstate_sizelog(page_size_log); |
913 | 913 | ||
914 | if (!page_size_log) | ||
915 | return default_hstate_idx; | ||
916 | h = size_to_hstate(1 << page_size_log); | ||
917 | if (!h) | 914 | if (!h) |
918 | return -1; | 915 | return -1; |
919 | return h - hstates; | 916 | return h - hstates; |
@@ -929,9 +926,12 @@ static struct dentry_operations anon_ops = { | |||
929 | .d_dname = hugetlb_dname | 926 | .d_dname = hugetlb_dname |
930 | }; | 927 | }; |
931 | 928 | ||
932 | struct file *hugetlb_file_setup(const char *name, unsigned long addr, | 929 | /* |
933 | size_t size, vm_flags_t acctflag, | 930 | * Note that size should be aligned to proper hugepage size in caller side, |
934 | struct user_struct **user, | 931 | * otherwise hugetlb_reserve_pages reserves one less hugepages than intended. |
932 | */ | ||
933 | struct file *hugetlb_file_setup(const char *name, size_t size, | ||
934 | vm_flags_t acctflag, struct user_struct **user, | ||
935 | int creat_flags, int page_size_log) | 935 | int creat_flags, int page_size_log) |
936 | { | 936 | { |
937 | struct file *file = ERR_PTR(-ENOMEM); | 937 | struct file *file = ERR_PTR(-ENOMEM); |
@@ -939,8 +939,6 @@ struct file *hugetlb_file_setup(const char *name, unsigned long addr, | |||
939 | struct path path; | 939 | struct path path; |
940 | struct super_block *sb; | 940 | struct super_block *sb; |
941 | struct qstr quick_string; | 941 | struct qstr quick_string; |
942 | struct hstate *hstate; | ||
943 | unsigned long num_pages; | ||
944 | int hstate_idx; | 942 | int hstate_idx; |
945 | 943 | ||
946 | hstate_idx = get_hstate_idx(page_size_log); | 944 | hstate_idx = get_hstate_idx(page_size_log); |
@@ -980,12 +978,10 @@ struct file *hugetlb_file_setup(const char *name, unsigned long addr, | |||
980 | if (!inode) | 978 | if (!inode) |
981 | goto out_dentry; | 979 | goto out_dentry; |
982 | 980 | ||
983 | hstate = hstate_inode(inode); | ||
984 | size += addr & ~huge_page_mask(hstate); | ||
985 | num_pages = ALIGN(size, huge_page_size(hstate)) >> | ||
986 | huge_page_shift(hstate); | ||
987 | file = ERR_PTR(-ENOMEM); | 981 | file = ERR_PTR(-ENOMEM); |
988 | if (hugetlb_reserve_pages(inode, 0, num_pages, NULL, acctflag)) | 982 | if (hugetlb_reserve_pages(inode, 0, |
983 | size >> huge_page_shift(hstate_inode(inode)), NULL, | ||
984 | acctflag)) | ||
989 | goto out_inode; | 985 | goto out_inode; |
990 | 986 | ||
991 | d_instantiate(path.dentry, inode); | 987 | d_instantiate(path.dentry, inode); |