Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[cascardo/linux.git] / fs / hugetlbfs / inode.c
index 4ea71eb..2c0c3a0 100644 (file)
@@ -416,7 +416,6 @@ static void remove_inode_hugepages(struct inode *inode, loff_t lstart,
 
                for (i = 0; i < pagevec_count(&pvec); ++i) {
                        struct page *page = pvec.pages[i];
-                       bool rsv_on_error;
                        u32 hash;
 
                        /*
@@ -458,18 +457,17 @@ static void remove_inode_hugepages(struct inode *inode, loff_t lstart,
                         * cache (remove_huge_page) BEFORE removing the
                         * region/reserve map (hugetlb_unreserve_pages).  In
                         * rare out of memory conditions, removal of the
-                        * region/reserve map could fail.  Before free'ing
-                        * the page, note PagePrivate which is used in case
-                        * of error.
+                        * region/reserve map could fail. Correspondingly,
+                        * the subpool and global reserve usage count can need
+                        * to be adjusted.
                         */
-                       rsv_on_error = !PagePrivate(page);
+                       VM_BUG_ON(PagePrivate(page));
                        remove_huge_page(page);
                        freed++;
                        if (!truncate_op) {
                                if (unlikely(hugetlb_unreserve_pages(inode,
                                                        next, next + 1, 1)))
-                                       hugetlb_fix_reserve_counts(inode,
-                                                               rsv_on_error);
+                                       hugetlb_fix_reserve_counts(inode);
                        }
 
                        unlock_page(page);
@@ -672,7 +670,7 @@ static int hugetlbfs_setattr(struct dentry *dentry, struct iattr *attr)
 
        BUG_ON(!inode);
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;