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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/fs/ext3/ialloc.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.  *  BSD ufs-inspired inode and directory allocation by
  10.  *  Stephen Tweedie (sct@redhat.com), 1993
  11.  *  Big-endian to little-endian byte-swapping/bitmaps by
  12.  *        David S. Miller (davem@caip.rutgers.edu), 1995
  13.  */
  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/stat.h>
  20. #include <linux/string.h>
  21. #include <linux/locks.h>
  22. #include <linux/quotaops.h>
  23. #include <asm/bitops.h>
  24. #include <asm/byteorder.h>
  25. /*
  26.  * ialloc.c contains the inodes allocation and deallocation routines
  27.  */
  28. /*
  29.  * The free inodes are managed by bitmaps.  A file system contains several
  30.  * blocks groups.  Each group contains 1 bitmap block for blocks, 1 bitmap
  31.  * block for inodes, N blocks for the inode table and data blocks.
  32.  *
  33.  * The file system contains group descriptors which are located after the
  34.  * super block.  Each descriptor contains the number of the bitmap block and
  35.  * the free blocks count in the block.  The descriptors are loaded in memory
  36.  * when a file system is mounted (see ext3_read_super).
  37.  */
  38. /*
  39.  * Read the inode allocation bitmap for a given block_group, reading
  40.  * into the specified slot in the superblock's bitmap cache.
  41.  *
  42.  * Return >=0 on success or a -ve error code.
  43.  */
  44. static int read_inode_bitmap (struct super_block * sb,
  45.        unsigned long block_group,
  46.        unsigned int bitmap_nr)
  47. {
  48. struct ext3_group_desc * gdp;
  49. struct buffer_head * bh = NULL;
  50. int retval = 0;
  51. gdp = ext3_get_group_desc (sb, block_group, NULL);
  52. if (!gdp) {
  53. retval = -EIO;
  54. goto error_out;
  55. }
  56. bh = sb_bread(sb, le32_to_cpu(gdp->bg_inode_bitmap));
  57. if (!bh) {
  58. ext3_error (sb, "read_inode_bitmap",
  59.     "Cannot read inode bitmap - "
  60.     "block_group = %lu, inode_bitmap = %lu",
  61.     block_group, (unsigned long) gdp->bg_inode_bitmap);
  62. retval = -EIO;
  63. }
  64. /*
  65.  * On IO error, just leave a zero in the superblock's block pointer for
  66.  * this group.  The IO will be retried next time.
  67.  */
  68. error_out:
  69. sb->u.ext3_sb.s_inode_bitmap_number[bitmap_nr] = block_group;
  70. sb->u.ext3_sb.s_inode_bitmap[bitmap_nr] = bh;
  71. return retval;
  72. }
  73. /*
  74.  * load_inode_bitmap loads the inode bitmap for a blocks group
  75.  *
  76.  * It maintains a cache for the last bitmaps loaded.  This cache is managed
  77.  * with a LRU algorithm.
  78.  *
  79.  * Notes:
  80.  * 1/ There is one cache per mounted file system.
  81.  * 2/ If the file system contains less than EXT3_MAX_GROUP_LOADED groups,
  82.  *    this function reads the bitmap without maintaining a LRU cache.
  83.  *
  84.  * Return the slot used to store the bitmap, or a -ve error code.
  85.  */
  86. static int load_inode_bitmap (struct super_block * sb,
  87.       unsigned int block_group)
  88. {
  89. struct ext3_sb_info *sbi = EXT3_SB(sb);
  90. unsigned long inode_bitmap_number;
  91. struct buffer_head * inode_bitmap;
  92. int i, j, retval = 0;
  93. if (block_group >= sbi->s_groups_count)
  94. ext3_panic (sb, "load_inode_bitmap",
  95.     "block_group >= groups_count - "
  96.     "block_group = %d, groups_count = %lu",
  97.     block_group, sbi->s_groups_count);
  98. if (sbi->s_loaded_inode_bitmaps > 0 &&
  99.     sbi->s_inode_bitmap_number[0] == block_group &&
  100.     sbi->s_inode_bitmap[0] != NULL)
  101. return 0;
  102. if (sbi->s_groups_count <= EXT3_MAX_GROUP_LOADED) {
  103. if (sbi->s_inode_bitmap[block_group]) {
  104. if (sbi->s_inode_bitmap_number[block_group] !=
  105. block_group)
  106. ext3_panic(sb, "load_inode_bitmap",
  107. "block_group != inode_bitmap_number");
  108. return block_group;
  109. }
  110. retval = read_inode_bitmap(sb, block_group, block_group);
  111. if (retval < 0)
  112. return retval;
  113. return block_group;
  114. }
  115. for (i = 0; i < sbi->s_loaded_inode_bitmaps &&
  116.     sbi->s_inode_bitmap_number[i] != block_group; i++)
  117. /* do nothing */;
  118. if (i < sbi->s_loaded_inode_bitmaps &&
  119.     sbi->s_inode_bitmap_number[i] == block_group) {
  120. inode_bitmap_number = sbi->s_inode_bitmap_number[i];
  121. inode_bitmap = sbi->s_inode_bitmap[i];
  122. for (j = i; j > 0; j--) {
  123. sbi->s_inode_bitmap_number[j] =
  124. sbi->s_inode_bitmap_number[j - 1];
  125. sbi->s_inode_bitmap[j] = sbi->s_inode_bitmap[j - 1];
  126. }
  127. sbi->s_inode_bitmap_number[0] = inode_bitmap_number;
  128. sbi->s_inode_bitmap[0] = inode_bitmap;
  129. /*
  130.  * There's still one special case here --- if inode_bitmap == 0
  131.  * then our last attempt to read the bitmap failed and we have
  132.  * just ended up caching that failure.  Try again to read it.
  133.  */
  134. if (!inode_bitmap)
  135. retval = read_inode_bitmap (sb, block_group, 0);
  136. } else {
  137. if (sbi->s_loaded_inode_bitmaps < EXT3_MAX_GROUP_LOADED)
  138. sbi->s_loaded_inode_bitmaps++;
  139. else
  140. brelse(sbi->s_inode_bitmap[EXT3_MAX_GROUP_LOADED - 1]);
  141. for (j = sbi->s_loaded_inode_bitmaps - 1; j > 0; j--) {
  142. sbi->s_inode_bitmap_number[j] =
  143. sbi->s_inode_bitmap_number[j - 1];
  144. sbi->s_inode_bitmap[j] = sbi->s_inode_bitmap[j - 1];
  145. }
  146. retval = read_inode_bitmap (sb, block_group, 0);
  147. }
  148. return retval;
  149. }
  150. /*
  151.  * NOTE! When we get the inode, we're the only people
  152.  * that have access to it, and as such there are no
  153.  * race conditions we have to worry about. The inode
  154.  * is not on the hash-lists, and it cannot be reached
  155.  * through the filesystem because the directory entry
  156.  * has been deleted earlier.
  157.  *
  158.  * HOWEVER: we must make sure that we get no aliases,
  159.  * which means that we have to call "clear_inode()"
  160.  * _before_ we mark the inode not in use in the inode
  161.  * bitmaps. Otherwise a newly created file might use
  162.  * the same inode number (not actually the same pointer
  163.  * though), and then we'd have two inodes sharing the
  164.  * same inode number and space on the harddisk.
  165.  */
  166. void ext3_free_inode (handle_t *handle, struct inode * inode)
  167. {
  168. struct super_block * sb = inode->i_sb;
  169. int is_directory;
  170. unsigned long ino;
  171. struct buffer_head * bh;
  172. struct buffer_head * bh2;
  173. unsigned long block_group;
  174. unsigned long bit;
  175. int bitmap_nr;
  176. struct ext3_group_desc * gdp;
  177. struct ext3_super_block * es;
  178. int fatal = 0, err;
  179. if (!inode->i_dev) {
  180. printk ("ext3_free_inode: inode has no devicen");
  181. return;
  182. }
  183. if (atomic_read(&inode->i_count) > 1) {
  184. printk ("ext3_free_inode: inode has count=%dn",
  185. atomic_read(&inode->i_count));
  186. return;
  187. }
  188. if (inode->i_nlink) {
  189. printk ("ext3_free_inode: inode has nlink=%dn",
  190. inode->i_nlink);
  191. return;
  192. }
  193. if (!sb) {
  194. printk("ext3_free_inode: inode on nonexistent devicen");
  195. return;
  196. }
  197. ino = inode->i_ino;
  198. ext3_debug ("freeing inode %lun", ino);
  199. /*
  200.  * Note: we must free any quota before locking the superblock,
  201.  * as writing the quota to disk may need the lock as well.
  202.  */
  203. DQUOT_INIT(inode);
  204. DQUOT_FREE_INODE(inode);
  205. DQUOT_DROP(inode);
  206. is_directory = S_ISDIR(inode->i_mode);
  207. /* Do this BEFORE marking the inode not in use or returning an error */
  208. clear_inode (inode);
  209. lock_super (sb);
  210. es = sb->u.ext3_sb.s_es;
  211. if (ino < EXT3_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) {
  212. ext3_error (sb, "ext3_free_inode",
  213.     "reserved or nonexistent inode %lu", ino);
  214. goto error_return;
  215. }
  216. block_group = (ino - 1) / EXT3_INODES_PER_GROUP(sb);
  217. bit = (ino - 1) % EXT3_INODES_PER_GROUP(sb);
  218. bitmap_nr = load_inode_bitmap (sb, block_group);
  219. if (bitmap_nr < 0)
  220. goto error_return;
  221. bh = sb->u.ext3_sb.s_inode_bitmap[bitmap_nr];
  222. BUFFER_TRACE(bh, "get_write_access");
  223. fatal = ext3_journal_get_write_access(handle, bh);
  224. if (fatal)
  225. goto error_return;
  226. /* Ok, now we can actually update the inode bitmaps.. */
  227. if (!ext3_clear_bit (bit, bh->b_data))
  228. ext3_error (sb, "ext3_free_inode",
  229.       "bit already cleared for inode %lu", ino);
  230. else {
  231. gdp = ext3_get_group_desc (sb, block_group, &bh2);
  232. BUFFER_TRACE(bh2, "get_write_access");
  233. fatal = ext3_journal_get_write_access(handle, bh2);
  234. if (fatal) goto error_return;
  235. BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get write access");
  236. fatal = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
  237. if (fatal) goto error_return;
  238. if (gdp) {
  239. gdp->bg_free_inodes_count = cpu_to_le16(
  240. le16_to_cpu(gdp->bg_free_inodes_count) + 1);
  241. if (is_directory)
  242. gdp->bg_used_dirs_count = cpu_to_le16(
  243.   le16_to_cpu(gdp->bg_used_dirs_count) - 1);
  244. }
  245. BUFFER_TRACE(bh2, "call ext3_journal_dirty_metadata");
  246. err = ext3_journal_dirty_metadata(handle, bh2);
  247. if (!fatal) fatal = err;
  248. es->s_free_inodes_count =
  249. cpu_to_le32(le32_to_cpu(es->s_free_inodes_count) + 1);
  250. BUFFER_TRACE(sb->u.ext3_sb.s_sbh,
  251. "call ext3_journal_dirty_metadata");
  252. err = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
  253. if (!fatal) fatal = err;
  254. }
  255. BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
  256. err = ext3_journal_dirty_metadata(handle, bh);
  257. if (!fatal)
  258. fatal = err;
  259. sb->s_dirt = 1;
  260. error_return:
  261. ext3_std_error(sb, fatal);
  262. unlock_super(sb);
  263. }
  264. /*
  265.  * There are two policies for allocating an inode.  If the new inode is
  266.  * a directory, then a forward search is made for a block group with both
  267.  * free space and a low directory-to-inode ratio; if that fails, then of
  268.  * the groups with above-average free space, that group with the fewest
  269.  * directories already is chosen.
  270.  *
  271.  * For other inodes, search forward from the parent directory's block
  272.  * group to find a free inode.
  273.  */
  274. struct inode * ext3_new_inode (handle_t *handle,
  275. const struct inode * dir, int mode)
  276. {
  277. struct super_block * sb;
  278. struct buffer_head * bh;
  279. struct buffer_head * bh2;
  280. int i, j, avefreei;
  281. struct inode * inode;
  282. int bitmap_nr;
  283. struct ext3_group_desc * gdp;
  284. struct ext3_group_desc * tmp;
  285. struct ext3_super_block * es;
  286. int err = 0;
  287. /* Cannot create files in a deleted directory */
  288. if (!dir || !dir->i_nlink)
  289. return ERR_PTR(-EPERM);
  290. sb = dir->i_sb;
  291. inode = new_inode(sb);
  292. if (!inode)
  293. return ERR_PTR(-ENOMEM);
  294. init_rwsem(&inode->u.ext3_i.truncate_sem);
  295. lock_super (sb);
  296. es = sb->u.ext3_sb.s_es;
  297. repeat:
  298. gdp = NULL;
  299. i = 0;
  300. if (S_ISDIR(mode)) {
  301. avefreei = le32_to_cpu(es->s_free_inodes_count) /
  302. sb->u.ext3_sb.s_groups_count;
  303. if (!gdp) {
  304. for (j = 0; j < sb->u.ext3_sb.s_groups_count; j++) {
  305. struct buffer_head *temp_buffer;
  306. tmp = ext3_get_group_desc (sb, j, &temp_buffer);
  307. if (tmp &&
  308.     le16_to_cpu(tmp->bg_free_inodes_count) &&
  309.     le16_to_cpu(tmp->bg_free_inodes_count) >=
  310. avefreei) {
  311. if (!gdp || (le16_to_cpu(tmp->bg_free_blocks_count) >
  312. le16_to_cpu(gdp->bg_free_blocks_count))) {
  313. i = j;
  314. gdp = tmp;
  315. bh2 = temp_buffer;
  316. }
  317. }
  318. }
  319. }
  320. } else {
  321. /*
  322.  * Try to place the inode in its parent directory
  323.  */
  324. i = dir->u.ext3_i.i_block_group;
  325. tmp = ext3_get_group_desc (sb, i, &bh2);
  326. if (tmp && le16_to_cpu(tmp->bg_free_inodes_count))
  327. gdp = tmp;
  328. else
  329. {
  330. /*
  331.  * Use a quadratic hash to find a group with a
  332.  * free inode
  333.  */
  334. for (j = 1; j < sb->u.ext3_sb.s_groups_count; j <<= 1) {
  335. i += j;
  336. if (i >= sb->u.ext3_sb.s_groups_count)
  337. i -= sb->u.ext3_sb.s_groups_count;
  338. tmp = ext3_get_group_desc (sb, i, &bh2);
  339. if (tmp &&
  340.     le16_to_cpu(tmp->bg_free_inodes_count)) {
  341. gdp = tmp;
  342. break;
  343. }
  344. }
  345. }
  346. if (!gdp) {
  347. /*
  348.  * That failed: try linear search for a free inode
  349.  */
  350. i = dir->u.ext3_i.i_block_group + 1;
  351. for (j = 2; j < sb->u.ext3_sb.s_groups_count; j++) {
  352. if (++i >= sb->u.ext3_sb.s_groups_count)
  353. i = 0;
  354. tmp = ext3_get_group_desc (sb, i, &bh2);
  355. if (tmp &&
  356.     le16_to_cpu(tmp->bg_free_inodes_count)) {
  357. gdp = tmp;
  358. break;
  359. }
  360. }
  361. }
  362. }
  363. err = -ENOSPC;
  364. if (!gdp)
  365. goto fail;
  366. err = -EIO;
  367. bitmap_nr = load_inode_bitmap (sb, i);
  368. if (bitmap_nr < 0)
  369. goto fail;
  370. bh = sb->u.ext3_sb.s_inode_bitmap[bitmap_nr];
  371. if ((j = ext3_find_first_zero_bit ((unsigned long *) bh->b_data,
  372.       EXT3_INODES_PER_GROUP(sb))) <
  373.     EXT3_INODES_PER_GROUP(sb)) {
  374. BUFFER_TRACE(bh, "get_write_access");
  375. err = ext3_journal_get_write_access(handle, bh);
  376. if (err) goto fail;
  377. if (ext3_set_bit (j, bh->b_data)) {
  378. ext3_error (sb, "ext3_new_inode",
  379.       "bit already set for inode %d", j);
  380. goto repeat;
  381. }
  382. BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
  383. err = ext3_journal_dirty_metadata(handle, bh);
  384. if (err) goto fail;
  385. } else {
  386. if (le16_to_cpu(gdp->bg_free_inodes_count) != 0) {
  387. ext3_error (sb, "ext3_new_inode",
  388.     "Free inodes count corrupted in group %d",
  389.     i);
  390. /* Is it really ENOSPC? */
  391. err = -ENOSPC;
  392. if (sb->s_flags & MS_RDONLY)
  393. goto fail;
  394. BUFFER_TRACE(bh2, "get_write_access");
  395. err = ext3_journal_get_write_access(handle, bh2);
  396. if (err) goto fail;
  397. gdp->bg_free_inodes_count = 0;
  398. BUFFER_TRACE(bh2, "call ext3_journal_dirty_metadata");
  399. err = ext3_journal_dirty_metadata(handle, bh2);
  400. if (err) goto fail;
  401. }
  402. goto repeat;
  403. }
  404. j += i * EXT3_INODES_PER_GROUP(sb) + 1;
  405. if (j < EXT3_FIRST_INO(sb) || j > le32_to_cpu(es->s_inodes_count)) {
  406. ext3_error (sb, "ext3_new_inode",
  407.     "reserved inode or inode > inodes count - "
  408.     "block_group = %d,inode=%d", i, j);
  409. err = -EIO;
  410. goto fail;
  411. }
  412. BUFFER_TRACE(bh2, "get_write_access");
  413. err = ext3_journal_get_write_access(handle, bh2);
  414. if (err) goto fail;
  415. gdp->bg_free_inodes_count =
  416. cpu_to_le16(le16_to_cpu(gdp->bg_free_inodes_count) - 1);
  417. if (S_ISDIR(mode))
  418. gdp->bg_used_dirs_count =
  419. cpu_to_le16(le16_to_cpu(gdp->bg_used_dirs_count) + 1);
  420. BUFFER_TRACE(bh2, "call ext3_journal_dirty_metadata");
  421. err = ext3_journal_dirty_metadata(handle, bh2);
  422. if (err) goto fail;
  423. BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "get_write_access");
  424. err = ext3_journal_get_write_access(handle, sb->u.ext3_sb.s_sbh);
  425. if (err) goto fail;
  426. es->s_free_inodes_count =
  427. cpu_to_le32(le32_to_cpu(es->s_free_inodes_count) - 1);
  428. BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "call ext3_journal_dirty_metadata");
  429. err = ext3_journal_dirty_metadata(handle, sb->u.ext3_sb.s_sbh);
  430. sb->s_dirt = 1;
  431. if (err) goto fail;
  432. inode->i_uid = current->fsuid;
  433. if (test_opt (sb, GRPID))
  434. inode->i_gid = dir->i_gid;
  435. else if (dir->i_mode & S_ISGID) {
  436. inode->i_gid = dir->i_gid;
  437. if (S_ISDIR(mode))
  438. mode |= S_ISGID;
  439. } else
  440. inode->i_gid = current->fsgid;
  441. inode->i_mode = mode;
  442. inode->i_ino = j;
  443. /* This is the optimal IO size (for stat), not the fs block size */
  444. inode->i_blksize = PAGE_SIZE;
  445. inode->i_blocks = 0;
  446. inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
  447. inode->u.ext3_i.i_flags = dir->u.ext3_i.i_flags & ~EXT3_INDEX_FL;
  448. if (S_ISLNK(mode))
  449. inode->u.ext3_i.i_flags &= ~(EXT3_IMMUTABLE_FL|EXT3_APPEND_FL);
  450. #ifdef EXT3_FRAGMENTS
  451. inode->u.ext3_i.i_faddr = 0;
  452. inode->u.ext3_i.i_frag_no = 0;
  453. inode->u.ext3_i.i_frag_size = 0;
  454. #endif
  455. inode->u.ext3_i.i_file_acl = 0;
  456. inode->u.ext3_i.i_dir_acl = 0;
  457. inode->u.ext3_i.i_dtime = 0;
  458. INIT_LIST_HEAD(&inode->u.ext3_i.i_orphan);
  459. #ifdef EXT3_PREALLOCATE
  460. inode->u.ext3_i.i_prealloc_count = 0;
  461. #endif
  462. inode->u.ext3_i.i_block_group = i;
  463. if (inode->u.ext3_i.i_flags & EXT3_SYNC_FL)
  464. inode->i_flags |= S_SYNC;
  465. if (IS_SYNC(inode))
  466. handle->h_sync = 1;
  467. insert_inode_hash(inode);
  468. inode->i_generation = sb->u.ext3_sb.s_next_generation++;
  469. inode->u.ext3_i.i_state = EXT3_STATE_NEW;
  470. err = ext3_mark_inode_dirty(handle, inode);
  471. if (err) goto fail;
  472. unlock_super (sb);
  473. if(DQUOT_ALLOC_INODE(inode)) {
  474. DQUOT_DROP(inode);
  475. inode->i_flags |= S_NOQUOTA;
  476. inode->i_nlink = 0;
  477. iput(inode);
  478. return ERR_PTR(-EDQUOT);
  479. }
  480. ext3_debug ("allocating inode %lun", inode->i_ino);
  481. return inode;
  482. fail:
  483. unlock_super(sb);
  484. iput(inode);
  485. ext3_std_error(sb, err);
  486. return ERR_PTR(err);
  487. }
  488. /* Verify that we are loading a valid orphan from disk */
  489. struct inode *ext3_orphan_get (struct super_block * sb, ino_t ino)
  490. {
  491. ino_t max_ino = le32_to_cpu(EXT3_SB(sb)->s_es->s_inodes_count);
  492. unsigned long block_group;
  493. int bit;
  494. int bitmap_nr;
  495. struct buffer_head *bh;
  496. struct inode *inode = NULL;
  497. /* Error cases - e2fsck has already cleaned up for us */
  498. if (ino > max_ino) {
  499. ext3_warning(sb, __FUNCTION__,
  500.      "bad orphan ino %ld!  e2fsck was run?n", ino);
  501. return NULL;
  502. }
  503. block_group = (ino - 1) / EXT3_INODES_PER_GROUP(sb);
  504. bit = (ino - 1) % EXT3_INODES_PER_GROUP(sb);
  505. if ((bitmap_nr = load_inode_bitmap(sb, block_group)) < 0 ||
  506.     !(bh = EXT3_SB(sb)->s_inode_bitmap[bitmap_nr])) {
  507. ext3_warning(sb, __FUNCTION__,
  508.      "inode bitmap error for orphan %ldn", ino);
  509. return NULL;
  510. }
  511. /* Having the inode bit set should be a 100% indicator that this
  512.  * is a valid orphan (no e2fsck run on fs).  Orphans also include
  513.  * inodes that were being truncated, so we can't check i_nlink==0.
  514.  */
  515. if (!ext3_test_bit(bit, bh->b_data) || !(inode = iget(sb, ino)) ||
  516.     is_bad_inode(inode) || NEXT_ORPHAN(inode) > max_ino) {
  517. ext3_warning(sb, __FUNCTION__,
  518.      "bad orphan inode %ld!  e2fsck was run?n", ino);
  519. printk(KERN_NOTICE "ext3_test_bit(bit=%d, block=%ld) = %dn",
  520.        bit, bh->b_blocknr, ext3_test_bit(bit, bh->b_data));
  521. printk(KERN_NOTICE "inode=%pn", inode);
  522. if (inode) {
  523. printk(KERN_NOTICE "is_bad_inode(inode)=%dn",
  524.        is_bad_inode(inode));
  525. printk(KERN_NOTICE "NEXT_ORPHAN(inode)=%dn",
  526.        NEXT_ORPHAN(inode));
  527. printk(KERN_NOTICE "max_ino=%ldn", max_ino);
  528. }
  529. /* Avoid freeing blocks if we got a bad deleted inode */
  530. if (inode && inode->i_nlink == 0)
  531. inode->i_blocks = 0;
  532. iput(inode);
  533. return NULL;
  534. }
  535. return inode;
  536. }
  537. unsigned long ext3_count_free_inodes (struct super_block * sb)
  538. {
  539. #ifdef EXT3FS_DEBUG
  540. struct ext3_super_block * es;
  541. unsigned long desc_count, bitmap_count, x;
  542. int bitmap_nr;
  543. struct ext3_group_desc * gdp;
  544. int i;
  545. lock_super (sb);
  546. es = sb->u.ext3_sb.s_es;
  547. desc_count = 0;
  548. bitmap_count = 0;
  549. gdp = NULL;
  550. for (i = 0; i < sb->u.ext3_sb.s_groups_count; i++) {
  551. gdp = ext3_get_group_desc (sb, i, NULL);
  552. if (!gdp)
  553. continue;
  554. desc_count += le16_to_cpu(gdp->bg_free_inodes_count);
  555. bitmap_nr = load_inode_bitmap (sb, i);
  556. if (bitmap_nr < 0)
  557. continue;
  558. x = ext3_count_free (sb->u.ext3_sb.s_inode_bitmap[bitmap_nr],
  559.      EXT3_INODES_PER_GROUP(sb) / 8);
  560. printk ("group %d: stored = %d, counted = %lun",
  561. i, le16_to_cpu(gdp->bg_free_inodes_count), x);
  562. bitmap_count += x;
  563. }
  564. printk("ext3_count_free_inodes: stored = %lu, computed = %lu, %lun",
  565. le32_to_cpu(es->s_free_inodes_count), desc_count, bitmap_count);
  566. unlock_super (sb);
  567. return desc_count;
  568. #else
  569. return le32_to_cpu(sb->u.ext3_sb.s_es->s_free_inodes_count);
  570. #endif
  571. }
  572. #ifdef CONFIG_EXT3_CHECK
  573. /* Called at mount-time, super-block is locked */
  574. void ext3_check_inodes_bitmap (struct super_block * sb)
  575. {
  576. struct ext3_super_block * es;
  577. unsigned long desc_count, bitmap_count, x;
  578. int bitmap_nr;
  579. struct ext3_group_desc * gdp;
  580. int i;
  581. es = sb->u.ext3_sb.s_es;
  582. desc_count = 0;
  583. bitmap_count = 0;
  584. gdp = NULL;
  585. for (i = 0; i < sb->u.ext3_sb.s_groups_count; i++) {
  586. gdp = ext3_get_group_desc (sb, i, NULL);
  587. if (!gdp)
  588. continue;
  589. desc_count += le16_to_cpu(gdp->bg_free_inodes_count);
  590. bitmap_nr = load_inode_bitmap (sb, i);
  591. if (bitmap_nr < 0)
  592. continue;
  593. x = ext3_count_free (sb->u.ext3_sb.s_inode_bitmap[bitmap_nr],
  594.      EXT3_INODES_PER_GROUP(sb) / 8);
  595. if (le16_to_cpu(gdp->bg_free_inodes_count) != x)
  596. ext3_error (sb, "ext3_check_inodes_bitmap",
  597.     "Wrong free inodes count in group %d, "
  598.     "stored = %d, counted = %lu", i,
  599.     le16_to_cpu(gdp->bg_free_inodes_count), x);
  600. bitmap_count += x;
  601. }
  602. if (le32_to_cpu(es->s_free_inodes_count) != bitmap_count)
  603. ext3_error (sb, "ext3_check_inodes_bitmap",
  604.     "Wrong free inodes count in super block, "
  605.     "stored = %lu, counted = %lu",
  606.     (unsigned long)le32_to_cpu(es->s_free_inodes_count),
  607.     bitmap_count);
  608. }
  609. #endif