These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / fs / ocfs2 / suballoc.c
index 4479029..fc6d25f 100644 (file)
@@ -149,10 +149,8 @@ void ocfs2_free_ac_resource(struct ocfs2_alloc_context *ac)
        brelse(ac->ac_bh);
        ac->ac_bh = NULL;
        ac->ac_resv = NULL;
-       if (ac->ac_find_loc_priv) {
-               kfree(ac->ac_find_loc_priv);
-               ac->ac_find_loc_priv = NULL;
-       }
+       kfree(ac->ac_find_loc_priv);
+       ac->ac_find_loc_priv = NULL;
 }
 
 void ocfs2_free_alloc_context(struct ocfs2_alloc_context *ac)
@@ -167,12 +165,12 @@ static u32 ocfs2_bits_per_group(struct ocfs2_chain_list *cl)
 }
 
 #define do_error(fmt, ...)                                             \
-       do{                                                             \
-               if (resize)                                     \
-                       mlog(ML_ERROR, fmt "\n", ##__VA_ARGS__);        \
-               else                                                    \
-                       ocfs2_error(sb, fmt, ##__VA_ARGS__);            \
-       } while (0)
+do {                                                                   \
+       if (resize)                                                     \
+               mlog(ML_ERROR, fmt, ##__VA_ARGS__);                     \
+       else                                                            \
+               return ocfs2_error(sb, fmt, ##__VA_ARGS__);             \
+} while (0)
 
 static int ocfs2_validate_gd_self(struct super_block *sb,
                                  struct buffer_head *bh,
@@ -181,44 +179,35 @@ static int ocfs2_validate_gd_self(struct super_block *sb,
        struct ocfs2_group_desc *gd = (struct ocfs2_group_desc *)bh->b_data;
 
        if (!OCFS2_IS_VALID_GROUP_DESC(gd)) {
-               do_error("Group descriptor #%llu has bad signature %.*s",
+               do_error("Group descriptor #%llu has bad signature %.*s\n",
                         (unsigned long long)bh->b_blocknr, 7,
                         gd->bg_signature);
-               return -EINVAL;
        }
 
        if (le64_to_cpu(gd->bg_blkno) != bh->b_blocknr) {
-               do_error("Group descriptor #%llu has an invalid bg_blkno "
-                        "of %llu",
+               do_error("Group descriptor #%llu has an invalid bg_blkno of %llu\n",
                         (unsigned long long)bh->b_blocknr,
                         (unsigned long long)le64_to_cpu(gd->bg_blkno));
-               return -EINVAL;
        }
 
        if (le32_to_cpu(gd->bg_generation) != OCFS2_SB(sb)->fs_generation) {
-               do_error("Group descriptor #%llu has an invalid "
-                        "fs_generation of #%u",
+               do_error("Group descriptor #%llu has an invalid fs_generation of #%u\n",
                         (unsigned long long)bh->b_blocknr,
                         le32_to_cpu(gd->bg_generation));
-               return -EINVAL;
        }
 
        if (le16_to_cpu(gd->bg_free_bits_count) > le16_to_cpu(gd->bg_bits)) {
-               do_error("Group descriptor #%llu has bit count %u but "
-                        "claims that %u are free",
+               do_error("Group descriptor #%llu has bit count %u but claims that %u are free\n",
                         (unsigned long long)bh->b_blocknr,
                         le16_to_cpu(gd->bg_bits),
                         le16_to_cpu(gd->bg_free_bits_count));
-               return -EINVAL;
        }
 
        if (le16_to_cpu(gd->bg_bits) > (8 * le16_to_cpu(gd->bg_size))) {
-               do_error("Group descriptor #%llu has bit count %u but "
-                        "max bitmap bits of %u",
+               do_error("Group descriptor #%llu has bit count %u but max bitmap bits of %u\n",
                         (unsigned long long)bh->b_blocknr,
                         le16_to_cpu(gd->bg_bits),
                         8 * le16_to_cpu(gd->bg_size));
-               return -EINVAL;
        }
 
        return 0;
@@ -233,20 +222,17 @@ static int ocfs2_validate_gd_parent(struct super_block *sb,
        struct ocfs2_group_desc *gd = (struct ocfs2_group_desc *)bh->b_data;
 
        if (di->i_blkno != gd->bg_parent_dinode) {
-               do_error("Group descriptor #%llu has bad parent "
-                        "pointer (%llu, expected %llu)",
+               do_error("Group descriptor #%llu has bad parent pointer (%llu, expected %llu)\n",
                         (unsigned long long)bh->b_blocknr,
                         (unsigned long long)le64_to_cpu(gd->bg_parent_dinode),
                         (unsigned long long)le64_to_cpu(di->i_blkno));
-               return -EINVAL;
        }
 
        max_bits = le16_to_cpu(di->id2.i_chain.cl_cpg) * le16_to_cpu(di->id2.i_chain.cl_bpc);
        if (le16_to_cpu(gd->bg_bits) > max_bits) {
-               do_error("Group descriptor #%llu has bit count of %u",
+               do_error("Group descriptor #%llu has bit count of %u\n",
                         (unsigned long long)bh->b_blocknr,
                         le16_to_cpu(gd->bg_bits));
-               return -EINVAL;
        }
 
        /* In resize, we may meet the case bg_chain == cl_next_free_rec. */
@@ -254,10 +240,9 @@ static int ocfs2_validate_gd_parent(struct super_block *sb,
             le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) ||
            ((le16_to_cpu(gd->bg_chain) ==
             le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) && !resize)) {
-               do_error("Group descriptor #%llu has bad chain %u",
+               do_error("Group descriptor #%llu has bad chain %u\n",
                         (unsigned long long)bh->b_blocknr,
                         le16_to_cpu(gd->bg_chain));
-               return -EINVAL;
        }
 
        return 0;
@@ -384,11 +369,10 @@ static int ocfs2_block_group_fill(handle_t *handle,
        struct super_block * sb = alloc_inode->i_sb;
 
        if (((unsigned long long) bg_bh->b_blocknr) != group_blkno) {
-               ocfs2_error(alloc_inode->i_sb, "group block (%llu) != "
-                           "b_blocknr (%llu)",
-                           (unsigned long long)group_blkno,
-                           (unsigned long long) bg_bh->b_blocknr);
-               status = -EIO;
+               status = ocfs2_error(alloc_inode->i_sb,
+                                    "group block (%llu) != b_blocknr (%llu)\n",
+                                    (unsigned long long)group_blkno,
+                                    (unsigned long long) bg_bh->b_blocknr);
                goto bail;
        }
 
@@ -834,9 +818,9 @@ static int ocfs2_reserve_suballoc_bits(struct ocfs2_super *osb,
        BUG_ON(!OCFS2_IS_VALID_DINODE(fe));
 
        if (!(fe->i_flags & cpu_to_le32(OCFS2_CHAIN_FL))) {
-               ocfs2_error(alloc_inode->i_sb, "Invalid chain allocator %llu",
-                           (unsigned long long)le64_to_cpu(fe->i_blkno));
-               status = -EIO;
+               status = ocfs2_error(alloc_inode->i_sb,
+                                    "Invalid chain allocator %llu\n",
+                                    (unsigned long long)le64_to_cpu(fe->i_blkno));
                goto bail;
        }
 
@@ -1370,12 +1354,11 @@ int ocfs2_block_group_set_bits(handle_t *handle,
 
        le16_add_cpu(&bg->bg_free_bits_count, -num_bits);
        if (le16_to_cpu(bg->bg_free_bits_count) > le16_to_cpu(bg->bg_bits)) {
-               ocfs2_error(alloc_inode->i_sb, "Group descriptor # %llu has bit"
-                           " count %u but claims %u are freed. num_bits %d",
-                           (unsigned long long)le64_to_cpu(bg->bg_blkno),
-                           le16_to_cpu(bg->bg_bits),
-                           le16_to_cpu(bg->bg_free_bits_count), num_bits);
-               return -EROFS;
+               return ocfs2_error(alloc_inode->i_sb, "Group descriptor # %llu has bit count %u but claims %u are freed. num_bits %d\n",
+                                  (unsigned long long)le64_to_cpu(bg->bg_blkno),
+                                  le16_to_cpu(bg->bg_bits),
+                                  le16_to_cpu(bg->bg_free_bits_count),
+                                  num_bits);
        }
        while(num_bits--)
                ocfs2_set_bit(bit_off++, bitmap);
@@ -1905,13 +1888,11 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac,
 
        if (le32_to_cpu(fe->id1.bitmap1.i_used) >=
            le32_to_cpu(fe->id1.bitmap1.i_total)) {
-               ocfs2_error(ac->ac_inode->i_sb,
-                           "Chain allocator dinode %llu has %u used "
-                           "bits but only %u total.",
-                           (unsigned long long)le64_to_cpu(fe->i_blkno),
-                           le32_to_cpu(fe->id1.bitmap1.i_used),
-                           le32_to_cpu(fe->id1.bitmap1.i_total));
-               status = -EIO;
+               status = ocfs2_error(ac->ac_inode->i_sb,
+                                    "Chain allocator dinode %llu has %u used bits but only %u total\n",
+                                    (unsigned long long)le64_to_cpu(fe->i_blkno),
+                                    le32_to_cpu(fe->id1.bitmap1.i_used),
+                                    le32_to_cpu(fe->id1.bitmap1.i_total));
                goto bail;
        }
 
@@ -1939,7 +1920,10 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_alloc_context *ac,
        status = ocfs2_search_chain(ac, handle, bits_wanted, min_bits,
                                    res, &bits_left);
        if (!status) {
-               hint = ocfs2_group_from_res(res);
+               if (ocfs2_is_cluster_bitmap(ac->ac_inode))
+                       hint = res->sr_bg_blkno;
+               else
+                       hint = ocfs2_group_from_res(res);
                goto set_hint;
        }
        if (status < 0 && status != -ENOSPC) {
@@ -2429,12 +2413,11 @@ static int ocfs2_block_group_clear_bits(handle_t *handle,
        }
        le16_add_cpu(&bg->bg_free_bits_count, num_bits);
        if (le16_to_cpu(bg->bg_free_bits_count) > le16_to_cpu(bg->bg_bits)) {
-               ocfs2_error(alloc_inode->i_sb, "Group descriptor # %llu has bit"
-                           " count %u but claims %u are freed. num_bits %d",
-                           (unsigned long long)le64_to_cpu(bg->bg_blkno),
-                           le16_to_cpu(bg->bg_bits),
-                           le16_to_cpu(bg->bg_free_bits_count), num_bits);
-               return -EROFS;
+               return ocfs2_error(alloc_inode->i_sb, "Group descriptor # %llu has bit count %u but claims %u are freed. num_bits %d\n",
+                                  (unsigned long long)le64_to_cpu(bg->bg_blkno),
+                                  le16_to_cpu(bg->bg_bits),
+                                  le16_to_cpu(bg->bg_free_bits_count),
+                                  num_bits);
        }
 
        if (undo_fn)