balloc.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:29k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/fs/ext3/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@redhat.com), 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/sched.h>
  15. #include <linux/fs.h>
  16. #include <linux/jbd.h>
  17. #include <linux/ext3_fs.h>
  18. #include <linux/ext3_jbd.h>
  19. #include <linux/locks.h>
  20. #include <linux/quotaops.h>
  21. /*
  22.  * balloc.c contains the blocks allocation and deallocation routines
  23.  */
  24. /*
  25.  * The free blocks are managed by bitmaps.  A file system contains several
  26.  * blocks groups.  Each group contains 1 bitmap block for blocks, 1 bitmap
  27.  * block for inodes, N blocks for the inode table and data blocks.
  28.  *
  29.  * The file system contains group descriptors which are located after the
  30.  * super block.  Each descriptor contains the number of the bitmap block and
  31.  * the free blocks count in the block.  The descriptors are loaded in memory
  32.  * when a file system is mounted (see ext3_read_super).
  33.  */
  34. #define in_range(b, first, len) ((b) >= (first) && (b) <= (first) + (len) - 1)
  35. struct ext3_group_desc * ext3_get_group_desc(struct super_block * sb,
  36.      unsigned int block_group,
  37.      struct buffer_head ** bh)
  38. {
  39. unsigned long group_desc;
  40. unsigned long desc;
  41. struct ext3_group_desc * gdp;
  42. if (block_group >= sb->u.ext3_sb.s_groups_count) {
  43. ext3_error (sb, "ext3_get_group_desc",
  44.     "block_group >= groups_count - "
  45.     "block_group = %d, groups_count = %lu",
  46.     block_group, sb->u.ext3_sb.s_groups_count);
  47. return NULL;
  48. }
  49. group_desc = block_group / EXT3_DESC_PER_BLOCK(sb);
  50. desc = block_group % EXT3_DESC_PER_BLOCK(sb);
  51. if (!sb->u.ext3_sb.s_group_desc[group_desc]) {
  52. ext3_error (sb, "ext3_get_group_desc",
  53.     "Group descriptor not loaded - "
  54.     "block_group = %d, group_desc = %lu, desc = %lu",
  55.      block_group, group_desc, desc);
  56. return NULL;
  57. }
  58. gdp = (struct ext3_group_desc *) 
  59.       sb->u.ext3_sb.s_group_desc[group_desc]->b_data;
  60. if (bh)
  61. *bh = sb->u.ext3_sb.s_group_desc[group_desc];
  62. return gdp + desc;
  63. }
  64. /*
  65.  * Read the bitmap for a given block_group, reading into the specified 
  66.  * slot in the superblock's bitmap cache.
  67.  *
  68.  * Return >=0 on success or a -ve error code.
  69.  */
  70. static int read_block_bitmap (struct super_block * sb,
  71.        unsigned int block_group,
  72.        unsigned long bitmap_nr)
  73. {
  74. struct ext3_group_desc * gdp;
  75. struct buffer_head * bh = NULL;
  76. int retval = -EIO;
  77. gdp = ext3_get_group_desc (sb, block_group, NULL);
  78. if (!gdp)
  79. goto error_out;
  80. retval = 0;
  81. bh = sb_bread(sb, le32_to_cpu(gdp->bg_block_bitmap));
  82. if (!bh) {
  83. ext3_error (sb, "read_block_bitmap",
  84.     "Cannot read block bitmap - "
  85.     "block_group = %d, block_bitmap = %lu",
  86.     block_group, (unsigned long) gdp->bg_block_bitmap);
  87. retval = -EIO;
  88. }
  89. /*
  90.  * On IO error, just leave a zero in the superblock's block pointer for
  91.  * this group.  The IO will be retried next time.
  92.  */
  93. error_out:
  94. sb->u.ext3_sb.s_block_bitmap_number[bitmap_nr] = block_group;
  95. sb->u.ext3_sb.s_block_bitmap[bitmap_nr] = bh;
  96. return retval;
  97. }
  98. /*
  99.  * load_block_bitmap loads the block bitmap for a blocks group
  100.  *
  101.  * It maintains a cache for the last bitmaps loaded.  This cache is managed
  102.  * with a LRU algorithm.
  103.  *
  104.  * Notes:
  105.  * 1/ There is one cache per mounted file system.
  106.  * 2/ If the file system contains less than EXT3_MAX_GROUP_LOADED groups,
  107.  *    this function reads the bitmap without maintaining a LRU cache.
  108.  * 
  109.  * Return the slot used to store the bitmap, or a -ve error code.
  110.  */
  111. static int __load_block_bitmap (struct super_block * sb,
  112.         unsigned int block_group)
  113. {
  114. int i, j, retval = 0;
  115. unsigned long block_bitmap_number;
  116. struct buffer_head * block_bitmap;
  117. if (block_group >= sb->u.ext3_sb.s_groups_count)
  118. ext3_panic (sb, "load_block_bitmap",
  119.     "block_group >= groups_count - "
  120.     "block_group = %d, groups_count = %lu",
  121.     block_group, sb->u.ext3_sb.s_groups_count);
  122. if (sb->u.ext3_sb.s_groups_count <= EXT3_MAX_GROUP_LOADED) {
  123. if (sb->u.ext3_sb.s_block_bitmap[block_group]) {
  124. if (sb->u.ext3_sb.s_block_bitmap_number[block_group] ==
  125.     block_group)
  126. return block_group;
  127. ext3_error (sb, "__load_block_bitmap",
  128.     "block_group != block_bitmap_number");
  129. }
  130. retval = read_block_bitmap (sb, block_group, block_group);
  131. if (retval < 0)
  132. return retval;
  133. return block_group;
  134. }
  135. for (i = 0; i < sb->u.ext3_sb.s_loaded_block_bitmaps &&
  136.     sb->u.ext3_sb.s_block_bitmap_number[i] != block_group; i++)
  137. ;
  138. if (i < sb->u.ext3_sb.s_loaded_block_bitmaps &&
  139.        sb->u.ext3_sb.s_block_bitmap_number[i] == block_group) {
  140. block_bitmap_number = sb->u.ext3_sb.s_block_bitmap_number[i];
  141. block_bitmap = sb->u.ext3_sb.s_block_bitmap[i];
  142. for (j = i; j > 0; j--) {
  143. sb->u.ext3_sb.s_block_bitmap_number[j] =
  144. sb->u.ext3_sb.s_block_bitmap_number[j - 1];
  145. sb->u.ext3_sb.s_block_bitmap[j] =
  146. sb->u.ext3_sb.s_block_bitmap[j - 1];
  147. }
  148. sb->u.ext3_sb.s_block_bitmap_number[0] = block_bitmap_number;
  149. sb->u.ext3_sb.s_block_bitmap[0] = block_bitmap;
  150. /*
  151.  * There's still one special case here --- if block_bitmap == 0
  152.  * then our last attempt to read the bitmap failed and we have
  153.  * just ended up caching that failure.  Try again to read it.
  154.  */
  155. if (!block_bitmap)
  156. retval = read_block_bitmap (sb, block_group, 0);
  157. } else {
  158. if (sb->u.ext3_sb.s_loaded_block_bitmaps<EXT3_MAX_GROUP_LOADED)
  159. sb->u.ext3_sb.s_loaded_block_bitmaps++;
  160. else
  161. brelse (sb->u.ext3_sb.s_block_bitmap
  162. [EXT3_MAX_GROUP_LOADED - 1]);
  163. for (j = sb->u.ext3_sb.s_loaded_block_bitmaps - 1;
  164. j > 0;  j--) {
  165. sb->u.ext3_sb.s_block_bitmap_number[j] =
  166. sb->u.ext3_sb.s_block_bitmap_number[j - 1];
  167. sb->u.ext3_sb.s_block_bitmap[j] =
  168. sb->u.ext3_sb.s_block_bitmap[j - 1];
  169. }
  170. retval = read_block_bitmap (sb, block_group, 0);
  171. }
  172. return retval;
  173. }
  174. /*
  175.  * Load the block bitmap for a given block group.  First of all do a couple
  176.  * of fast lookups for common cases and then pass the request onto the guts
  177.  * of the bitmap loader.
  178.  *
  179.  * Return the slot number of the group in the superblock bitmap cache's on
  180.  * success, or a -ve error code.
  181.  *
  182.  * There is still one inconsistency here --- if the number of groups in this
  183.  * filesystems is <= EXT3_MAX_GROUP_LOADED, then we have no way of 
  184.  * differentiating between a group for which we have never performed a bitmap
  185.  * IO request, and a group for which the last bitmap read request failed.
  186.  */
  187. static inline int load_block_bitmap (struct super_block * sb,
  188.      unsigned int block_group)
  189. {
  190. int slot;
  191. /*
  192.  * Do the lookup for the slot.  First of all, check if we're asking
  193.  * for the same slot as last time, and did we succeed that last time?
  194.  */
  195. if (sb->u.ext3_sb.s_loaded_block_bitmaps > 0 &&
  196.     sb->u.ext3_sb.s_block_bitmap_number[0] == block_group &&
  197.     sb->u.ext3_sb.s_block_bitmap[0]) {
  198. return 0;
  199. }
  200. /*
  201.  * Or can we do a fast lookup based on a loaded group on a filesystem
  202.  * small enough to be mapped directly into the superblock?
  203.  */
  204. else if (sb->u.ext3_sb.s_groups_count <= EXT3_MAX_GROUP_LOADED && 
  205.  sb->u.ext3_sb.s_block_bitmap_number[block_group]==block_group
  206. && sb->u.ext3_sb.s_block_bitmap[block_group]) {
  207. slot = block_group;
  208. }
  209. /*
  210.  * If not, then do a full lookup for this block group.
  211.  */
  212. else {
  213. slot = __load_block_bitmap (sb, block_group);
  214. }
  215. /*
  216.  * <0 means we just got an error
  217.  */
  218. if (slot < 0)
  219. return slot;
  220. /*
  221.  * If it's a valid slot, we may still have cached a previous IO error,
  222.  * in which case the bh in the superblock cache will be zero.
  223.  */
  224. if (!sb->u.ext3_sb.s_block_bitmap[slot])
  225. return -EIO;
  226. /*
  227.  * Must have been read in OK to get this far.
  228.  */
  229. return slot;
  230. }
  231. /* Free given blocks, update quota and i_blocks field */
  232. void ext3_free_blocks (handle_t *handle, struct inode * inode,
  233. unsigned long block, unsigned long count)
  234. {
  235. struct buffer_head *bitmap_bh;
  236. struct buffer_head *gd_bh;
  237. unsigned long block_group;
  238. unsigned long bit;
  239. unsigned long i;
  240. int bitmap_nr;
  241. unsigned long overflow;
  242. struct super_block * sb;
  243. struct ext3_group_desc * gdp;
  244. struct ext3_super_block * es;
  245. int err = 0, ret;
  246. int dquot_freed_blocks = 0;
  247. sb = inode->i_sb;
  248. if (!sb) {
  249. printk ("ext3_free_blocks: nonexistent device");
  250. return;
  251. }
  252. lock_super (sb);
  253. es = sb->u.ext3_sb.s_es;
  254. if (block < le32_to_cpu(es->s_first_data_block) || 
  255.     (block + count) > le32_to_cpu(es->s_blocks_count)) {
  256. ext3_error (sb, "ext3_free_blocks",
  257.     "Freeing blocks not in datazone - "
  258.     "block = %lu, count = %lu", block, count);
  259. goto error_return;
  260. }
  261. ext3_debug ("freeing block %lun", block);
  262. do_more:
  263. overflow = 0;
  264. block_group = (block - le32_to_cpu(es->s_first_data_block)) /
  265.       EXT3_BLOCKS_PER_GROUP(sb);
  266. bit = (block - le32_to_cpu(es->s_first_data_block)) %
  267.       EXT3_BLOCKS_PER_GROUP(sb);
  268. /*
  269.  * Check to see if we are freeing blocks across a group
  270.  * boundary.
  271.  */
  272. if (bit + count > EXT3_BLOCKS_PER_GROUP(sb)) {
  273. overflow = bit + count - EXT3_BLOCKS_PER_GROUP(sb);
  274. count -= overflow;
  275. }
  276. bitmap_nr = load_block_bitmap (sb, block_group);
  277. if (bitmap_nr < 0)
  278. goto error_return;
  279. bitmap_bh = sb->u.ext3_sb.s_block_bitmap[bitmap_nr];
  280. gdp = ext3_get_group_desc (sb, block_group, &gd_bh);
  281. if (!gdp)
  282. goto error_return;
  283. if (in_range (le32_to_cpu(gdp->bg_block_bitmap), block, count) ||
  284.     in_range (le32_to_cpu(gdp->bg_inode_bitmap), block, count) ||
  285.     in_range (block, le32_to_cpu(gdp->bg_inode_table),
  286.       sb->u.ext3_sb.s_itb_per_group) ||
  287.     in_range (block + count - 1, le32_to_cpu(gdp->bg_inode_table),
  288.       sb->u.ext3_sb.s_itb_per_group))
  289. ext3_error (sb, "ext3_free_blocks",
  290.     "Freeing blocks in system zones - "
  291.     "Block = %lu, count = %lu",
  292.     block, count);
  293. /*
  294.  * We are about to start releasing blocks in the bitmap,
  295.  * so we need undo access.
  296.  */
  297. /* @@@ check errors */
  298. BUFFER_TRACE(bitmap_bh, "getting undo access");
  299. err = ext3_journal_get_undo_access(handle, bitmap_bh);
  300. if (err)
  301. goto error_return;
  302. /*
  303.  * We are about to modify some metadata.  Call the journal APIs
  304.  * to unshare ->b_data if a currently-committing transaction is
  305.  * using it
  306.  */
  307. BUFFER_TRACE(gd_bh, "get_write_access");
  308. err = ext3_journal_get_write_access(handle, gd_bh);
  309. if (err)
  310. goto error_return;
  311. BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get_write_access");
  312. err = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
  313. if (err)
  314. goto error_return;
  315. for (i = 0; i < count; i++) {
  316. /*
  317.  * An HJ special.  This is expensive...
  318.  */
  319. #ifdef CONFIG_JBD_DEBUG
  320. {
  321. struct buffer_head *debug_bh;
  322. debug_bh = sb_get_hash_table(sb, block + i);
  323. if (debug_bh) {
  324. BUFFER_TRACE(debug_bh, "Deleted!");
  325. if (!bh2jh(bitmap_bh)->b_committed_data)
  326. BUFFER_TRACE(debug_bh,
  327. "No commited data in bitmap");
  328. BUFFER_TRACE2(debug_bh, bitmap_bh, "bitmap");
  329. __brelse(debug_bh);
  330. }
  331. }
  332. #endif
  333. BUFFER_TRACE(bitmap_bh, "clear bit");
  334. if (!ext3_clear_bit (bit + i, bitmap_bh->b_data)) {
  335. ext3_error (sb, __FUNCTION__,
  336.       "bit already cleared for block %lu", 
  337.       block + i);
  338. BUFFER_TRACE(bitmap_bh, "bit already cleared");
  339. } else {
  340. dquot_freed_blocks++;
  341. gdp->bg_free_blocks_count =
  342.   cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count)+1);
  343. es->s_free_blocks_count =
  344.   cpu_to_le32(le32_to_cpu(es->s_free_blocks_count)+1);
  345. }
  346. /* @@@ This prevents newly-allocated data from being
  347.  * freed and then reallocated within the same
  348.  * transaction. 
  349.  * 
  350.  * Ideally we would want to allow that to happen, but to
  351.  * do so requires making journal_forget() capable of
  352.  * revoking the queued write of a data block, which
  353.  * implies blocking on the journal lock.  *forget()
  354.  * cannot block due to truncate races.
  355.  *
  356.  * Eventually we can fix this by making journal_forget()
  357.  * return a status indicating whether or not it was able
  358.  * to revoke the buffer.  On successful revoke, it is
  359.  * safe not to set the allocation bit in the committed
  360.  * bitmap, because we know that there is no outstanding
  361.  * activity on the buffer any more and so it is safe to
  362.  * reallocate it.  
  363.  */
  364. BUFFER_TRACE(bitmap_bh, "clear in b_committed_data");
  365. J_ASSERT_BH(bitmap_bh,
  366. bh2jh(bitmap_bh)->b_committed_data != NULL);
  367. ext3_set_bit(bit + i, bh2jh(bitmap_bh)->b_committed_data);
  368. }
  369. /* We dirtied the bitmap block */
  370. BUFFER_TRACE(bitmap_bh, "dirtied bitmap block");
  371. err = ext3_journal_dirty_metadata(handle, bitmap_bh);
  372. /* And the group descriptor block */
  373. BUFFER_TRACE(gd_bh, "dirtied group descriptor block");
  374. ret = ext3_journal_dirty_metadata(handle, gd_bh);
  375. if (!err) err = ret;
  376. /* And the superblock */
  377. BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "dirtied superblock");
  378. ret = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
  379. if (!err) err = ret;
  380. if (overflow && !err) {
  381. block += count;
  382. count = overflow;
  383. goto do_more;
  384. }
  385. sb->s_dirt = 1;
  386. error_return:
  387. ext3_std_error(sb, err);
  388. unlock_super(sb);
  389. if (dquot_freed_blocks)
  390. DQUOT_FREE_BLOCK(inode, dquot_freed_blocks);
  391. return;
  392. }
  393. /* For ext3 allocations, we must not reuse any blocks which are
  394.  * allocated in the bitmap buffer's "last committed data" copy.  This
  395.  * prevents deletes from freeing up the page for reuse until we have
  396.  * committed the delete transaction.
  397.  *
  398.  * If we didn't do this, then deleting something and reallocating it as
  399.  * data would allow the old block to be overwritten before the
  400.  * transaction committed (because we force data to disk before commit).
  401.  * This would lead to corruption if we crashed between overwriting the
  402.  * data and committing the delete. 
  403.  *
  404.  * @@@ We may want to make this allocation behaviour conditional on
  405.  * data-writes at some point, and disable it for metadata allocations or
  406.  * sync-data inodes.
  407.  */
  408. static int ext3_test_allocatable(int nr, struct buffer_head *bh)
  409. {
  410. if (ext3_test_bit(nr, bh->b_data))
  411. return 0;
  412. if (!buffer_jbd(bh) || !bh2jh(bh)->b_committed_data)
  413. return 1;
  414. return !ext3_test_bit(nr, bh2jh(bh)->b_committed_data);
  415. }
  416. /*
  417.  * Find an allocatable block in a bitmap.  We honour both the bitmap and
  418.  * its last-committed copy (if that exists), and perform the "most
  419.  * appropriate allocation" algorithm of looking for a free block near
  420.  * the initial goal; then for a free byte somewhere in the bitmap; then
  421.  * for any free bit in the bitmap.
  422.  */
  423. static int find_next_usable_block(int start,
  424. struct buffer_head *bh, int maxblocks)
  425. {
  426. int here, next;
  427. char *p, *r;
  428. if (start > 0) {
  429. /*
  430.  * The goal was occupied; search forward for a free 
  431.  * block within the next XX blocks.
  432.  *
  433.  * end_goal is more or less random, but it has to be
  434.  * less than EXT3_BLOCKS_PER_GROUP. Aligning up to the
  435.  * next 64-bit boundary is simple..
  436.  */
  437. int end_goal = (start + 63) & ~63;
  438. here = ext3_find_next_zero_bit(bh->b_data, end_goal, start);
  439. if (here < end_goal && ext3_test_allocatable(here, bh))
  440. return here;
  441. ext3_debug ("Bit not found near goaln");
  442. }
  443. here = start;
  444. if (here < 0)
  445. here = 0;
  446. /*
  447.  * There has been no free block found in the near vicinity of
  448.  * the goal: do a search forward through the block groups,
  449.  * searching in each group first for an entire free byte in the
  450.  * bitmap and then for any free bit.
  451.  * 
  452.  * Search first in the remainder of the current group 
  453.  */
  454. p = ((char *) bh->b_data) + (here >> 3);
  455. r = memscan(p, 0, (maxblocks - here + 7) >> 3);
  456. next = (r - ((char *) bh->b_data)) << 3;
  457. if (next < maxblocks && ext3_test_allocatable(next, bh))
  458. return next;
  459. /* The bitmap search --- search forward alternately
  460.  * through the actual bitmap and the last-committed copy
  461.  * until we find a bit free in both. */
  462. while (here < maxblocks) {
  463. next  = ext3_find_next_zero_bit ((unsigned long *) bh->b_data, 
  464.  maxblocks, here);
  465. if (next >= maxblocks)
  466. return -1;
  467. if (ext3_test_allocatable(next, bh))
  468. return next;
  469. J_ASSERT_BH(bh, bh2jh(bh)->b_committed_data);
  470. here = ext3_find_next_zero_bit
  471. ((unsigned long *) bh2jh(bh)->b_committed_data, 
  472.  maxblocks, next);
  473. }
  474. return -1;
  475. }
  476. /*
  477.  * ext3_new_block uses a goal block to assist allocation.  If the goal is
  478.  * free, or there is a free block within 32 blocks of the goal, that block
  479.  * is allocated.  Otherwise a forward search is made for a free block; within 
  480.  * each block group the search first looks for an entire free byte in the block
  481.  * bitmap, and then for any free bit if that fails.
  482.  * This function also updates quota and i_blocks field.
  483.  */
  484. int ext3_new_block (handle_t *handle, struct inode * inode,
  485. unsigned long goal, u32 * prealloc_count,
  486. u32 * prealloc_block, int * errp)
  487. {
  488. struct buffer_head * bh, *bhtmp;
  489. struct buffer_head * bh2;
  490. #if 0
  491. char * p, * r;
  492. #endif
  493. int i, j, k, tmp, alloctmp;
  494. int bitmap_nr;
  495. int fatal = 0, err;
  496. int performed_allocation = 0;
  497. struct super_block * sb;
  498. struct ext3_group_desc * gdp;
  499. struct ext3_super_block * es;
  500. #ifdef EXT3FS_DEBUG
  501. static int goal_hits = 0, goal_attempts = 0;
  502. #endif
  503. *errp = -ENOSPC;
  504. sb = inode->i_sb;
  505. if (!sb) {
  506. printk ("ext3_new_block: nonexistent device");
  507. return 0;
  508. }
  509. /*
  510.  * Check quota for allocation of this block.
  511.  */
  512. if (DQUOT_ALLOC_BLOCK(inode, 1)) {
  513. *errp = -EDQUOT;
  514. return 0;
  515. }
  516. lock_super (sb);
  517. es = sb->u.ext3_sb.s_es;
  518. if (le32_to_cpu(es->s_free_blocks_count) <=
  519. le32_to_cpu(es->s_r_blocks_count) &&
  520.     ((sb->u.ext3_sb.s_resuid != current->fsuid) &&
  521.      (sb->u.ext3_sb.s_resgid == 0 ||
  522.       !in_group_p (sb->u.ext3_sb.s_resgid)) && 
  523.      !capable(CAP_SYS_RESOURCE)))
  524. goto out;
  525. ext3_debug ("goal=%lu.n", goal);
  526. /*
  527.  * First, test whether the goal block is free.
  528.  */
  529. if (goal < le32_to_cpu(es->s_first_data_block) ||
  530.     goal >= le32_to_cpu(es->s_blocks_count))
  531. goal = le32_to_cpu(es->s_first_data_block);
  532. i = (goal - le32_to_cpu(es->s_first_data_block)) /
  533. EXT3_BLOCKS_PER_GROUP(sb);
  534. gdp = ext3_get_group_desc (sb, i, &bh2);
  535. if (!gdp)
  536. goto io_error;
  537. if (le16_to_cpu(gdp->bg_free_blocks_count) > 0) {
  538. j = ((goal - le32_to_cpu(es->s_first_data_block)) %
  539. EXT3_BLOCKS_PER_GROUP(sb));
  540. #ifdef EXT3FS_DEBUG
  541. if (j)
  542. goal_attempts++;
  543. #endif
  544. bitmap_nr = load_block_bitmap (sb, i);
  545. if (bitmap_nr < 0)
  546. goto io_error;
  547. bh = sb->u.ext3_sb.s_block_bitmap[bitmap_nr];
  548. ext3_debug ("goal is at %d:%d.n", i, j);
  549. if (ext3_test_allocatable(j, bh)) {
  550. #ifdef EXT3FS_DEBUG
  551. goal_hits++;
  552. ext3_debug ("goal bit allocated.n");
  553. #endif
  554. goto got_block;
  555. }
  556. j = find_next_usable_block(j, bh, EXT3_BLOCKS_PER_GROUP(sb));
  557. if (j >= 0)
  558. goto search_back;
  559. }
  560. ext3_debug ("Bit not found in block group %d.n", i);
  561. /*
  562.  * Now search the rest of the groups.  We assume that 
  563.  * i and gdp correctly point to the last group visited.
  564.  */
  565. for (k = 0; k < sb->u.ext3_sb.s_groups_count; k++) {
  566. i++;
  567. if (i >= sb->u.ext3_sb.s_groups_count)
  568. i = 0;
  569. gdp = ext3_get_group_desc (sb, i, &bh2);
  570. if (!gdp) {
  571. *errp = -EIO;
  572. goto out;
  573. }
  574. if (le16_to_cpu(gdp->bg_free_blocks_count) > 0) {
  575. bitmap_nr = load_block_bitmap (sb, i);
  576. if (bitmap_nr < 0)
  577. goto io_error;
  578. bh = sb->u.ext3_sb.s_block_bitmap[bitmap_nr];
  579. j = find_next_usable_block(-1, bh, 
  580.    EXT3_BLOCKS_PER_GROUP(sb));
  581. if (j >= 0) 
  582. goto search_back;
  583. }
  584. }
  585. /* No space left on the device */
  586. goto out;
  587. search_back:
  588. /* 
  589.  * We have succeeded in finding a free byte in the block
  590.  * bitmap.  Now search backwards up to 7 bits to find the
  591.  * start of this group of free blocks.
  592.  */
  593. for ( k = 0;
  594. k < 7 && j > 0 && ext3_test_allocatable(j - 1, bh);
  595. k++, j--)
  596. ;
  597. got_block:
  598. ext3_debug ("using block group %d(%d)n", i, gdp->bg_free_blocks_count);
  599. /* Make sure we use undo access for the bitmap, because it is
  600.            critical that we do the frozen_data COW on bitmap buffers in
  601.            all cases even if the buffer is in BJ_Forget state in the
  602.            committing transaction.  */
  603. BUFFER_TRACE(bh, "get undo access for marking new block");
  604. fatal = ext3_journal_get_undo_access(handle, bh);
  605. if (fatal) goto out;
  606. BUFFER_TRACE(bh2, "get_write_access");
  607. fatal = ext3_journal_get_write_access(handle, bh2);
  608. if (fatal) goto out;
  609. BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get_write_access");
  610. fatal = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
  611. if (fatal) goto out;
  612. tmp = j + i * EXT3_BLOCKS_PER_GROUP(sb)
  613. + le32_to_cpu(es->s_first_data_block);
  614. if (tmp == le32_to_cpu(gdp->bg_block_bitmap) ||
  615.     tmp == le32_to_cpu(gdp->bg_inode_bitmap) ||
  616.     in_range (tmp, le32_to_cpu(gdp->bg_inode_table),
  617.       sb->u.ext3_sb.s_itb_per_group))
  618. ext3_error (sb, "ext3_new_block",
  619.     "Allocating block in system zone - "
  620.     "block = %u", tmp);
  621. /* The superblock lock should guard against anybody else beating
  622.  * us to this point! */
  623. J_ASSERT_BH(bh, !ext3_test_bit(j, bh->b_data));
  624. BUFFER_TRACE(bh, "setting bitmap bit");
  625. ext3_set_bit(j, bh->b_data);
  626. performed_allocation = 1;
  627. #ifdef CONFIG_JBD_DEBUG
  628. {
  629. struct buffer_head *debug_bh;
  630. /* Record bitmap buffer state in the newly allocated block */
  631. debug_bh = sb_get_hash_table(sb, tmp);
  632. if (debug_bh) {
  633. BUFFER_TRACE(debug_bh, "state when allocated");
  634. BUFFER_TRACE2(debug_bh, bh, "bitmap state");
  635. brelse(debug_bh);
  636. }
  637. }
  638. #endif
  639. if (buffer_jbd(bh) && bh2jh(bh)->b_committed_data)
  640. J_ASSERT_BH(bh, !ext3_test_bit(j, bh2jh(bh)->b_committed_data));
  641. bhtmp = bh;
  642. alloctmp = j;
  643. ext3_debug ("found bit %dn", j);
  644. /*
  645.  * Do block preallocation now if required.
  646.  */
  647. #ifdef EXT3_PREALLOCATE
  648. /*
  649.  * akpm: this is not enabled for ext3.  Need to use
  650.  * ext3_test_allocatable()
  651.  */
  652. /* Writer: ->i_prealloc* */
  653. if (prealloc_count && !*prealloc_count) {
  654. int prealloc_goal;
  655. unsigned long next_block = tmp + 1;
  656. prealloc_goal = es->s_prealloc_blocks ?
  657. es->s_prealloc_blocks : EXT3_DEFAULT_PREALLOC_BLOCKS;
  658. *prealloc_block = next_block;
  659. /* Writer: end */
  660. for (k = 1;
  661.      k < prealloc_goal && (j + k) < EXT3_BLOCKS_PER_GROUP(sb);
  662.      k++, next_block++) {
  663. if (DQUOT_PREALLOC_BLOCK(inode, 1))
  664. break;
  665. /* Writer: ->i_prealloc* */
  666. if (*prealloc_block + *prealloc_count != next_block ||
  667.     ext3_set_bit (j + k, bh->b_data)) {
  668. /* Writer: end */
  669. DQUOT_FREE_BLOCK(inode, 1);
  670.   break;
  671. }
  672. (*prealloc_count)++;
  673. /* Writer: end */
  674. }
  675. /*
  676.  * As soon as we go for per-group spinlocks we'll need these
  677.  * done inside the loop above.
  678.  */
  679. gdp->bg_free_blocks_count =
  680. cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count) -
  681.        (k - 1));
  682. es->s_free_blocks_count =
  683. cpu_to_le32(le32_to_cpu(es->s_free_blocks_count) -
  684.        (k - 1));
  685. ext3_debug ("Preallocated a further %lu bits.n",
  686.        (k - 1));
  687. }
  688. #endif
  689. j = tmp;
  690. BUFFER_TRACE(bh, "journal_dirty_metadata for bitmap block");
  691. err = ext3_journal_dirty_metadata(handle, bh);
  692. if (!fatal) fatal = err;
  693. if (j >= le32_to_cpu(es->s_blocks_count)) {
  694. ext3_error (sb, "ext3_new_block",
  695.     "block(%d) >= blocks count(%d) - "
  696.     "block_group = %d, es == %p ",j,
  697. le32_to_cpu(es->s_blocks_count), i, es);
  698. goto out;
  699. }
  700. /*
  701.  * It is up to the caller to add the new buffer to a journal
  702.  * list of some description.  We don't know in advance whether
  703.  * the caller wants to use it as metadata or data.
  704.  */
  705. ext3_debug ("allocating block %d. "
  706.     "Goal hits %d of %d.n", j, goal_hits, goal_attempts);
  707. gdp->bg_free_blocks_count =
  708. cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count) - 1);
  709. es->s_free_blocks_count =
  710. cpu_to_le32(le32_to_cpu(es->s_free_blocks_count) - 1);
  711. BUFFER_TRACE(bh2, "journal_dirty_metadata for group descriptor");
  712. err = ext3_journal_dirty_metadata(handle, bh2);
  713. if (!fatal) fatal = err;
  714. BUFFER_TRACE(bh, "journal_dirty_metadata for superblock");
  715. err = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
  716. if (!fatal) fatal = err;
  717. sb->s_dirt = 1;
  718. if (fatal)
  719. goto out;
  720. unlock_super (sb);
  721. *errp = 0;
  722. return j;
  723. io_error:
  724. *errp = -EIO;
  725. out:
  726. if (fatal) {
  727. *errp = fatal;
  728. ext3_std_error(sb, fatal);
  729. }
  730. unlock_super (sb);
  731. /*
  732.  * Undo the block allocation
  733.  */
  734. if (!performed_allocation)
  735. DQUOT_FREE_BLOCK(inode, 1);
  736. return 0;
  737. }
  738. unsigned long ext3_count_free_blocks (struct super_block * sb)
  739. {
  740. #ifdef EXT3FS_DEBUG
  741. struct ext3_super_block * es;
  742. unsigned long desc_count, bitmap_count, x;
  743. int bitmap_nr;
  744. struct ext3_group_desc * gdp;
  745. int i;
  746. lock_super (sb);
  747. es = sb->u.ext3_sb.s_es;
  748. desc_count = 0;
  749. bitmap_count = 0;
  750. gdp = NULL;
  751. for (i = 0; i < sb->u.ext3_sb.s_groups_count; i++) {
  752. gdp = ext3_get_group_desc (sb, i, NULL);
  753. if (!gdp)
  754. continue;
  755. desc_count += le16_to_cpu(gdp->bg_free_blocks_count);
  756. bitmap_nr = load_block_bitmap (sb, i);
  757. if (bitmap_nr < 0)
  758. continue;
  759. x = ext3_count_free (sb->u.ext3_sb.s_block_bitmap[bitmap_nr],
  760.      sb->s_blocksize);
  761. printk ("group %d: stored = %d, counted = %lun",
  762. i, le16_to_cpu(gdp->bg_free_blocks_count), x);
  763. bitmap_count += x;
  764. }
  765. printk("ext3_count_free_blocks: stored = %lu, computed = %lu, %lun",
  766.        le32_to_cpu(es->s_free_blocks_count), desc_count, bitmap_count);
  767. unlock_super (sb);
  768. return bitmap_count;
  769. #else
  770. return le32_to_cpu(sb->u.ext3_sb.s_es->s_free_blocks_count);
  771. #endif
  772. }
  773. static inline int block_in_use (unsigned long block,
  774. struct super_block * sb,
  775. unsigned char * map)
  776. {
  777. return ext3_test_bit ((block -
  778. le32_to_cpu(sb->u.ext3_sb.s_es->s_first_data_block)) %
  779.  EXT3_BLOCKS_PER_GROUP(sb), map);
  780. }
  781. static inline int test_root(int a, int b)
  782. {
  783. if (a == 0)
  784. return 1;
  785. while (1) {
  786. if (a == 1)
  787. return 1;
  788. if (a % b)
  789. return 0;
  790. a = a / b;
  791. }
  792. }
  793. int ext3_group_sparse(int group)
  794. {
  795. return (test_root(group, 3) || test_root(group, 5) ||
  796. test_root(group, 7));
  797. }
  798. /**
  799.  * ext3_bg_has_super - number of blocks used by the superblock in group
  800.  * @sb: superblock for filesystem
  801.  * @group: group number to check
  802.  *
  803.  * Return the number of blocks used by the superblock (primary or backup)
  804.  * in this group.  Currently this will be only 0 or 1.
  805.  */
  806. int ext3_bg_has_super(struct super_block *sb, int group)
  807. {
  808. if (EXT3_HAS_RO_COMPAT_FEATURE(sb,EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER)&&
  809.     !ext3_group_sparse(group))
  810. return 0;
  811. return 1;
  812. }
  813. /**
  814.  * ext3_bg_num_gdb - number of blocks used by the group table in group
  815.  * @sb: superblock for filesystem
  816.  * @group: group number to check
  817.  *
  818.  * Return the number of blocks used by the group descriptor table
  819.  * (primary or backup) in this group.  In the future there may be a
  820.  * different number of descriptor blocks in each group.
  821.  */
  822. unsigned long ext3_bg_num_gdb(struct super_block *sb, int group)
  823. {
  824. if (EXT3_HAS_RO_COMPAT_FEATURE(sb,EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER)&&
  825.     !ext3_group_sparse(group))
  826. return 0;
  827. return EXT3_SB(sb)->s_gdb_count;
  828. }
  829. #ifdef CONFIG_EXT3_CHECK
  830. /* Called at mount-time, super-block is locked */
  831. void ext3_check_blocks_bitmap (struct super_block * sb)
  832. {
  833. struct buffer_head * bh;
  834. struct ext3_super_block * es;
  835. unsigned long desc_count, bitmap_count, x, j;
  836. unsigned long desc_blocks;
  837. int bitmap_nr;
  838. struct ext3_group_desc * gdp;
  839. int i;
  840. es = sb->u.ext3_sb.s_es;
  841. desc_count = 0;
  842. bitmap_count = 0;
  843. gdp = NULL;
  844. for (i = 0; i < sb->u.ext3_sb.s_groups_count; i++) {
  845. gdp = ext3_get_group_desc (sb, i, NULL);
  846. if (!gdp)
  847. continue;
  848. desc_count += le16_to_cpu(gdp->bg_free_blocks_count);
  849. bitmap_nr = load_block_bitmap (sb, i);
  850. if (bitmap_nr < 0)
  851. continue;
  852. bh = EXT3_SB(sb)->s_block_bitmap[bitmap_nr];
  853. if (ext3_bg_has_super(sb, i) && !ext3_test_bit(0, bh->b_data))
  854. ext3_error(sb, __FUNCTION__,
  855.    "Superblock in group %d is marked free", i);
  856. desc_blocks = ext3_bg_num_gdb(sb, i);
  857. for (j = 0; j < desc_blocks; j++)
  858. if (!ext3_test_bit(j + 1, bh->b_data))
  859. ext3_error(sb, __FUNCTION__,
  860.    "Descriptor block #%ld in group "
  861.    "%d is marked free", j, i);
  862. if (!block_in_use (le32_to_cpu(gdp->bg_block_bitmap),
  863. sb, bh->b_data))
  864. ext3_error (sb, "ext3_check_blocks_bitmap",
  865.     "Block bitmap for group %d is marked free",
  866.     i);
  867. if (!block_in_use (le32_to_cpu(gdp->bg_inode_bitmap),
  868. sb, bh->b_data))
  869. ext3_error (sb, "ext3_check_blocks_bitmap",
  870.     "Inode bitmap for group %d is marked free",
  871.     i);
  872. for (j = 0; j < sb->u.ext3_sb.s_itb_per_group; j++)
  873. if (!block_in_use (le32_to_cpu(gdp->bg_inode_table) + j,
  874. sb, bh->b_data))
  875. ext3_error (sb, "ext3_check_blocks_bitmap",
  876.     "Block #%d of the inode table in "
  877.     "group %d is marked free", j, i);
  878. x = ext3_count_free (bh, sb->s_blocksize);
  879. if (le16_to_cpu(gdp->bg_free_blocks_count) != x)
  880. ext3_error (sb, "ext3_check_blocks_bitmap",
  881.     "Wrong free blocks count for group %d, "
  882.     "stored = %d, counted = %lu", i,
  883.     le16_to_cpu(gdp->bg_free_blocks_count), x);
  884. bitmap_count += x;
  885. }
  886. if (le32_to_cpu(es->s_free_blocks_count) != bitmap_count)
  887. ext3_error (sb, "ext3_check_blocks_bitmap",
  888. "Wrong free blocks count in super block, "
  889. "stored = %lu, counted = %lu",
  890. (unsigned long)le32_to_cpu(es->s_free_blocks_count),
  891. bitmap_count);
  892. }
  893. #endif