bool remount)
 {
        char *this_char, *value, *rest;
+       struct mempolicy *mpol = NULL;
        uid_t uid;
        gid_t gid;
 
                        printk(KERN_ERR
                            "tmpfs: No value for mount option '%s'\n",
                            this_char);
-                       return 1;
+                       goto error;
                }
 
                if (!strcmp(this_char,"size")) {
                        if (!gid_valid(sbinfo->gid))
                                goto bad_val;
                } else if (!strcmp(this_char,"mpol")) {
-                       if (mpol_parse_str(value, &sbinfo->mpol))
+                       mpol_put(mpol);
+                       mpol = NULL;
+                       if (mpol_parse_str(value, &mpol))
                                goto bad_val;
                } else {
                        printk(KERN_ERR "tmpfs: Bad mount option %s\n",
                               this_char);
-                       return 1;
+                       goto error;
                }
        }
+       sbinfo->mpol = mpol;
        return 0;
 
 bad_val:
        printk(KERN_ERR "tmpfs: Bad value '%s' for mount option '%s'\n",
               value, this_char);
+error:
+       mpol_put(mpol);
        return 1;
 
 }
        struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
 
        percpu_counter_destroy(&sbinfo->used_blocks);
+       mpol_put(sbinfo->mpol);
        kfree(sbinfo);
        sb->s_fs_info = NULL;
 }