balloc.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:22k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/fs/ext2/balloc.c
  3.  *
  4.  * Copyright (C) 1992, 1993, 1994, 1995
  5.  * Remy Card (card@masi.ibp.fr)
  6.  * Laboratoire MASI - Institut Blaise Pascal
  7.  * Universite Pierre et Marie Curie (Paris VI)
  8.  *
  9.  *  Enhanced block allocation by Stephen Tweedie (sct@dcs.ed.ac.uk), 1993
  10.  *  Big-endian to little-endian byte-swapping/bitmaps by
  11.  *        David S. Miller (davem@caip.rutgers.edu), 1995
  12.  */
  13. #include <linux/config.h>
  14. #include <linux/fs.h>
  15. #include <linux/ext2_fs.h>
  16. #include <linux/locks.h>
  17. #include <linux/quotaops.h>
  18. /*
  19.  * balloc.c contains the blocks allocation and deallocation routines
  20.  */
  21. /*
  22.  * The free blocks are managed by bitmaps.  A file system contains several
  23.  * blocks groups.  Each group contains 1 bitmap block for blocks, 1 bitmap
  24.  * block for inodes, N blocks for the inode table and data blocks.
  25.  *
  26.  * The file system contains group descriptors which are located after the
  27.  * super block.  Each descriptor contains the number of the bitmap block and
  28.  * the free blocks count in the block.  The descriptors are loaded in memory
  29.  * when a file system is mounted (see ext2_read_super).
  30.  */
  31. #define in_range(b, first, len) ((b) >= (first) && (b) <= (first) + (len) - 1)
  32. struct ext2_group_desc * ext2_get_group_desc(struct super_block * sb,
  33.      unsigned int block_group,
  34.      struct buffer_head ** bh)
  35. {
  36. unsigned long group_desc;
  37. unsigned long desc;
  38. struct ext2_group_desc * gdp;
  39. if (block_group >= sb->u.ext2_sb.s_groups_count) {
  40. ext2_error (sb, "ext2_get_group_desc",
  41.     "block_group >= groups_count - "
  42.     "block_group = %d, groups_count = %lu",
  43.     block_group, sb->u.ext2_sb.s_groups_count);
  44. return NULL;
  45. }
  46. group_desc = block_group / EXT2_DESC_PER_BLOCK(sb);
  47. desc = block_group % EXT2_DESC_PER_BLOCK(sb);
  48. if (!sb->u.ext2_sb.s_group_desc[group_desc]) {
  49. ext2_error (sb, "ext2_get_group_desc",
  50.     "Group descriptor not loaded - "
  51.     "block_group = %d, group_desc = %lu, desc = %lu",
  52.      block_group, group_desc, desc);
  53. return NULL;
  54. }
  55. gdp = (struct ext2_group_desc *) 
  56.       sb->u.ext2_sb.s_group_desc[group_desc]->b_data;
  57. if (bh)
  58. *bh = sb->u.ext2_sb.s_group_desc[group_desc];
  59. return gdp + desc;
  60. }
  61. /*
  62.  * Read the bitmap for a given block_group, reading into the specified 
  63.  * slot in the superblock's bitmap cache.
  64.  *
  65.  * Return >=0 on success or a -ve error code.
  66.  */
  67. static int read_block_bitmap (struct super_block * sb,
  68.        unsigned int block_group,
  69.        unsigned long bitmap_nr)
  70. {
  71. struct ext2_group_desc * gdp;
  72. struct buffer_head * bh = NULL;
  73. int retval = -EIO;
  74. gdp = ext2_get_group_desc (sb, block_group, NULL);
  75. if (!gdp)
  76. goto error_out;
  77. retval = 0;
  78. bh = sb_bread(sb, le32_to_cpu(gdp->bg_block_bitmap));
  79. if (!bh) {
  80. ext2_error (sb, "read_block_bitmap",
  81.     "Cannot read block bitmap - "
  82.     "block_group = %d, block_bitmap = %lu",
  83.     block_group, (unsigned long) gdp->bg_block_bitmap);
  84. retval = -EIO;
  85. }
  86. /*
  87.  * On IO error, just leave a zero in the superblock's block pointer for
  88.  * this group.  The IO will be retried next time.
  89.  */
  90. error_out:
  91. sb->u.ext2_sb.s_block_bitmap_number[bitmap_nr] = block_group;
  92. sb->u.ext2_sb.s_block_bitmap[bitmap_nr] = bh;
  93. return retval;
  94. }
  95. /*
  96.  * load_block_bitmap loads the block bitmap for a blocks group
  97.  *
  98.  * It maintains a cache for the last bitmaps loaded.  This cache is managed
  99.  * with a LRU algorithm.
  100.  *
  101.  * Notes:
  102.  * 1/ There is one cache per mounted file system.
  103.  * 2/ If the file system contains less than EXT2_MAX_GROUP_LOADED groups,
  104.  *    this function reads the bitmap without maintaining a LRU cache.
  105.  * 
  106.  * Return the slot used to store the bitmap, or a -ve error code.
  107.  */
  108. static int __load_block_bitmap (struct super_block * sb,
  109.         unsigned int block_group)
  110. {
  111. int i, j, retval = 0;
  112. unsigned long block_bitmap_number;
  113. struct buffer_head * block_bitmap;
  114. if (block_group >= sb->u.ext2_sb.s_groups_count)
  115. ext2_panic (sb, "load_block_bitmap",
  116.     "block_group >= groups_count - "
  117.     "block_group = %d, groups_count = %lu",
  118.     block_group, sb->u.ext2_sb.s_groups_count);
  119. if (sb->u.ext2_sb.s_groups_count <= EXT2_MAX_GROUP_LOADED) {
  120. if (sb->u.ext2_sb.s_block_bitmap[block_group]) {
  121. if (sb->u.ext2_sb.s_block_bitmap_number[block_group] ==
  122.     block_group)
  123. return block_group;
  124. ext2_error (sb, "__load_block_bitmap",
  125.     "block_group != block_bitmap_number");
  126. }
  127. retval = read_block_bitmap (sb, block_group, block_group);
  128. if (retval < 0)
  129. return retval;
  130. return block_group;
  131. }
  132. for (i = 0; i < sb->u.ext2_sb.s_loaded_block_bitmaps &&
  133.     sb->u.ext2_sb.s_block_bitmap_number[i] != block_group; i++)
  134. ;
  135. if (i < sb->u.ext2_sb.s_loaded_block_bitmaps &&
  136.        sb->u.ext2_sb.s_block_bitmap_number[i] == block_group) {
  137. block_bitmap_number = sb->u.ext2_sb.s_block_bitmap_number[i];
  138. block_bitmap = sb->u.ext2_sb.s_block_bitmap[i];
  139. for (j = i; j > 0; j--) {
  140. sb->u.ext2_sb.s_block_bitmap_number[j] =
  141. sb->u.ext2_sb.s_block_bitmap_number[j - 1];
  142. sb->u.ext2_sb.s_block_bitmap[j] =
  143. sb->u.ext2_sb.s_block_bitmap[j - 1];
  144. }
  145. sb->u.ext2_sb.s_block_bitmap_number[0] = block_bitmap_number;
  146. sb->u.ext2_sb.s_block_bitmap[0] = block_bitmap;
  147. /*
  148.  * There's still one special case here --- if block_bitmap == 0
  149.  * then our last attempt to read the bitmap failed and we have
  150.  * just ended up caching that failure.  Try again to read it.
  151.  */
  152. if (!block_bitmap)
  153. retval = read_block_bitmap (sb, block_group, 0);
  154. } else {
  155. if (sb->u.ext2_sb.s_loaded_block_bitmaps < EXT2_MAX_GROUP_LOADED)
  156. sb->u.ext2_sb.s_loaded_block_bitmaps++;
  157. else
  158. brelse (sb->u.ext2_sb.s_block_bitmap[EXT2_MAX_GROUP_LOADED - 1]);
  159. for (j = sb->u.ext2_sb.s_loaded_block_bitmaps - 1; j > 0; j--) {
  160. sb->u.ext2_sb.s_block_bitmap_number[j] =
  161. sb->u.ext2_sb.s_block_bitmap_number[j - 1];
  162. sb->u.ext2_sb.s_block_bitmap[j] =
  163. sb->u.ext2_sb.s_block_bitmap[j - 1];
  164. }
  165. retval = read_block_bitmap (sb, block_group, 0);
  166. }
  167. return retval;
  168. }
  169. /*
  170.  * Load the block bitmap for a given block group.  First of all do a couple
  171.  * of fast lookups for common cases and then pass the request onto the guts
  172.  * of the bitmap loader.
  173.  *
  174.  * Return the slot number of the group in the superblock bitmap cache's on
  175.  * success, or a -ve error code.
  176.  *
  177.  * There is still one inconsistency here --- if the number of groups in this
  178.  * filesystems is <= EXT2_MAX_GROUP_LOADED, then we have no way of 
  179.  * differentiating between a group for which we have never performed a bitmap
  180.  * IO request, and a group for which the last bitmap read request failed.
  181.  */
  182. static inline int load_block_bitmap (struct super_block * sb,
  183.      unsigned int block_group)
  184. {
  185. int slot;
  186. /*
  187.  * Do the lookup for the slot.  First of all, check if we're asking
  188.  * for the same slot as last time, and did we succeed that last time?
  189.  */
  190. if (sb->u.ext2_sb.s_loaded_block_bitmaps > 0 &&
  191.     sb->u.ext2_sb.s_block_bitmap_number[0] == block_group &&
  192.     sb->u.ext2_sb.s_block_bitmap[0]) {
  193. return 0;
  194. }
  195. /*
  196.  * Or can we do a fast lookup based on a loaded group on a filesystem
  197.  * small enough to be mapped directly into the superblock?
  198.  */
  199. else if (sb->u.ext2_sb.s_groups_count <= EXT2_MAX_GROUP_LOADED && 
  200.  sb->u.ext2_sb.s_block_bitmap_number[block_group] == block_group &&
  201.  sb->u.ext2_sb.s_block_bitmap[block_group]) {
  202. slot = block_group;
  203. }
  204. /*
  205.  * If not, then do a full lookup for this block group.
  206.  */
  207. else {
  208. slot = __load_block_bitmap (sb, block_group);
  209. }
  210. /*
  211.  * <0 means we just got an error
  212.  */
  213. if (slot < 0)
  214. return slot;
  215. /*
  216.  * If it's a valid slot, we may still have cached a previous IO error,
  217.  * in which case the bh in the superblock cache will be zero.
  218.  */
  219. if (!sb->u.ext2_sb.s_block_bitmap[slot])
  220. return -EIO;
  221. /*
  222.  * Must have been read in OK to get this far.
  223.  */
  224. return slot;
  225. }
  226. /* Free given blocks, update quota and i_blocks field */
  227. void ext2_free_blocks (struct inode * inode, unsigned long block,
  228.        unsigned long count)
  229. {
  230. struct buffer_head * bh;
  231. struct buffer_head * bh2;
  232. unsigned long block_group;
  233. unsigned long bit;
  234. unsigned long i;
  235. int bitmap_nr;
  236. unsigned long overflow;
  237. struct super_block * sb;
  238. struct ext2_group_desc * gdp;
  239. struct ext2_super_block * es;
  240. sb = inode->i_sb;
  241. if (!sb) {
  242. printk ("ext2_free_blocks: nonexistent device");
  243. return;
  244. }
  245. lock_super (sb);
  246. es = sb->u.ext2_sb.s_es;
  247. if (block < le32_to_cpu(es->s_first_data_block) || 
  248.     (block + count) > le32_to_cpu(es->s_blocks_count)) {
  249. ext2_error (sb, "ext2_free_blocks",
  250.     "Freeing blocks not in datazone - "
  251.     "block = %lu, count = %lu", block, count);
  252. goto error_return;
  253. }
  254. ext2_debug ("freeing block(s) %lu-%lun", block, block + count - 1);
  255. do_more:
  256. overflow = 0;
  257. block_group = (block - le32_to_cpu(es->s_first_data_block)) /
  258.       EXT2_BLOCKS_PER_GROUP(sb);
  259. bit = (block - le32_to_cpu(es->s_first_data_block)) %
  260.       EXT2_BLOCKS_PER_GROUP(sb);
  261. /*
  262.  * Check to see if we are freeing blocks across a group
  263.  * boundary.
  264.  */
  265. if (bit + count > EXT2_BLOCKS_PER_GROUP(sb)) {
  266. overflow = bit + count - EXT2_BLOCKS_PER_GROUP(sb);
  267. count -= overflow;
  268. }
  269. bitmap_nr = load_block_bitmap (sb, block_group);
  270. if (bitmap_nr < 0)
  271. goto error_return;
  272. bh = sb->u.ext2_sb.s_block_bitmap[bitmap_nr];
  273. gdp = ext2_get_group_desc (sb, block_group, &bh2);
  274. if (!gdp)
  275. goto error_return;
  276. if (in_range (le32_to_cpu(gdp->bg_block_bitmap), block, count) ||
  277.     in_range (le32_to_cpu(gdp->bg_inode_bitmap), block, count) ||
  278.     in_range (block, le32_to_cpu(gdp->bg_inode_table),
  279.       sb->u.ext2_sb.s_itb_per_group) ||
  280.     in_range (block + count - 1, le32_to_cpu(gdp->bg_inode_table),
  281.       sb->u.ext2_sb.s_itb_per_group))
  282. ext2_error (sb, "ext2_free_blocks",
  283.     "Freeing blocks in system zones - "
  284.     "Block = %lu, count = %lu",
  285.     block, count);
  286. for (i = 0; i < count; i++) {
  287. if (!ext2_clear_bit (bit + i, bh->b_data))
  288. ext2_error (sb, "ext2_free_blocks",
  289.       "bit already cleared for block %lu",
  290.       block + i);
  291. else {
  292. DQUOT_FREE_BLOCK(inode, 1);
  293. gdp->bg_free_blocks_count =
  294. cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count)+1);
  295. es->s_free_blocks_count =
  296. cpu_to_le32(le32_to_cpu(es->s_free_blocks_count)+1);
  297. }
  298. }
  299. mark_buffer_dirty(bh2);
  300. mark_buffer_dirty(sb->u.ext2_sb.s_sbh);
  301. mark_buffer_dirty(bh);
  302. if (sb->s_flags & MS_SYNCHRONOUS) {
  303. ll_rw_block (WRITE, 1, &bh);
  304. wait_on_buffer (bh);
  305. }
  306. if (overflow) {
  307. block += count;
  308. count = overflow;
  309. goto do_more;
  310. }
  311. sb->s_dirt = 1;
  312. error_return:
  313. unlock_super (sb);
  314. return;
  315. }
  316. /*
  317.  * ext2_new_block uses a goal block to assist allocation.  If the goal is
  318.  * free, or there is a free block within 32 blocks of the goal, that block
  319.  * is allocated.  Otherwise a forward search is made for a free block; within 
  320.  * each block group the search first looks for an entire free byte in the block
  321.  * bitmap, and then for any free bit if that fails.
  322.  * This function also updates quota and i_blocks field.
  323.  */
  324. int ext2_new_block (struct inode * inode, unsigned long goal,
  325.     u32 * prealloc_count, u32 * prealloc_block, int * err)
  326. {
  327. struct buffer_head * bh;
  328. struct buffer_head * bh2;
  329. char * p, * r;
  330. int i, j, k, tmp;
  331. int bitmap_nr;
  332. struct super_block * sb;
  333. struct ext2_group_desc * gdp;
  334. struct ext2_super_block * es;
  335. #ifdef EXT2FS_DEBUG
  336. static int goal_hits = 0, goal_attempts = 0;
  337. #endif
  338. *err = -ENOSPC;
  339. sb = inode->i_sb;
  340. if (!sb) {
  341. printk ("ext2_new_block: nonexistent device");
  342. return 0;
  343. }
  344. lock_super (sb);
  345. es = sb->u.ext2_sb.s_es;
  346. if (le32_to_cpu(es->s_free_blocks_count) <= le32_to_cpu(es->s_r_blocks_count) &&
  347.     ((sb->u.ext2_sb.s_resuid != current->fsuid) &&
  348.      (sb->u.ext2_sb.s_resgid == 0 ||
  349.       !in_group_p (sb->u.ext2_sb.s_resgid)) && 
  350.      !capable(CAP_SYS_RESOURCE)))
  351. goto out;
  352. ext2_debug ("goal=%lu.n", goal);
  353. repeat:
  354. /*
  355.  * First, test whether the goal block is free.
  356.  */
  357. if (goal < le32_to_cpu(es->s_first_data_block) ||
  358.     goal >= le32_to_cpu(es->s_blocks_count))
  359. goal = le32_to_cpu(es->s_first_data_block);
  360. i = (goal - le32_to_cpu(es->s_first_data_block)) / EXT2_BLOCKS_PER_GROUP(sb);
  361. gdp = ext2_get_group_desc (sb, i, &bh2);
  362. if (!gdp)
  363. goto io_error;
  364. if (le16_to_cpu(gdp->bg_free_blocks_count) > 0) {
  365. j = ((goal - le32_to_cpu(es->s_first_data_block)) % EXT2_BLOCKS_PER_GROUP(sb));
  366. #ifdef EXT2FS_DEBUG
  367. if (j)
  368. goal_attempts++;
  369. #endif
  370. bitmap_nr = load_block_bitmap (sb, i);
  371. if (bitmap_nr < 0)
  372. goto io_error;
  373. bh = sb->u.ext2_sb.s_block_bitmap[bitmap_nr];
  374. ext2_debug ("goal is at %d:%d.n", i, j);
  375. if (!ext2_test_bit(j, bh->b_data)) {
  376. ext2_debug("goal bit allocated, %d hitsn",++goal_hits);
  377. goto got_block;
  378. }
  379. if (j) {
  380. /*
  381.  * The goal was occupied; search forward for a free 
  382.  * block within the next XX blocks.
  383.  *
  384.  * end_goal is more or less random, but it has to be
  385.  * less than EXT2_BLOCKS_PER_GROUP. Aligning up to the
  386.  * next 64-bit boundary is simple..
  387.  */
  388. int end_goal = (j + 63) & ~63;
  389. j = ext2_find_next_zero_bit(bh->b_data, end_goal, j);
  390. if (j < end_goal)
  391. goto got_block;
  392. }
  393. ext2_debug ("Bit not found near goaln");
  394. /*
  395.  * There has been no free block found in the near vicinity
  396.  * of the goal: do a search forward through the block groups,
  397.  * searching in each group first for an entire free byte in
  398.  * the bitmap and then for any free bit.
  399.  * 
  400.  * Search first in the remainder of the current group; then,
  401.  * cyclicly search through the rest of the groups.
  402.  */
  403. p = ((char *) bh->b_data) + (j >> 3);
  404. r = memscan(p, 0, (EXT2_BLOCKS_PER_GROUP(sb) - j + 7) >> 3);
  405. k = (r - ((char *) bh->b_data)) << 3;
  406. if (k < EXT2_BLOCKS_PER_GROUP(sb)) {
  407. j = k;
  408. goto search_back;
  409. }
  410. k = ext2_find_next_zero_bit ((unsigned long *) bh->b_data, 
  411. EXT2_BLOCKS_PER_GROUP(sb),
  412. j);
  413. if (k < EXT2_BLOCKS_PER_GROUP(sb)) {
  414. j = k;
  415. goto got_block;
  416. }
  417. }
  418. ext2_debug ("Bit not found in block group %d.n", i);
  419. /*
  420.  * Now search the rest of the groups.  We assume that 
  421.  * i and gdp correctly point to the last group visited.
  422.  */
  423. for (k = 0; k < sb->u.ext2_sb.s_groups_count; k++) {
  424. i++;
  425. if (i >= sb->u.ext2_sb.s_groups_count)
  426. i = 0;
  427. gdp = ext2_get_group_desc (sb, i, &bh2);
  428. if (!gdp)
  429. goto io_error;
  430. if (le16_to_cpu(gdp->bg_free_blocks_count) > 0)
  431. break;
  432. }
  433. if (k >= sb->u.ext2_sb.s_groups_count)
  434. goto out;
  435. bitmap_nr = load_block_bitmap (sb, i);
  436. if (bitmap_nr < 0)
  437. goto io_error;
  438. bh = sb->u.ext2_sb.s_block_bitmap[bitmap_nr];
  439. r = memscan(bh->b_data, 0, EXT2_BLOCKS_PER_GROUP(sb) >> 3);
  440. j = (r - bh->b_data) << 3;
  441. if (j < EXT2_BLOCKS_PER_GROUP(sb))
  442. goto search_back;
  443. else
  444. j = ext2_find_first_zero_bit ((unsigned long *) bh->b_data,
  445.  EXT2_BLOCKS_PER_GROUP(sb));
  446. if (j >= EXT2_BLOCKS_PER_GROUP(sb)) {
  447. ext2_error (sb, "ext2_new_block",
  448.     "Free blocks count corrupted for block group %d", i);
  449. goto out;
  450. }
  451. search_back:
  452. /* 
  453.  * We have succeeded in finding a free byte in the block
  454.  * bitmap.  Now search backwards up to 7 bits to find the
  455.  * start of this group of free blocks.
  456.  */
  457. for (k = 0; k < 7 && j > 0 && !ext2_test_bit (j - 1, bh->b_data); k++, j--);
  458. got_block:
  459. ext2_debug ("using block group %d(%d)n", i, gdp->bg_free_blocks_count);
  460. /*
  461.  * Check quota for allocation of this block.
  462.  */
  463. if(DQUOT_ALLOC_BLOCK(inode, 1)) {
  464. *err = -EDQUOT;
  465. goto out;
  466. }
  467. tmp = j + i * EXT2_BLOCKS_PER_GROUP(sb) + le32_to_cpu(es->s_first_data_block);
  468. if (tmp == le32_to_cpu(gdp->bg_block_bitmap) ||
  469.     tmp == le32_to_cpu(gdp->bg_inode_bitmap) ||
  470.     in_range (tmp, le32_to_cpu(gdp->bg_inode_table),
  471.       sb->u.ext2_sb.s_itb_per_group))
  472. ext2_error (sb, "ext2_new_block",
  473.     "Allocating block in system zone - "
  474.     "block = %u", tmp);
  475. if (ext2_set_bit (j, bh->b_data)) {
  476. ext2_warning (sb, "ext2_new_block",
  477.       "bit already set for block %d", j);
  478. DQUOT_FREE_BLOCK(inode, 1);
  479. goto repeat;
  480. }
  481. ext2_debug ("found bit %dn", j);
  482. /*
  483.  * Do block preallocation now if required.
  484.  */
  485. #ifdef EXT2_PREALLOCATE
  486. /* Writer: ->i_prealloc* */
  487. if (prealloc_count && !*prealloc_count) {
  488. int prealloc_goal;
  489. unsigned long next_block = tmp + 1;
  490. prealloc_goal = es->s_prealloc_blocks ?
  491. es->s_prealloc_blocks : EXT2_DEFAULT_PREALLOC_BLOCKS;
  492. *prealloc_block = next_block;
  493. /* Writer: end */
  494. for (k = 1;
  495.      k < prealloc_goal && (j + k) < EXT2_BLOCKS_PER_GROUP(sb);
  496.      k++, next_block++) {
  497. if (DQUOT_PREALLOC_BLOCK(inode, 1))
  498. break;
  499. /* Writer: ->i_prealloc* */
  500. if (*prealloc_block + *prealloc_count != next_block ||
  501.     ext2_set_bit (j + k, bh->b_data)) {
  502. /* Writer: end */
  503. DQUOT_FREE_BLOCK(inode, 1);
  504.   break;
  505. }
  506. (*prealloc_count)++;
  507. /* Writer: end */
  508. }
  509. /*
  510.  * As soon as we go for per-group spinlocks we'll need these
  511.  * done inside the loop above.
  512.  */
  513. gdp->bg_free_blocks_count =
  514. cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count) -
  515.        (k - 1));
  516. es->s_free_blocks_count =
  517. cpu_to_le32(le32_to_cpu(es->s_free_blocks_count) -
  518.        (k - 1));
  519. ext2_debug ("Preallocated a further %lu bits.n",
  520.        (k - 1));
  521. }
  522. #endif
  523. j = tmp;
  524. mark_buffer_dirty(bh);
  525. if (sb->s_flags & MS_SYNCHRONOUS) {
  526. ll_rw_block (WRITE, 1, &bh);
  527. wait_on_buffer (bh);
  528. }
  529. if (j >= le32_to_cpu(es->s_blocks_count)) {
  530. ext2_error (sb, "ext2_new_block",
  531.     "block(%d) >= blocks count(%d) - "
  532.     "block_group = %d, es == %p ",j,
  533. le32_to_cpu(es->s_blocks_count), i, es);
  534. goto out;
  535. }
  536. ext2_debug ("allocating block %d. "
  537.     "Goal hits %d of %d.n", j, goal_hits, goal_attempts);
  538. gdp->bg_free_blocks_count = cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count) - 1);
  539. mark_buffer_dirty(bh2);
  540. es->s_free_blocks_count = cpu_to_le32(le32_to_cpu(es->s_free_blocks_count) - 1);
  541. mark_buffer_dirty(sb->u.ext2_sb.s_sbh);
  542. sb->s_dirt = 1;
  543. unlock_super (sb);
  544. *err = 0;
  545. return j;
  546. io_error:
  547. *err = -EIO;
  548. out:
  549. unlock_super (sb);
  550. return 0;
  551. }
  552. unsigned long ext2_count_free_blocks (struct super_block * sb)
  553. {
  554. #ifdef EXT2FS_DEBUG
  555. struct ext2_super_block * es;
  556. unsigned long desc_count, bitmap_count, x;
  557. int bitmap_nr;
  558. struct ext2_group_desc * gdp;
  559. int i;
  560. lock_super (sb);
  561. es = sb->u.ext2_sb.s_es;
  562. desc_count = 0;
  563. bitmap_count = 0;
  564. gdp = NULL;
  565. for (i = 0; i < sb->u.ext2_sb.s_groups_count; i++) {
  566. gdp = ext2_get_group_desc (sb, i, NULL);
  567. if (!gdp)
  568. continue;
  569. desc_count += le16_to_cpu(gdp->bg_free_blocks_count);
  570. bitmap_nr = load_block_bitmap (sb, i);
  571. if (bitmap_nr < 0)
  572. continue;
  573. x = ext2_count_free (sb->u.ext2_sb.s_block_bitmap[bitmap_nr],
  574.      sb->s_blocksize);
  575. printk ("group %d: stored = %d, counted = %lun",
  576. i, le16_to_cpu(gdp->bg_free_blocks_count), x);
  577. bitmap_count += x;
  578. }
  579. printk("ext2_count_free_blocks: stored = %lu, computed = %lu, %lun",
  580.        le32_to_cpu(es->s_free_blocks_count), desc_count, bitmap_count);
  581. unlock_super (sb);
  582. return bitmap_count;
  583. #else
  584. return le32_to_cpu(sb->u.ext2_sb.s_es->s_free_blocks_count);
  585. #endif
  586. }
  587. static inline int block_in_use (unsigned long block,
  588. struct super_block * sb,
  589. unsigned char * map)
  590. {
  591. return ext2_test_bit ((block - le32_to_cpu(sb->u.ext2_sb.s_es->s_first_data_block)) %
  592.  EXT2_BLOCKS_PER_GROUP(sb), map);
  593. }
  594. static inline int test_root(int a, int b)
  595. {
  596. if (a == 0)
  597. return 1;
  598. while (1) {
  599. if (a == 1)
  600. return 1;
  601. if (a % b)
  602. return 0;
  603. a = a / b;
  604. }
  605. }
  606. int ext2_group_sparse(int group)
  607. {
  608. return (test_root(group, 3) || test_root(group, 5) ||
  609. test_root(group, 7));
  610. }
  611. /**
  612.  * ext2_bg_has_super - number of blocks used by the superblock in group
  613.  * @sb: superblock for filesystem
  614.  * @group: group number to check
  615.  *
  616.  * Return the number of blocks used by the superblock (primary or backup)
  617.  * in this group.  Currently this will be only 0 or 1.
  618.  */
  619. int ext2_bg_has_super(struct super_block *sb, int group)
  620. {
  621. if (EXT2_HAS_RO_COMPAT_FEATURE(sb,EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER)&&
  622.     !ext2_group_sparse(group))
  623. return 0;
  624. return 1;
  625. }
  626. /**
  627.  * ext2_bg_num_gdb - number of blocks used by the group table in group
  628.  * @sb: superblock for filesystem
  629.  * @group: group number to check
  630.  *
  631.  * Return the number of blocks used by the group descriptor table
  632.  * (primary or backup) in this group.  In the future there may be a
  633.  * different number of descriptor blocks in each group.
  634.  */
  635. unsigned long ext2_bg_num_gdb(struct super_block *sb, int group)
  636. {
  637. if (EXT2_HAS_RO_COMPAT_FEATURE(sb,EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER)&&
  638.     !ext2_group_sparse(group))
  639. return 0;
  640. return EXT2_SB(sb)->s_gdb_count;
  641. }
  642. #ifdef CONFIG_EXT2_CHECK
  643. /* Called at mount-time, super-block is locked */
  644. void ext2_check_blocks_bitmap (struct super_block * sb)
  645. {
  646. struct buffer_head * bh;
  647. struct ext2_super_block * es;
  648. unsigned long desc_count, bitmap_count, x, j;
  649. unsigned long desc_blocks;
  650. int bitmap_nr;
  651. struct ext2_group_desc * gdp;
  652. int i;
  653. es = sb->u.ext2_sb.s_es;
  654. desc_count = 0;
  655. bitmap_count = 0;
  656. gdp = NULL;
  657. for (i = 0; i < sb->u.ext2_sb.s_groups_count; i++) {
  658. gdp = ext2_get_group_desc (sb, i, NULL);
  659. if (!gdp)
  660. continue;
  661. desc_count += le16_to_cpu(gdp->bg_free_blocks_count);
  662. bitmap_nr = load_block_bitmap (sb, i);
  663. if (bitmap_nr < 0)
  664. continue;
  665. bh = EXT2_SB(sb)->s_block_bitmap[bitmap_nr];
  666. if (ext2_bg_has_super(sb, i) && !ext2_test_bit(0, bh->b_data))
  667. ext2_error(sb, __FUNCTION__,
  668.    "Superblock in group %d is marked free", i);
  669. desc_blocks = ext2_bg_num_gdb(sb, i);
  670. for (j = 0; j < desc_blocks; j++)
  671. if (!ext2_test_bit(j + 1, bh->b_data))
  672. ext2_error(sb, __FUNCTION__,
  673.    "Descriptor block #%ld in group "
  674.    "%d is marked free", j, i);
  675. if (!block_in_use (le32_to_cpu(gdp->bg_block_bitmap), sb, bh->b_data))
  676. ext2_error (sb, "ext2_check_blocks_bitmap",
  677.     "Block bitmap for group %d is marked free",
  678.     i);
  679. if (!block_in_use (le32_to_cpu(gdp->bg_inode_bitmap), sb, bh->b_data))
  680. ext2_error (sb, "ext2_check_blocks_bitmap",
  681.     "Inode bitmap for group %d is marked free",
  682.     i);
  683. for (j = 0; j < sb->u.ext2_sb.s_itb_per_group; j++)
  684. if (!block_in_use (le32_to_cpu(gdp->bg_inode_table) + j, sb, bh->b_data))
  685. ext2_error (sb, "ext2_check_blocks_bitmap",
  686.     "Block #%ld of the inode table in "
  687.     "group %d is marked free", j, i);
  688. x = ext2_count_free (bh, sb->s_blocksize);
  689. if (le16_to_cpu(gdp->bg_free_blocks_count) != x)
  690. ext2_error (sb, "ext2_check_blocks_bitmap",
  691.     "Wrong free blocks count for group %d, "
  692.     "stored = %d, counted = %lu", i,
  693.     le16_to_cpu(gdp->bg_free_blocks_count), x);
  694. bitmap_count += x;
  695. }
  696. if (le32_to_cpu(es->s_free_blocks_count) != bitmap_count)
  697. ext2_error (sb, "ext2_check_blocks_bitmap",
  698.     "Wrong free blocks count in super block, "
  699.     "stored = %lu, counted = %lu",
  700.     (unsigned long) le32_to_cpu(es->s_free_blocks_count), bitmap_count);
  701. }
  702. #endif