]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/ext3/balloc.c
[SCSI] fix netlink kernel-doc
[linux-2.6-omap-h63xx.git] / fs / ext3 / balloc.c
index a75713031105159ab82472301be86abef9ccc0af..92fd0338a6ebe3df16739b65feec4e4ef034206f 100644 (file)
@@ -117,7 +117,7 @@ static int ext3_valid_block_bitmap(struct super_block *sb,
                return 1;
 
 err_out:
-       ext3_error(sb, __FUNCTION__,
+       ext3_error(sb, __func__,
                        "Invalid block bitmap - "
                        "block_group = %d, block = %lu",
                        block_group, bitmap_blk);
@@ -147,7 +147,7 @@ read_block_bitmap(struct super_block *sb, unsigned int block_group)
        bitmap_blk = le32_to_cpu(desc->bg_block_bitmap);
        bh = sb_getblk(sb, bitmap_blk);
        if (unlikely(!bh)) {
-               ext3_error(sb, __FUNCTION__,
+               ext3_error(sb, __func__,
                            "Cannot read block bitmap - "
                            "block_group = %d, block_bitmap = %u",
                            block_group, le32_to_cpu(desc->bg_block_bitmap));
@@ -158,16 +158,17 @@ read_block_bitmap(struct super_block *sb, unsigned int block_group)
 
        if (bh_submit_read(bh) < 0) {
                brelse(bh);
-               ext3_error(sb, __FUNCTION__,
+               ext3_error(sb, __func__,
                            "Cannot read block bitmap - "
                            "block_group = %d, block_bitmap = %u",
                            block_group, le32_to_cpu(desc->bg_block_bitmap));
                return NULL;
        }
-       if (!ext3_valid_block_bitmap(sb, desc, block_group, bh)) {
-               brelse(bh);
-               return NULL;
-       }
+       ext3_valid_block_bitmap(sb, desc, block_group, bh);
+       /*
+        * file system mounted not to panic on error, continue with corrupt
+        * bitmap
+        */
        return bh;
 }
 /*
@@ -232,11 +233,10 @@ restart:
                prev = rsv;
        }
        printk("Window map complete.\n");
-       if (bad)
-               BUG();
+       BUG_ON(bad);
 }
 #define rsv_window_dump(root, verbose) \
-       __rsv_window_dump((root), (verbose), __FUNCTION__)
+       __rsv_window_dump((root), (verbose), __func__)
 #else
 #define rsv_window_dump(root, verbose) do {} while (0)
 #endif
@@ -618,7 +618,7 @@ do_more:
                if (!ext3_clear_bit_atomic(sb_bgl_lock(sbi, block_group),
                                                bit + i, bitmap_bh->b_data)) {
                        jbd_unlock_bh_state(bitmap_bh);
-                       ext3_error(sb, __FUNCTION__,
+                       ext3_error(sb, __func__,
                                "bit already cleared for block "E3FSBLK,
                                 block + i);
                        jbd_lock_bh_state(bitmap_bh);
@@ -630,9 +630,7 @@ do_more:
        jbd_unlock_bh_state(bitmap_bh);
 
        spin_lock(sb_bgl_lock(sbi, block_group));
-       desc->bg_free_blocks_count =
-               cpu_to_le16(le16_to_cpu(desc->bg_free_blocks_count) +
-                       group_freed);
+       le16_add_cpu(&desc->bg_free_blocks_count, group_freed);
        spin_unlock(sb_bgl_lock(sbi, block_group));
        percpu_counter_add(&sbi->s_freeblocks_counter, count);
 
@@ -1644,7 +1642,11 @@ allocated:
                            "Allocating block in system zone - "
                            "blocks from "E3FSBLK", length %lu",
                             ret_block, num);
-               goto out;
+               /*
+                * claim_block() marked the blocks we allocated as in use. So we
+                * may want to selectively mark some of the blocks as free.
+                */
+               goto retry_alloc;
        }
 
        performed_allocation = 1;
@@ -1670,7 +1672,7 @@ allocated:
                        if (ext3_test_bit(grp_alloc_blk+i,
                                        bh2jh(bitmap_bh)->b_committed_data)) {
                                printk("%s: block was unexpectedly set in "
-                                       "b_committed_data\n", __FUNCTION__);
+                                       "b_committed_data\n", __func__);
                        }
                }
        }
@@ -1696,8 +1698,7 @@ allocated:
                        ret_block, goal_hits, goal_attempts);
 
        spin_lock(sb_bgl_lock(sbi, group_no));
-       gdp->bg_free_blocks_count =
-                       cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count)-num);
+       le16_add_cpu(&gdp->bg_free_blocks_count, -num);
        spin_unlock(sb_bgl_lock(sbi, group_no));
        percpu_counter_sub(&sbi->s_freeblocks_counter, num);