diff options
Diffstat (limited to 'mm/shmem.c')
-rw-r--r-- | mm/shmem.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/mm/shmem.c b/mm/shmem.c index d8ef7ba831a5..1ccf794fbe61 100644 --- a/mm/shmem.c +++ b/mm/shmem.c | |||
@@ -1080,9 +1080,10 @@ redirty: | |||
1080 | #ifdef CONFIG_NUMA | 1080 | #ifdef CONFIG_NUMA |
1081 | #ifdef CONFIG_TMPFS | 1081 | #ifdef CONFIG_TMPFS |
1082 | static int shmem_parse_mpol(char *value, unsigned short *policy, | 1082 | static int shmem_parse_mpol(char *value, unsigned short *policy, |
1083 | nodemask_t *policy_nodes) | 1083 | unsigned short *mode_flags, nodemask_t *policy_nodes) |
1084 | { | 1084 | { |
1085 | char *nodelist = strchr(value, ':'); | 1085 | char *nodelist = strchr(value, ':'); |
1086 | char *flags = strchr(value, '='); | ||
1086 | int err = 1; | 1087 | int err = 1; |
1087 | 1088 | ||
1088 | if (nodelist) { | 1089 | if (nodelist) { |
@@ -1093,6 +1094,8 @@ static int shmem_parse_mpol(char *value, unsigned short *policy, | |||
1093 | if (!nodes_subset(*policy_nodes, node_states[N_HIGH_MEMORY])) | 1094 | if (!nodes_subset(*policy_nodes, node_states[N_HIGH_MEMORY])) |
1094 | goto out; | 1095 | goto out; |
1095 | } | 1096 | } |
1097 | if (flags) | ||
1098 | *flags++ = '\0'; | ||
1096 | if (!strcmp(value, "default")) { | 1099 | if (!strcmp(value, "default")) { |
1097 | *policy = MPOL_DEFAULT; | 1100 | *policy = MPOL_DEFAULT; |
1098 | /* Don't allow a nodelist */ | 1101 | /* Don't allow a nodelist */ |
@@ -1122,6 +1125,8 @@ static int shmem_parse_mpol(char *value, unsigned short *policy, | |||
1122 | *policy_nodes = node_states[N_HIGH_MEMORY]; | 1125 | *policy_nodes = node_states[N_HIGH_MEMORY]; |
1123 | err = 0; | 1126 | err = 0; |
1124 | } | 1127 | } |
1128 | if (flags) { | ||
1129 | } | ||
1125 | out: | 1130 | out: |
1126 | /* Restore string for error message */ | 1131 | /* Restore string for error message */ |
1127 | if (nodelist) | 1132 | if (nodelist) |
@@ -1130,7 +1135,7 @@ out: | |||
1130 | } | 1135 | } |
1131 | 1136 | ||
1132 | static void shmem_show_mpol(struct seq_file *seq, unsigned short policy, | 1137 | static void shmem_show_mpol(struct seq_file *seq, unsigned short policy, |
1133 | const nodemask_t policy_nodes) | 1138 | unsigned short flags, const nodemask_t policy_nodes) |
1134 | { | 1139 | { |
1135 | char *policy_string; | 1140 | char *policy_string; |
1136 | 1141 | ||
@@ -1199,13 +1204,13 @@ static struct page *shmem_alloc_page(gfp_t gfp, | |||
1199 | #else /* !CONFIG_NUMA */ | 1204 | #else /* !CONFIG_NUMA */ |
1200 | #ifdef CONFIG_TMPFS | 1205 | #ifdef CONFIG_TMPFS |
1201 | static inline int shmem_parse_mpol(char *value, unsigned short *policy, | 1206 | static inline int shmem_parse_mpol(char *value, unsigned short *policy, |
1202 | nodemask_t *policy_nodes) | 1207 | unsigned short *mode_flags, nodemask_t *policy_nodes) |
1203 | { | 1208 | { |
1204 | return 1; | 1209 | return 1; |
1205 | } | 1210 | } |
1206 | 1211 | ||
1207 | static inline void shmem_show_mpol(struct seq_file *seq, unsigned short policy, | 1212 | static inline void shmem_show_mpol(struct seq_file *seq, unsigned short policy, |
1208 | const nodemask_t policy_nodes) | 1213 | unsigned short flags, const nodemask_t policy_nodes) |
1209 | { | 1214 | { |
1210 | } | 1215 | } |
1211 | #endif /* CONFIG_TMPFS */ | 1216 | #endif /* CONFIG_TMPFS */ |
@@ -1578,7 +1583,7 @@ shmem_get_inode(struct super_block *sb, int mode, dev_t dev) | |||
1578 | inode->i_op = &shmem_inode_operations; | 1583 | inode->i_op = &shmem_inode_operations; |
1579 | inode->i_fop = &shmem_file_operations; | 1584 | inode->i_fop = &shmem_file_operations; |
1580 | mpol_shared_policy_init(&info->policy, sbinfo->policy, | 1585 | mpol_shared_policy_init(&info->policy, sbinfo->policy, |
1581 | &sbinfo->policy_nodes); | 1586 | sbinfo->flags, &sbinfo->policy_nodes); |
1582 | break; | 1587 | break; |
1583 | case S_IFDIR: | 1588 | case S_IFDIR: |
1584 | inc_nlink(inode); | 1589 | inc_nlink(inode); |
@@ -1592,7 +1597,7 @@ shmem_get_inode(struct super_block *sb, int mode, dev_t dev) | |||
1592 | * Must not load anything in the rbtree, | 1597 | * Must not load anything in the rbtree, |
1593 | * mpol_free_shared_policy will not be called. | 1598 | * mpol_free_shared_policy will not be called. |
1594 | */ | 1599 | */ |
1595 | mpol_shared_policy_init(&info->policy, MPOL_DEFAULT, | 1600 | mpol_shared_policy_init(&info->policy, MPOL_DEFAULT, 0, |
1596 | NULL); | 1601 | NULL); |
1597 | break; | 1602 | break; |
1598 | } | 1603 | } |
@@ -2209,7 +2214,7 @@ static int shmem_parse_options(char *options, struct shmem_sb_info *sbinfo, | |||
2209 | goto bad_val; | 2214 | goto bad_val; |
2210 | } else if (!strcmp(this_char,"mpol")) { | 2215 | } else if (!strcmp(this_char,"mpol")) { |
2211 | if (shmem_parse_mpol(value, &sbinfo->policy, | 2216 | if (shmem_parse_mpol(value, &sbinfo->policy, |
2212 | &sbinfo->policy_nodes)) | 2217 | &sbinfo->flags, &sbinfo->policy_nodes)) |
2213 | goto bad_val; | 2218 | goto bad_val; |
2214 | } else { | 2219 | } else { |
2215 | printk(KERN_ERR "tmpfs: Bad mount option %s\n", | 2220 | printk(KERN_ERR "tmpfs: Bad mount option %s\n", |
@@ -2261,6 +2266,7 @@ static int shmem_remount_fs(struct super_block *sb, int *flags, char *data) | |||
2261 | sbinfo->max_inodes = config.max_inodes; | 2266 | sbinfo->max_inodes = config.max_inodes; |
2262 | sbinfo->free_inodes = config.max_inodes - inodes; | 2267 | sbinfo->free_inodes = config.max_inodes - inodes; |
2263 | sbinfo->policy = config.policy; | 2268 | sbinfo->policy = config.policy; |
2269 | sbinfo->flags = config.flags; | ||
2264 | sbinfo->policy_nodes = config.policy_nodes; | 2270 | sbinfo->policy_nodes = config.policy_nodes; |
2265 | out: | 2271 | out: |
2266 | spin_unlock(&sbinfo->stat_lock); | 2272 | spin_unlock(&sbinfo->stat_lock); |
@@ -2282,7 +2288,8 @@ static int shmem_show_options(struct seq_file *seq, struct vfsmount *vfs) | |||
2282 | seq_printf(seq, ",uid=%u", sbinfo->uid); | 2288 | seq_printf(seq, ",uid=%u", sbinfo->uid); |
2283 | if (sbinfo->gid != 0) | 2289 | if (sbinfo->gid != 0) |
2284 | seq_printf(seq, ",gid=%u", sbinfo->gid); | 2290 | seq_printf(seq, ",gid=%u", sbinfo->gid); |
2285 | shmem_show_mpol(seq, sbinfo->policy, sbinfo->policy_nodes); | 2291 | shmem_show_mpol(seq, sbinfo->policy, sbinfo->flags, |
2292 | sbinfo->policy_nodes); | ||
2286 | return 0; | 2293 | return 0; |
2287 | } | 2294 | } |
2288 | #endif /* CONFIG_TMPFS */ | 2295 | #endif /* CONFIG_TMPFS */ |
@@ -2313,6 +2320,7 @@ static int shmem_fill_super(struct super_block *sb, | |||
2313 | sbinfo->uid = current->fsuid; | 2320 | sbinfo->uid = current->fsuid; |
2314 | sbinfo->gid = current->fsgid; | 2321 | sbinfo->gid = current->fsgid; |
2315 | sbinfo->policy = MPOL_DEFAULT; | 2322 | sbinfo->policy = MPOL_DEFAULT; |
2323 | sbinfo->flags = 0; | ||
2316 | sbinfo->policy_nodes = node_states[N_HIGH_MEMORY]; | 2324 | sbinfo->policy_nodes = node_states[N_HIGH_MEMORY]; |
2317 | sb->s_fs_info = sbinfo; | 2325 | sb->s_fs_info = sbinfo; |
2318 | 2326 | ||