1*ac27a0ecSDave Kleikamp /* 2*ac27a0ecSDave Kleikamp * linux/fs/ext3/ialloc.c 3*ac27a0ecSDave Kleikamp * 4*ac27a0ecSDave Kleikamp * Copyright (C) 1992, 1993, 1994, 1995 5*ac27a0ecSDave Kleikamp * Remy Card ([email protected]) 6*ac27a0ecSDave Kleikamp * Laboratoire MASI - Institut Blaise Pascal 7*ac27a0ecSDave Kleikamp * Universite Pierre et Marie Curie (Paris VI) 8*ac27a0ecSDave Kleikamp * 9*ac27a0ecSDave Kleikamp * BSD ufs-inspired inode and directory allocation by 10*ac27a0ecSDave Kleikamp * Stephen Tweedie ([email protected]), 1993 11*ac27a0ecSDave Kleikamp * Big-endian to little-endian byte-swapping/bitmaps by 12*ac27a0ecSDave Kleikamp * David S. Miller ([email protected]), 1995 13*ac27a0ecSDave Kleikamp */ 14*ac27a0ecSDave Kleikamp 15*ac27a0ecSDave Kleikamp #include <linux/time.h> 16*ac27a0ecSDave Kleikamp #include <linux/fs.h> 17*ac27a0ecSDave Kleikamp #include <linux/jbd.h> 18*ac27a0ecSDave Kleikamp #include <linux/ext3_fs.h> 19*ac27a0ecSDave Kleikamp #include <linux/ext3_jbd.h> 20*ac27a0ecSDave Kleikamp #include <linux/stat.h> 21*ac27a0ecSDave Kleikamp #include <linux/string.h> 22*ac27a0ecSDave Kleikamp #include <linux/quotaops.h> 23*ac27a0ecSDave Kleikamp #include <linux/buffer_head.h> 24*ac27a0ecSDave Kleikamp #include <linux/random.h> 25*ac27a0ecSDave Kleikamp #include <linux/bitops.h> 26*ac27a0ecSDave Kleikamp 27*ac27a0ecSDave Kleikamp #include <asm/byteorder.h> 28*ac27a0ecSDave Kleikamp 29*ac27a0ecSDave Kleikamp #include "xattr.h" 30*ac27a0ecSDave Kleikamp #include "acl.h" 31*ac27a0ecSDave Kleikamp 32*ac27a0ecSDave Kleikamp /* 33*ac27a0ecSDave Kleikamp * ialloc.c contains the inodes allocation and deallocation routines 34*ac27a0ecSDave Kleikamp */ 35*ac27a0ecSDave Kleikamp 36*ac27a0ecSDave Kleikamp /* 37*ac27a0ecSDave Kleikamp * The free inodes are managed by bitmaps. A file system contains several 38*ac27a0ecSDave Kleikamp * blocks groups. Each group contains 1 bitmap block for blocks, 1 bitmap 39*ac27a0ecSDave Kleikamp * block for inodes, N blocks for the inode table and data blocks. 40*ac27a0ecSDave Kleikamp * 41*ac27a0ecSDave Kleikamp * The file system contains group descriptors which are located after the 42*ac27a0ecSDave Kleikamp * super block. Each descriptor contains the number of the bitmap block and 43*ac27a0ecSDave Kleikamp * the free blocks count in the block. 44*ac27a0ecSDave Kleikamp */ 45*ac27a0ecSDave Kleikamp 46*ac27a0ecSDave Kleikamp 47*ac27a0ecSDave Kleikamp /* 48*ac27a0ecSDave Kleikamp * Read the inode allocation bitmap for a given block_group, reading 49*ac27a0ecSDave Kleikamp * into the specified slot in the superblock's bitmap cache. 50*ac27a0ecSDave Kleikamp * 51*ac27a0ecSDave Kleikamp * Return buffer_head of bitmap on success or NULL. 52*ac27a0ecSDave Kleikamp */ 53*ac27a0ecSDave Kleikamp static struct buffer_head * 54*ac27a0ecSDave Kleikamp read_inode_bitmap(struct super_block * sb, unsigned long block_group) 55*ac27a0ecSDave Kleikamp { 56*ac27a0ecSDave Kleikamp struct ext3_group_desc *desc; 57*ac27a0ecSDave Kleikamp struct buffer_head *bh = NULL; 58*ac27a0ecSDave Kleikamp 59*ac27a0ecSDave Kleikamp desc = ext3_get_group_desc(sb, block_group, NULL); 60*ac27a0ecSDave Kleikamp if (!desc) 61*ac27a0ecSDave Kleikamp goto error_out; 62*ac27a0ecSDave Kleikamp 63*ac27a0ecSDave Kleikamp bh = sb_bread(sb, le32_to_cpu(desc->bg_inode_bitmap)); 64*ac27a0ecSDave Kleikamp if (!bh) 65*ac27a0ecSDave Kleikamp ext3_error(sb, "read_inode_bitmap", 66*ac27a0ecSDave Kleikamp "Cannot read inode bitmap - " 67*ac27a0ecSDave Kleikamp "block_group = %lu, inode_bitmap = %u", 68*ac27a0ecSDave Kleikamp block_group, le32_to_cpu(desc->bg_inode_bitmap)); 69*ac27a0ecSDave Kleikamp error_out: 70*ac27a0ecSDave Kleikamp return bh; 71*ac27a0ecSDave Kleikamp } 72*ac27a0ecSDave Kleikamp 73*ac27a0ecSDave Kleikamp /* 74*ac27a0ecSDave Kleikamp * NOTE! When we get the inode, we're the only people 75*ac27a0ecSDave Kleikamp * that have access to it, and as such there are no 76*ac27a0ecSDave Kleikamp * race conditions we have to worry about. The inode 77*ac27a0ecSDave Kleikamp * is not on the hash-lists, and it cannot be reached 78*ac27a0ecSDave Kleikamp * through the filesystem because the directory entry 79*ac27a0ecSDave Kleikamp * has been deleted earlier. 80*ac27a0ecSDave Kleikamp * 81*ac27a0ecSDave Kleikamp * HOWEVER: we must make sure that we get no aliases, 82*ac27a0ecSDave Kleikamp * which means that we have to call "clear_inode()" 83*ac27a0ecSDave Kleikamp * _before_ we mark the inode not in use in the inode 84*ac27a0ecSDave Kleikamp * bitmaps. Otherwise a newly created file might use 85*ac27a0ecSDave Kleikamp * the same inode number (not actually the same pointer 86*ac27a0ecSDave Kleikamp * though), and then we'd have two inodes sharing the 87*ac27a0ecSDave Kleikamp * same inode number and space on the harddisk. 88*ac27a0ecSDave Kleikamp */ 89*ac27a0ecSDave Kleikamp void ext3_free_inode (handle_t *handle, struct inode * inode) 90*ac27a0ecSDave Kleikamp { 91*ac27a0ecSDave Kleikamp struct super_block * sb = inode->i_sb; 92*ac27a0ecSDave Kleikamp int is_directory; 93*ac27a0ecSDave Kleikamp unsigned long ino; 94*ac27a0ecSDave Kleikamp struct buffer_head *bitmap_bh = NULL; 95*ac27a0ecSDave Kleikamp struct buffer_head *bh2; 96*ac27a0ecSDave Kleikamp unsigned long block_group; 97*ac27a0ecSDave Kleikamp unsigned long bit; 98*ac27a0ecSDave Kleikamp struct ext3_group_desc * gdp; 99*ac27a0ecSDave Kleikamp struct ext3_super_block * es; 100*ac27a0ecSDave Kleikamp struct ext3_sb_info *sbi; 101*ac27a0ecSDave Kleikamp int fatal = 0, err; 102*ac27a0ecSDave Kleikamp 103*ac27a0ecSDave Kleikamp if (atomic_read(&inode->i_count) > 1) { 104*ac27a0ecSDave Kleikamp printk ("ext3_free_inode: inode has count=%d\n", 105*ac27a0ecSDave Kleikamp atomic_read(&inode->i_count)); 106*ac27a0ecSDave Kleikamp return; 107*ac27a0ecSDave Kleikamp } 108*ac27a0ecSDave Kleikamp if (inode->i_nlink) { 109*ac27a0ecSDave Kleikamp printk ("ext3_free_inode: inode has nlink=%d\n", 110*ac27a0ecSDave Kleikamp inode->i_nlink); 111*ac27a0ecSDave Kleikamp return; 112*ac27a0ecSDave Kleikamp } 113*ac27a0ecSDave Kleikamp if (!sb) { 114*ac27a0ecSDave Kleikamp printk("ext3_free_inode: inode on nonexistent device\n"); 115*ac27a0ecSDave Kleikamp return; 116*ac27a0ecSDave Kleikamp } 117*ac27a0ecSDave Kleikamp sbi = EXT3_SB(sb); 118*ac27a0ecSDave Kleikamp 119*ac27a0ecSDave Kleikamp ino = inode->i_ino; 120*ac27a0ecSDave Kleikamp ext3_debug ("freeing inode %lu\n", ino); 121*ac27a0ecSDave Kleikamp 122*ac27a0ecSDave Kleikamp /* 123*ac27a0ecSDave Kleikamp * Note: we must free any quota before locking the superblock, 124*ac27a0ecSDave Kleikamp * as writing the quota to disk may need the lock as well. 125*ac27a0ecSDave Kleikamp */ 126*ac27a0ecSDave Kleikamp DQUOT_INIT(inode); 127*ac27a0ecSDave Kleikamp ext3_xattr_delete_inode(handle, inode); 128*ac27a0ecSDave Kleikamp DQUOT_FREE_INODE(inode); 129*ac27a0ecSDave Kleikamp DQUOT_DROP(inode); 130*ac27a0ecSDave Kleikamp 131*ac27a0ecSDave Kleikamp is_directory = S_ISDIR(inode->i_mode); 132*ac27a0ecSDave Kleikamp 133*ac27a0ecSDave Kleikamp /* Do this BEFORE marking the inode not in use or returning an error */ 134*ac27a0ecSDave Kleikamp clear_inode (inode); 135*ac27a0ecSDave Kleikamp 136*ac27a0ecSDave Kleikamp es = EXT3_SB(sb)->s_es; 137*ac27a0ecSDave Kleikamp if (ino < EXT3_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) { 138*ac27a0ecSDave Kleikamp ext3_error (sb, "ext3_free_inode", 139*ac27a0ecSDave Kleikamp "reserved or nonexistent inode %lu", ino); 140*ac27a0ecSDave Kleikamp goto error_return; 141*ac27a0ecSDave Kleikamp } 142*ac27a0ecSDave Kleikamp block_group = (ino - 1) / EXT3_INODES_PER_GROUP(sb); 143*ac27a0ecSDave Kleikamp bit = (ino - 1) % EXT3_INODES_PER_GROUP(sb); 144*ac27a0ecSDave Kleikamp bitmap_bh = read_inode_bitmap(sb, block_group); 145*ac27a0ecSDave Kleikamp if (!bitmap_bh) 146*ac27a0ecSDave Kleikamp goto error_return; 147*ac27a0ecSDave Kleikamp 148*ac27a0ecSDave Kleikamp BUFFER_TRACE(bitmap_bh, "get_write_access"); 149*ac27a0ecSDave Kleikamp fatal = ext3_journal_get_write_access(handle, bitmap_bh); 150*ac27a0ecSDave Kleikamp if (fatal) 151*ac27a0ecSDave Kleikamp goto error_return; 152*ac27a0ecSDave Kleikamp 153*ac27a0ecSDave Kleikamp /* Ok, now we can actually update the inode bitmaps.. */ 154*ac27a0ecSDave Kleikamp if (!ext3_clear_bit_atomic(sb_bgl_lock(sbi, block_group), 155*ac27a0ecSDave Kleikamp bit, bitmap_bh->b_data)) 156*ac27a0ecSDave Kleikamp ext3_error (sb, "ext3_free_inode", 157*ac27a0ecSDave Kleikamp "bit already cleared for inode %lu", ino); 158*ac27a0ecSDave Kleikamp else { 159*ac27a0ecSDave Kleikamp gdp = ext3_get_group_desc (sb, block_group, &bh2); 160*ac27a0ecSDave Kleikamp 161*ac27a0ecSDave Kleikamp BUFFER_TRACE(bh2, "get_write_access"); 162*ac27a0ecSDave Kleikamp fatal = ext3_journal_get_write_access(handle, bh2); 163*ac27a0ecSDave Kleikamp if (fatal) goto error_return; 164*ac27a0ecSDave Kleikamp 165*ac27a0ecSDave Kleikamp if (gdp) { 166*ac27a0ecSDave Kleikamp spin_lock(sb_bgl_lock(sbi, block_group)); 167*ac27a0ecSDave Kleikamp gdp->bg_free_inodes_count = cpu_to_le16( 168*ac27a0ecSDave Kleikamp le16_to_cpu(gdp->bg_free_inodes_count) + 1); 169*ac27a0ecSDave Kleikamp if (is_directory) 170*ac27a0ecSDave Kleikamp gdp->bg_used_dirs_count = cpu_to_le16( 171*ac27a0ecSDave Kleikamp le16_to_cpu(gdp->bg_used_dirs_count) - 1); 172*ac27a0ecSDave Kleikamp spin_unlock(sb_bgl_lock(sbi, block_group)); 173*ac27a0ecSDave Kleikamp percpu_counter_inc(&sbi->s_freeinodes_counter); 174*ac27a0ecSDave Kleikamp if (is_directory) 175*ac27a0ecSDave Kleikamp percpu_counter_dec(&sbi->s_dirs_counter); 176*ac27a0ecSDave Kleikamp 177*ac27a0ecSDave Kleikamp } 178*ac27a0ecSDave Kleikamp BUFFER_TRACE(bh2, "call ext3_journal_dirty_metadata"); 179*ac27a0ecSDave Kleikamp err = ext3_journal_dirty_metadata(handle, bh2); 180*ac27a0ecSDave Kleikamp if (!fatal) fatal = err; 181*ac27a0ecSDave Kleikamp } 182*ac27a0ecSDave Kleikamp BUFFER_TRACE(bitmap_bh, "call ext3_journal_dirty_metadata"); 183*ac27a0ecSDave Kleikamp err = ext3_journal_dirty_metadata(handle, bitmap_bh); 184*ac27a0ecSDave Kleikamp if (!fatal) 185*ac27a0ecSDave Kleikamp fatal = err; 186*ac27a0ecSDave Kleikamp sb->s_dirt = 1; 187*ac27a0ecSDave Kleikamp error_return: 188*ac27a0ecSDave Kleikamp brelse(bitmap_bh); 189*ac27a0ecSDave Kleikamp ext3_std_error(sb, fatal); 190*ac27a0ecSDave Kleikamp } 191*ac27a0ecSDave Kleikamp 192*ac27a0ecSDave Kleikamp /* 193*ac27a0ecSDave Kleikamp * There are two policies for allocating an inode. If the new inode is 194*ac27a0ecSDave Kleikamp * a directory, then a forward search is made for a block group with both 195*ac27a0ecSDave Kleikamp * free space and a low directory-to-inode ratio; if that fails, then of 196*ac27a0ecSDave Kleikamp * the groups with above-average free space, that group with the fewest 197*ac27a0ecSDave Kleikamp * directories already is chosen. 198*ac27a0ecSDave Kleikamp * 199*ac27a0ecSDave Kleikamp * For other inodes, search forward from the parent directory\'s block 200*ac27a0ecSDave Kleikamp * group to find a free inode. 201*ac27a0ecSDave Kleikamp */ 202*ac27a0ecSDave Kleikamp static int find_group_dir(struct super_block *sb, struct inode *parent) 203*ac27a0ecSDave Kleikamp { 204*ac27a0ecSDave Kleikamp int ngroups = EXT3_SB(sb)->s_groups_count; 205*ac27a0ecSDave Kleikamp unsigned int freei, avefreei; 206*ac27a0ecSDave Kleikamp struct ext3_group_desc *desc, *best_desc = NULL; 207*ac27a0ecSDave Kleikamp struct buffer_head *bh; 208*ac27a0ecSDave Kleikamp int group, best_group = -1; 209*ac27a0ecSDave Kleikamp 210*ac27a0ecSDave Kleikamp freei = percpu_counter_read_positive(&EXT3_SB(sb)->s_freeinodes_counter); 211*ac27a0ecSDave Kleikamp avefreei = freei / ngroups; 212*ac27a0ecSDave Kleikamp 213*ac27a0ecSDave Kleikamp for (group = 0; group < ngroups; group++) { 214*ac27a0ecSDave Kleikamp desc = ext3_get_group_desc (sb, group, &bh); 215*ac27a0ecSDave Kleikamp if (!desc || !desc->bg_free_inodes_count) 216*ac27a0ecSDave Kleikamp continue; 217*ac27a0ecSDave Kleikamp if (le16_to_cpu(desc->bg_free_inodes_count) < avefreei) 218*ac27a0ecSDave Kleikamp continue; 219*ac27a0ecSDave Kleikamp if (!best_desc || 220*ac27a0ecSDave Kleikamp (le16_to_cpu(desc->bg_free_blocks_count) > 221*ac27a0ecSDave Kleikamp le16_to_cpu(best_desc->bg_free_blocks_count))) { 222*ac27a0ecSDave Kleikamp best_group = group; 223*ac27a0ecSDave Kleikamp best_desc = desc; 224*ac27a0ecSDave Kleikamp } 225*ac27a0ecSDave Kleikamp } 226*ac27a0ecSDave Kleikamp return best_group; 227*ac27a0ecSDave Kleikamp } 228*ac27a0ecSDave Kleikamp 229*ac27a0ecSDave Kleikamp /* 230*ac27a0ecSDave Kleikamp * Orlov's allocator for directories. 231*ac27a0ecSDave Kleikamp * 232*ac27a0ecSDave Kleikamp * We always try to spread first-level directories. 233*ac27a0ecSDave Kleikamp * 234*ac27a0ecSDave Kleikamp * If there are blockgroups with both free inodes and free blocks counts 235*ac27a0ecSDave Kleikamp * not worse than average we return one with smallest directory count. 236*ac27a0ecSDave Kleikamp * Otherwise we simply return a random group. 237*ac27a0ecSDave Kleikamp * 238*ac27a0ecSDave Kleikamp * For the rest rules look so: 239*ac27a0ecSDave Kleikamp * 240*ac27a0ecSDave Kleikamp * It's OK to put directory into a group unless 241*ac27a0ecSDave Kleikamp * it has too many directories already (max_dirs) or 242*ac27a0ecSDave Kleikamp * it has too few free inodes left (min_inodes) or 243*ac27a0ecSDave Kleikamp * it has too few free blocks left (min_blocks) or 244*ac27a0ecSDave Kleikamp * it's already running too large debt (max_debt). 245*ac27a0ecSDave Kleikamp * Parent's group is prefered, if it doesn't satisfy these 246*ac27a0ecSDave Kleikamp * conditions we search cyclically through the rest. If none 247*ac27a0ecSDave Kleikamp * of the groups look good we just look for a group with more 248*ac27a0ecSDave Kleikamp * free inodes than average (starting at parent's group). 249*ac27a0ecSDave Kleikamp * 250*ac27a0ecSDave Kleikamp * Debt is incremented each time we allocate a directory and decremented 251*ac27a0ecSDave Kleikamp * when we allocate an inode, within 0--255. 252*ac27a0ecSDave Kleikamp */ 253*ac27a0ecSDave Kleikamp 254*ac27a0ecSDave Kleikamp #define INODE_COST 64 255*ac27a0ecSDave Kleikamp #define BLOCK_COST 256 256*ac27a0ecSDave Kleikamp 257*ac27a0ecSDave Kleikamp static int find_group_orlov(struct super_block *sb, struct inode *parent) 258*ac27a0ecSDave Kleikamp { 259*ac27a0ecSDave Kleikamp int parent_group = EXT3_I(parent)->i_block_group; 260*ac27a0ecSDave Kleikamp struct ext3_sb_info *sbi = EXT3_SB(sb); 261*ac27a0ecSDave Kleikamp struct ext3_super_block *es = sbi->s_es; 262*ac27a0ecSDave Kleikamp int ngroups = sbi->s_groups_count; 263*ac27a0ecSDave Kleikamp int inodes_per_group = EXT3_INODES_PER_GROUP(sb); 264*ac27a0ecSDave Kleikamp unsigned int freei, avefreei; 265*ac27a0ecSDave Kleikamp ext3_fsblk_t freeb, avefreeb; 266*ac27a0ecSDave Kleikamp ext3_fsblk_t blocks_per_dir; 267*ac27a0ecSDave Kleikamp unsigned int ndirs; 268*ac27a0ecSDave Kleikamp int max_debt, max_dirs, min_inodes; 269*ac27a0ecSDave Kleikamp ext3_grpblk_t min_blocks; 270*ac27a0ecSDave Kleikamp int group = -1, i; 271*ac27a0ecSDave Kleikamp struct ext3_group_desc *desc; 272*ac27a0ecSDave Kleikamp struct buffer_head *bh; 273*ac27a0ecSDave Kleikamp 274*ac27a0ecSDave Kleikamp freei = percpu_counter_read_positive(&sbi->s_freeinodes_counter); 275*ac27a0ecSDave Kleikamp avefreei = freei / ngroups; 276*ac27a0ecSDave Kleikamp freeb = percpu_counter_read_positive(&sbi->s_freeblocks_counter); 277*ac27a0ecSDave Kleikamp avefreeb = freeb / ngroups; 278*ac27a0ecSDave Kleikamp ndirs = percpu_counter_read_positive(&sbi->s_dirs_counter); 279*ac27a0ecSDave Kleikamp 280*ac27a0ecSDave Kleikamp if ((parent == sb->s_root->d_inode) || 281*ac27a0ecSDave Kleikamp (EXT3_I(parent)->i_flags & EXT3_TOPDIR_FL)) { 282*ac27a0ecSDave Kleikamp int best_ndir = inodes_per_group; 283*ac27a0ecSDave Kleikamp int best_group = -1; 284*ac27a0ecSDave Kleikamp 285*ac27a0ecSDave Kleikamp get_random_bytes(&group, sizeof(group)); 286*ac27a0ecSDave Kleikamp parent_group = (unsigned)group % ngroups; 287*ac27a0ecSDave Kleikamp for (i = 0; i < ngroups; i++) { 288*ac27a0ecSDave Kleikamp group = (parent_group + i) % ngroups; 289*ac27a0ecSDave Kleikamp desc = ext3_get_group_desc (sb, group, &bh); 290*ac27a0ecSDave Kleikamp if (!desc || !desc->bg_free_inodes_count) 291*ac27a0ecSDave Kleikamp continue; 292*ac27a0ecSDave Kleikamp if (le16_to_cpu(desc->bg_used_dirs_count) >= best_ndir) 293*ac27a0ecSDave Kleikamp continue; 294*ac27a0ecSDave Kleikamp if (le16_to_cpu(desc->bg_free_inodes_count) < avefreei) 295*ac27a0ecSDave Kleikamp continue; 296*ac27a0ecSDave Kleikamp if (le16_to_cpu(desc->bg_free_blocks_count) < avefreeb) 297*ac27a0ecSDave Kleikamp continue; 298*ac27a0ecSDave Kleikamp best_group = group; 299*ac27a0ecSDave Kleikamp best_ndir = le16_to_cpu(desc->bg_used_dirs_count); 300*ac27a0ecSDave Kleikamp } 301*ac27a0ecSDave Kleikamp if (best_group >= 0) 302*ac27a0ecSDave Kleikamp return best_group; 303*ac27a0ecSDave Kleikamp goto fallback; 304*ac27a0ecSDave Kleikamp } 305*ac27a0ecSDave Kleikamp 306*ac27a0ecSDave Kleikamp blocks_per_dir = (le32_to_cpu(es->s_blocks_count) - freeb) / ndirs; 307*ac27a0ecSDave Kleikamp 308*ac27a0ecSDave Kleikamp max_dirs = ndirs / ngroups + inodes_per_group / 16; 309*ac27a0ecSDave Kleikamp min_inodes = avefreei - inodes_per_group / 4; 310*ac27a0ecSDave Kleikamp min_blocks = avefreeb - EXT3_BLOCKS_PER_GROUP(sb) / 4; 311*ac27a0ecSDave Kleikamp 312*ac27a0ecSDave Kleikamp max_debt = EXT3_BLOCKS_PER_GROUP(sb) / max(blocks_per_dir, (ext3_fsblk_t)BLOCK_COST); 313*ac27a0ecSDave Kleikamp if (max_debt * INODE_COST > inodes_per_group) 314*ac27a0ecSDave Kleikamp max_debt = inodes_per_group / INODE_COST; 315*ac27a0ecSDave Kleikamp if (max_debt > 255) 316*ac27a0ecSDave Kleikamp max_debt = 255; 317*ac27a0ecSDave Kleikamp if (max_debt == 0) 318*ac27a0ecSDave Kleikamp max_debt = 1; 319*ac27a0ecSDave Kleikamp 320*ac27a0ecSDave Kleikamp for (i = 0; i < ngroups; i++) { 321*ac27a0ecSDave Kleikamp group = (parent_group + i) % ngroups; 322*ac27a0ecSDave Kleikamp desc = ext3_get_group_desc (sb, group, &bh); 323*ac27a0ecSDave Kleikamp if (!desc || !desc->bg_free_inodes_count) 324*ac27a0ecSDave Kleikamp continue; 325*ac27a0ecSDave Kleikamp if (le16_to_cpu(desc->bg_used_dirs_count) >= max_dirs) 326*ac27a0ecSDave Kleikamp continue; 327*ac27a0ecSDave Kleikamp if (le16_to_cpu(desc->bg_free_inodes_count) < min_inodes) 328*ac27a0ecSDave Kleikamp continue; 329*ac27a0ecSDave Kleikamp if (le16_to_cpu(desc->bg_free_blocks_count) < min_blocks) 330*ac27a0ecSDave Kleikamp continue; 331*ac27a0ecSDave Kleikamp return group; 332*ac27a0ecSDave Kleikamp } 333*ac27a0ecSDave Kleikamp 334*ac27a0ecSDave Kleikamp fallback: 335*ac27a0ecSDave Kleikamp for (i = 0; i < ngroups; i++) { 336*ac27a0ecSDave Kleikamp group = (parent_group + i) % ngroups; 337*ac27a0ecSDave Kleikamp desc = ext3_get_group_desc (sb, group, &bh); 338*ac27a0ecSDave Kleikamp if (!desc || !desc->bg_free_inodes_count) 339*ac27a0ecSDave Kleikamp continue; 340*ac27a0ecSDave Kleikamp if (le16_to_cpu(desc->bg_free_inodes_count) >= avefreei) 341*ac27a0ecSDave Kleikamp return group; 342*ac27a0ecSDave Kleikamp } 343*ac27a0ecSDave Kleikamp 344*ac27a0ecSDave Kleikamp if (avefreei) { 345*ac27a0ecSDave Kleikamp /* 346*ac27a0ecSDave Kleikamp * The free-inodes counter is approximate, and for really small 347*ac27a0ecSDave Kleikamp * filesystems the above test can fail to find any blockgroups 348*ac27a0ecSDave Kleikamp */ 349*ac27a0ecSDave Kleikamp avefreei = 0; 350*ac27a0ecSDave Kleikamp goto fallback; 351*ac27a0ecSDave Kleikamp } 352*ac27a0ecSDave Kleikamp 353*ac27a0ecSDave Kleikamp return -1; 354*ac27a0ecSDave Kleikamp } 355*ac27a0ecSDave Kleikamp 356*ac27a0ecSDave Kleikamp static int find_group_other(struct super_block *sb, struct inode *parent) 357*ac27a0ecSDave Kleikamp { 358*ac27a0ecSDave Kleikamp int parent_group = EXT3_I(parent)->i_block_group; 359*ac27a0ecSDave Kleikamp int ngroups = EXT3_SB(sb)->s_groups_count; 360*ac27a0ecSDave Kleikamp struct ext3_group_desc *desc; 361*ac27a0ecSDave Kleikamp struct buffer_head *bh; 362*ac27a0ecSDave Kleikamp int group, i; 363*ac27a0ecSDave Kleikamp 364*ac27a0ecSDave Kleikamp /* 365*ac27a0ecSDave Kleikamp * Try to place the inode in its parent directory 366*ac27a0ecSDave Kleikamp */ 367*ac27a0ecSDave Kleikamp group = parent_group; 368*ac27a0ecSDave Kleikamp desc = ext3_get_group_desc (sb, group, &bh); 369*ac27a0ecSDave Kleikamp if (desc && le16_to_cpu(desc->bg_free_inodes_count) && 370*ac27a0ecSDave Kleikamp le16_to_cpu(desc->bg_free_blocks_count)) 371*ac27a0ecSDave Kleikamp return group; 372*ac27a0ecSDave Kleikamp 373*ac27a0ecSDave Kleikamp /* 374*ac27a0ecSDave Kleikamp * We're going to place this inode in a different blockgroup from its 375*ac27a0ecSDave Kleikamp * parent. We want to cause files in a common directory to all land in 376*ac27a0ecSDave Kleikamp * the same blockgroup. But we want files which are in a different 377*ac27a0ecSDave Kleikamp * directory which shares a blockgroup with our parent to land in a 378*ac27a0ecSDave Kleikamp * different blockgroup. 379*ac27a0ecSDave Kleikamp * 380*ac27a0ecSDave Kleikamp * So add our directory's i_ino into the starting point for the hash. 381*ac27a0ecSDave Kleikamp */ 382*ac27a0ecSDave Kleikamp group = (group + parent->i_ino) % ngroups; 383*ac27a0ecSDave Kleikamp 384*ac27a0ecSDave Kleikamp /* 385*ac27a0ecSDave Kleikamp * Use a quadratic hash to find a group with a free inode and some free 386*ac27a0ecSDave Kleikamp * blocks. 387*ac27a0ecSDave Kleikamp */ 388*ac27a0ecSDave Kleikamp for (i = 1; i < ngroups; i <<= 1) { 389*ac27a0ecSDave Kleikamp group += i; 390*ac27a0ecSDave Kleikamp if (group >= ngroups) 391*ac27a0ecSDave Kleikamp group -= ngroups; 392*ac27a0ecSDave Kleikamp desc = ext3_get_group_desc (sb, group, &bh); 393*ac27a0ecSDave Kleikamp if (desc && le16_to_cpu(desc->bg_free_inodes_count) && 394*ac27a0ecSDave Kleikamp le16_to_cpu(desc->bg_free_blocks_count)) 395*ac27a0ecSDave Kleikamp return group; 396*ac27a0ecSDave Kleikamp } 397*ac27a0ecSDave Kleikamp 398*ac27a0ecSDave Kleikamp /* 399*ac27a0ecSDave Kleikamp * That failed: try linear search for a free inode, even if that group 400*ac27a0ecSDave Kleikamp * has no free blocks. 401*ac27a0ecSDave Kleikamp */ 402*ac27a0ecSDave Kleikamp group = parent_group; 403*ac27a0ecSDave Kleikamp for (i = 0; i < ngroups; i++) { 404*ac27a0ecSDave Kleikamp if (++group >= ngroups) 405*ac27a0ecSDave Kleikamp group = 0; 406*ac27a0ecSDave Kleikamp desc = ext3_get_group_desc (sb, group, &bh); 407*ac27a0ecSDave Kleikamp if (desc && le16_to_cpu(desc->bg_free_inodes_count)) 408*ac27a0ecSDave Kleikamp return group; 409*ac27a0ecSDave Kleikamp } 410*ac27a0ecSDave Kleikamp 411*ac27a0ecSDave Kleikamp return -1; 412*ac27a0ecSDave Kleikamp } 413*ac27a0ecSDave Kleikamp 414*ac27a0ecSDave Kleikamp /* 415*ac27a0ecSDave Kleikamp * There are two policies for allocating an inode. If the new inode is 416*ac27a0ecSDave Kleikamp * a directory, then a forward search is made for a block group with both 417*ac27a0ecSDave Kleikamp * free space and a low directory-to-inode ratio; if that fails, then of 418*ac27a0ecSDave Kleikamp * the groups with above-average free space, that group with the fewest 419*ac27a0ecSDave Kleikamp * directories already is chosen. 420*ac27a0ecSDave Kleikamp * 421*ac27a0ecSDave Kleikamp * For other inodes, search forward from the parent directory's block 422*ac27a0ecSDave Kleikamp * group to find a free inode. 423*ac27a0ecSDave Kleikamp */ 424*ac27a0ecSDave Kleikamp struct inode *ext3_new_inode(handle_t *handle, struct inode * dir, int mode) 425*ac27a0ecSDave Kleikamp { 426*ac27a0ecSDave Kleikamp struct super_block *sb; 427*ac27a0ecSDave Kleikamp struct buffer_head *bitmap_bh = NULL; 428*ac27a0ecSDave Kleikamp struct buffer_head *bh2; 429*ac27a0ecSDave Kleikamp int group; 430*ac27a0ecSDave Kleikamp unsigned long ino = 0; 431*ac27a0ecSDave Kleikamp struct inode * inode; 432*ac27a0ecSDave Kleikamp struct ext3_group_desc * gdp = NULL; 433*ac27a0ecSDave Kleikamp struct ext3_super_block * es; 434*ac27a0ecSDave Kleikamp struct ext3_inode_info *ei; 435*ac27a0ecSDave Kleikamp struct ext3_sb_info *sbi; 436*ac27a0ecSDave Kleikamp int err = 0; 437*ac27a0ecSDave Kleikamp struct inode *ret; 438*ac27a0ecSDave Kleikamp int i; 439*ac27a0ecSDave Kleikamp 440*ac27a0ecSDave Kleikamp /* Cannot create files in a deleted directory */ 441*ac27a0ecSDave Kleikamp if (!dir || !dir->i_nlink) 442*ac27a0ecSDave Kleikamp return ERR_PTR(-EPERM); 443*ac27a0ecSDave Kleikamp 444*ac27a0ecSDave Kleikamp sb = dir->i_sb; 445*ac27a0ecSDave Kleikamp inode = new_inode(sb); 446*ac27a0ecSDave Kleikamp if (!inode) 447*ac27a0ecSDave Kleikamp return ERR_PTR(-ENOMEM); 448*ac27a0ecSDave Kleikamp ei = EXT3_I(inode); 449*ac27a0ecSDave Kleikamp 450*ac27a0ecSDave Kleikamp sbi = EXT3_SB(sb); 451*ac27a0ecSDave Kleikamp es = sbi->s_es; 452*ac27a0ecSDave Kleikamp if (S_ISDIR(mode)) { 453*ac27a0ecSDave Kleikamp if (test_opt (sb, OLDALLOC)) 454*ac27a0ecSDave Kleikamp group = find_group_dir(sb, dir); 455*ac27a0ecSDave Kleikamp else 456*ac27a0ecSDave Kleikamp group = find_group_orlov(sb, dir); 457*ac27a0ecSDave Kleikamp } else 458*ac27a0ecSDave Kleikamp group = find_group_other(sb, dir); 459*ac27a0ecSDave Kleikamp 460*ac27a0ecSDave Kleikamp err = -ENOSPC; 461*ac27a0ecSDave Kleikamp if (group == -1) 462*ac27a0ecSDave Kleikamp goto out; 463*ac27a0ecSDave Kleikamp 464*ac27a0ecSDave Kleikamp for (i = 0; i < sbi->s_groups_count; i++) { 465*ac27a0ecSDave Kleikamp err = -EIO; 466*ac27a0ecSDave Kleikamp 467*ac27a0ecSDave Kleikamp gdp = ext3_get_group_desc(sb, group, &bh2); 468*ac27a0ecSDave Kleikamp if (!gdp) 469*ac27a0ecSDave Kleikamp goto fail; 470*ac27a0ecSDave Kleikamp 471*ac27a0ecSDave Kleikamp brelse(bitmap_bh); 472*ac27a0ecSDave Kleikamp bitmap_bh = read_inode_bitmap(sb, group); 473*ac27a0ecSDave Kleikamp if (!bitmap_bh) 474*ac27a0ecSDave Kleikamp goto fail; 475*ac27a0ecSDave Kleikamp 476*ac27a0ecSDave Kleikamp ino = 0; 477*ac27a0ecSDave Kleikamp 478*ac27a0ecSDave Kleikamp repeat_in_this_group: 479*ac27a0ecSDave Kleikamp ino = ext3_find_next_zero_bit((unsigned long *) 480*ac27a0ecSDave Kleikamp bitmap_bh->b_data, EXT3_INODES_PER_GROUP(sb), ino); 481*ac27a0ecSDave Kleikamp if (ino < EXT3_INODES_PER_GROUP(sb)) { 482*ac27a0ecSDave Kleikamp 483*ac27a0ecSDave Kleikamp BUFFER_TRACE(bitmap_bh, "get_write_access"); 484*ac27a0ecSDave Kleikamp err = ext3_journal_get_write_access(handle, bitmap_bh); 485*ac27a0ecSDave Kleikamp if (err) 486*ac27a0ecSDave Kleikamp goto fail; 487*ac27a0ecSDave Kleikamp 488*ac27a0ecSDave Kleikamp if (!ext3_set_bit_atomic(sb_bgl_lock(sbi, group), 489*ac27a0ecSDave Kleikamp ino, bitmap_bh->b_data)) { 490*ac27a0ecSDave Kleikamp /* we won it */ 491*ac27a0ecSDave Kleikamp BUFFER_TRACE(bitmap_bh, 492*ac27a0ecSDave Kleikamp "call ext3_journal_dirty_metadata"); 493*ac27a0ecSDave Kleikamp err = ext3_journal_dirty_metadata(handle, 494*ac27a0ecSDave Kleikamp bitmap_bh); 495*ac27a0ecSDave Kleikamp if (err) 496*ac27a0ecSDave Kleikamp goto fail; 497*ac27a0ecSDave Kleikamp goto got; 498*ac27a0ecSDave Kleikamp } 499*ac27a0ecSDave Kleikamp /* we lost it */ 500*ac27a0ecSDave Kleikamp journal_release_buffer(handle, bitmap_bh); 501*ac27a0ecSDave Kleikamp 502*ac27a0ecSDave Kleikamp if (++ino < EXT3_INODES_PER_GROUP(sb)) 503*ac27a0ecSDave Kleikamp goto repeat_in_this_group; 504*ac27a0ecSDave Kleikamp } 505*ac27a0ecSDave Kleikamp 506*ac27a0ecSDave Kleikamp /* 507*ac27a0ecSDave Kleikamp * This case is possible in concurrent environment. It is very 508*ac27a0ecSDave Kleikamp * rare. We cannot repeat the find_group_xxx() call because 509*ac27a0ecSDave Kleikamp * that will simply return the same blockgroup, because the 510*ac27a0ecSDave Kleikamp * group descriptor metadata has not yet been updated. 511*ac27a0ecSDave Kleikamp * So we just go onto the next blockgroup. 512*ac27a0ecSDave Kleikamp */ 513*ac27a0ecSDave Kleikamp if (++group == sbi->s_groups_count) 514*ac27a0ecSDave Kleikamp group = 0; 515*ac27a0ecSDave Kleikamp } 516*ac27a0ecSDave Kleikamp err = -ENOSPC; 517*ac27a0ecSDave Kleikamp goto out; 518*ac27a0ecSDave Kleikamp 519*ac27a0ecSDave Kleikamp got: 520*ac27a0ecSDave Kleikamp ino += group * EXT3_INODES_PER_GROUP(sb) + 1; 521*ac27a0ecSDave Kleikamp if (ino < EXT3_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) { 522*ac27a0ecSDave Kleikamp ext3_error (sb, "ext3_new_inode", 523*ac27a0ecSDave Kleikamp "reserved inode or inode > inodes count - " 524*ac27a0ecSDave Kleikamp "block_group = %d, inode=%lu", group, ino); 525*ac27a0ecSDave Kleikamp err = -EIO; 526*ac27a0ecSDave Kleikamp goto fail; 527*ac27a0ecSDave Kleikamp } 528*ac27a0ecSDave Kleikamp 529*ac27a0ecSDave Kleikamp BUFFER_TRACE(bh2, "get_write_access"); 530*ac27a0ecSDave Kleikamp err = ext3_journal_get_write_access(handle, bh2); 531*ac27a0ecSDave Kleikamp if (err) goto fail; 532*ac27a0ecSDave Kleikamp spin_lock(sb_bgl_lock(sbi, group)); 533*ac27a0ecSDave Kleikamp gdp->bg_free_inodes_count = 534*ac27a0ecSDave Kleikamp cpu_to_le16(le16_to_cpu(gdp->bg_free_inodes_count) - 1); 535*ac27a0ecSDave Kleikamp if (S_ISDIR(mode)) { 536*ac27a0ecSDave Kleikamp gdp->bg_used_dirs_count = 537*ac27a0ecSDave Kleikamp cpu_to_le16(le16_to_cpu(gdp->bg_used_dirs_count) + 1); 538*ac27a0ecSDave Kleikamp } 539*ac27a0ecSDave Kleikamp spin_unlock(sb_bgl_lock(sbi, group)); 540*ac27a0ecSDave Kleikamp BUFFER_TRACE(bh2, "call ext3_journal_dirty_metadata"); 541*ac27a0ecSDave Kleikamp err = ext3_journal_dirty_metadata(handle, bh2); 542*ac27a0ecSDave Kleikamp if (err) goto fail; 543*ac27a0ecSDave Kleikamp 544*ac27a0ecSDave Kleikamp percpu_counter_dec(&sbi->s_freeinodes_counter); 545*ac27a0ecSDave Kleikamp if (S_ISDIR(mode)) 546*ac27a0ecSDave Kleikamp percpu_counter_inc(&sbi->s_dirs_counter); 547*ac27a0ecSDave Kleikamp sb->s_dirt = 1; 548*ac27a0ecSDave Kleikamp 549*ac27a0ecSDave Kleikamp inode->i_uid = current->fsuid; 550*ac27a0ecSDave Kleikamp if (test_opt (sb, GRPID)) 551*ac27a0ecSDave Kleikamp inode->i_gid = dir->i_gid; 552*ac27a0ecSDave Kleikamp else if (dir->i_mode & S_ISGID) { 553*ac27a0ecSDave Kleikamp inode->i_gid = dir->i_gid; 554*ac27a0ecSDave Kleikamp if (S_ISDIR(mode)) 555*ac27a0ecSDave Kleikamp mode |= S_ISGID; 556*ac27a0ecSDave Kleikamp } else 557*ac27a0ecSDave Kleikamp inode->i_gid = current->fsgid; 558*ac27a0ecSDave Kleikamp inode->i_mode = mode; 559*ac27a0ecSDave Kleikamp 560*ac27a0ecSDave Kleikamp inode->i_ino = ino; 561*ac27a0ecSDave Kleikamp /* This is the optimal IO size (for stat), not the fs block size */ 562*ac27a0ecSDave Kleikamp inode->i_blocks = 0; 563*ac27a0ecSDave Kleikamp inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC; 564*ac27a0ecSDave Kleikamp 565*ac27a0ecSDave Kleikamp memset(ei->i_data, 0, sizeof(ei->i_data)); 566*ac27a0ecSDave Kleikamp ei->i_dir_start_lookup = 0; 567*ac27a0ecSDave Kleikamp ei->i_disksize = 0; 568*ac27a0ecSDave Kleikamp 569*ac27a0ecSDave Kleikamp ei->i_flags = EXT3_I(dir)->i_flags & ~EXT3_INDEX_FL; 570*ac27a0ecSDave Kleikamp if (S_ISLNK(mode)) 571*ac27a0ecSDave Kleikamp ei->i_flags &= ~(EXT3_IMMUTABLE_FL|EXT3_APPEND_FL); 572*ac27a0ecSDave Kleikamp /* dirsync only applies to directories */ 573*ac27a0ecSDave Kleikamp if (!S_ISDIR(mode)) 574*ac27a0ecSDave Kleikamp ei->i_flags &= ~EXT3_DIRSYNC_FL; 575*ac27a0ecSDave Kleikamp #ifdef EXT3_FRAGMENTS 576*ac27a0ecSDave Kleikamp ei->i_faddr = 0; 577*ac27a0ecSDave Kleikamp ei->i_frag_no = 0; 578*ac27a0ecSDave Kleikamp ei->i_frag_size = 0; 579*ac27a0ecSDave Kleikamp #endif 580*ac27a0ecSDave Kleikamp ei->i_file_acl = 0; 581*ac27a0ecSDave Kleikamp ei->i_dir_acl = 0; 582*ac27a0ecSDave Kleikamp ei->i_dtime = 0; 583*ac27a0ecSDave Kleikamp ei->i_block_alloc_info = NULL; 584*ac27a0ecSDave Kleikamp ei->i_block_group = group; 585*ac27a0ecSDave Kleikamp 586*ac27a0ecSDave Kleikamp ext3_set_inode_flags(inode); 587*ac27a0ecSDave Kleikamp if (IS_DIRSYNC(inode)) 588*ac27a0ecSDave Kleikamp handle->h_sync = 1; 589*ac27a0ecSDave Kleikamp insert_inode_hash(inode); 590*ac27a0ecSDave Kleikamp spin_lock(&sbi->s_next_gen_lock); 591*ac27a0ecSDave Kleikamp inode->i_generation = sbi->s_next_generation++; 592*ac27a0ecSDave Kleikamp spin_unlock(&sbi->s_next_gen_lock); 593*ac27a0ecSDave Kleikamp 594*ac27a0ecSDave Kleikamp ei->i_state = EXT3_STATE_NEW; 595*ac27a0ecSDave Kleikamp ei->i_extra_isize = 596*ac27a0ecSDave Kleikamp (EXT3_INODE_SIZE(inode->i_sb) > EXT3_GOOD_OLD_INODE_SIZE) ? 597*ac27a0ecSDave Kleikamp sizeof(struct ext3_inode) - EXT3_GOOD_OLD_INODE_SIZE : 0; 598*ac27a0ecSDave Kleikamp 599*ac27a0ecSDave Kleikamp ret = inode; 600*ac27a0ecSDave Kleikamp if(DQUOT_ALLOC_INODE(inode)) { 601*ac27a0ecSDave Kleikamp err = -EDQUOT; 602*ac27a0ecSDave Kleikamp goto fail_drop; 603*ac27a0ecSDave Kleikamp } 604*ac27a0ecSDave Kleikamp 605*ac27a0ecSDave Kleikamp err = ext3_init_acl(handle, inode, dir); 606*ac27a0ecSDave Kleikamp if (err) 607*ac27a0ecSDave Kleikamp goto fail_free_drop; 608*ac27a0ecSDave Kleikamp 609*ac27a0ecSDave Kleikamp err = ext3_init_security(handle,inode, dir); 610*ac27a0ecSDave Kleikamp if (err) 611*ac27a0ecSDave Kleikamp goto fail_free_drop; 612*ac27a0ecSDave Kleikamp 613*ac27a0ecSDave Kleikamp err = ext3_mark_inode_dirty(handle, inode); 614*ac27a0ecSDave Kleikamp if (err) { 615*ac27a0ecSDave Kleikamp ext3_std_error(sb, err); 616*ac27a0ecSDave Kleikamp goto fail_free_drop; 617*ac27a0ecSDave Kleikamp } 618*ac27a0ecSDave Kleikamp 619*ac27a0ecSDave Kleikamp ext3_debug("allocating inode %lu\n", inode->i_ino); 620*ac27a0ecSDave Kleikamp goto really_out; 621*ac27a0ecSDave Kleikamp fail: 622*ac27a0ecSDave Kleikamp ext3_std_error(sb, err); 623*ac27a0ecSDave Kleikamp out: 624*ac27a0ecSDave Kleikamp iput(inode); 625*ac27a0ecSDave Kleikamp ret = ERR_PTR(err); 626*ac27a0ecSDave Kleikamp really_out: 627*ac27a0ecSDave Kleikamp brelse(bitmap_bh); 628*ac27a0ecSDave Kleikamp return ret; 629*ac27a0ecSDave Kleikamp 630*ac27a0ecSDave Kleikamp fail_free_drop: 631*ac27a0ecSDave Kleikamp DQUOT_FREE_INODE(inode); 632*ac27a0ecSDave Kleikamp 633*ac27a0ecSDave Kleikamp fail_drop: 634*ac27a0ecSDave Kleikamp DQUOT_DROP(inode); 635*ac27a0ecSDave Kleikamp inode->i_flags |= S_NOQUOTA; 636*ac27a0ecSDave Kleikamp inode->i_nlink = 0; 637*ac27a0ecSDave Kleikamp iput(inode); 638*ac27a0ecSDave Kleikamp brelse(bitmap_bh); 639*ac27a0ecSDave Kleikamp return ERR_PTR(err); 640*ac27a0ecSDave Kleikamp } 641*ac27a0ecSDave Kleikamp 642*ac27a0ecSDave Kleikamp /* Verify that we are loading a valid orphan from disk */ 643*ac27a0ecSDave Kleikamp struct inode *ext3_orphan_get(struct super_block *sb, unsigned long ino) 644*ac27a0ecSDave Kleikamp { 645*ac27a0ecSDave Kleikamp unsigned long max_ino = le32_to_cpu(EXT3_SB(sb)->s_es->s_inodes_count); 646*ac27a0ecSDave Kleikamp unsigned long block_group; 647*ac27a0ecSDave Kleikamp int bit; 648*ac27a0ecSDave Kleikamp struct buffer_head *bitmap_bh = NULL; 649*ac27a0ecSDave Kleikamp struct inode *inode = NULL; 650*ac27a0ecSDave Kleikamp 651*ac27a0ecSDave Kleikamp /* Error cases - e2fsck has already cleaned up for us */ 652*ac27a0ecSDave Kleikamp if (ino > max_ino) { 653*ac27a0ecSDave Kleikamp ext3_warning(sb, __FUNCTION__, 654*ac27a0ecSDave Kleikamp "bad orphan ino %lu! e2fsck was run?", ino); 655*ac27a0ecSDave Kleikamp goto out; 656*ac27a0ecSDave Kleikamp } 657*ac27a0ecSDave Kleikamp 658*ac27a0ecSDave Kleikamp block_group = (ino - 1) / EXT3_INODES_PER_GROUP(sb); 659*ac27a0ecSDave Kleikamp bit = (ino - 1) % EXT3_INODES_PER_GROUP(sb); 660*ac27a0ecSDave Kleikamp bitmap_bh = read_inode_bitmap(sb, block_group); 661*ac27a0ecSDave Kleikamp if (!bitmap_bh) { 662*ac27a0ecSDave Kleikamp ext3_warning(sb, __FUNCTION__, 663*ac27a0ecSDave Kleikamp "inode bitmap error for orphan %lu", ino); 664*ac27a0ecSDave Kleikamp goto out; 665*ac27a0ecSDave Kleikamp } 666*ac27a0ecSDave Kleikamp 667*ac27a0ecSDave Kleikamp /* Having the inode bit set should be a 100% indicator that this 668*ac27a0ecSDave Kleikamp * is a valid orphan (no e2fsck run on fs). Orphans also include 669*ac27a0ecSDave Kleikamp * inodes that were being truncated, so we can't check i_nlink==0. 670*ac27a0ecSDave Kleikamp */ 671*ac27a0ecSDave Kleikamp if (!ext3_test_bit(bit, bitmap_bh->b_data) || 672*ac27a0ecSDave Kleikamp !(inode = iget(sb, ino)) || is_bad_inode(inode) || 673*ac27a0ecSDave Kleikamp NEXT_ORPHAN(inode) > max_ino) { 674*ac27a0ecSDave Kleikamp ext3_warning(sb, __FUNCTION__, 675*ac27a0ecSDave Kleikamp "bad orphan inode %lu! e2fsck was run?", ino); 676*ac27a0ecSDave Kleikamp printk(KERN_NOTICE "ext3_test_bit(bit=%d, block=%llu) = %d\n", 677*ac27a0ecSDave Kleikamp bit, (unsigned long long)bitmap_bh->b_blocknr, 678*ac27a0ecSDave Kleikamp ext3_test_bit(bit, bitmap_bh->b_data)); 679*ac27a0ecSDave Kleikamp printk(KERN_NOTICE "inode=%p\n", inode); 680*ac27a0ecSDave Kleikamp if (inode) { 681*ac27a0ecSDave Kleikamp printk(KERN_NOTICE "is_bad_inode(inode)=%d\n", 682*ac27a0ecSDave Kleikamp is_bad_inode(inode)); 683*ac27a0ecSDave Kleikamp printk(KERN_NOTICE "NEXT_ORPHAN(inode)=%u\n", 684*ac27a0ecSDave Kleikamp NEXT_ORPHAN(inode)); 685*ac27a0ecSDave Kleikamp printk(KERN_NOTICE "max_ino=%lu\n", max_ino); 686*ac27a0ecSDave Kleikamp } 687*ac27a0ecSDave Kleikamp /* Avoid freeing blocks if we got a bad deleted inode */ 688*ac27a0ecSDave Kleikamp if (inode && inode->i_nlink == 0) 689*ac27a0ecSDave Kleikamp inode->i_blocks = 0; 690*ac27a0ecSDave Kleikamp iput(inode); 691*ac27a0ecSDave Kleikamp inode = NULL; 692*ac27a0ecSDave Kleikamp } 693*ac27a0ecSDave Kleikamp out: 694*ac27a0ecSDave Kleikamp brelse(bitmap_bh); 695*ac27a0ecSDave Kleikamp return inode; 696*ac27a0ecSDave Kleikamp } 697*ac27a0ecSDave Kleikamp 698*ac27a0ecSDave Kleikamp unsigned long ext3_count_free_inodes (struct super_block * sb) 699*ac27a0ecSDave Kleikamp { 700*ac27a0ecSDave Kleikamp unsigned long desc_count; 701*ac27a0ecSDave Kleikamp struct ext3_group_desc *gdp; 702*ac27a0ecSDave Kleikamp int i; 703*ac27a0ecSDave Kleikamp #ifdef EXT3FS_DEBUG 704*ac27a0ecSDave Kleikamp struct ext3_super_block *es; 705*ac27a0ecSDave Kleikamp unsigned long bitmap_count, x; 706*ac27a0ecSDave Kleikamp struct buffer_head *bitmap_bh = NULL; 707*ac27a0ecSDave Kleikamp 708*ac27a0ecSDave Kleikamp es = EXT3_SB(sb)->s_es; 709*ac27a0ecSDave Kleikamp desc_count = 0; 710*ac27a0ecSDave Kleikamp bitmap_count = 0; 711*ac27a0ecSDave Kleikamp gdp = NULL; 712*ac27a0ecSDave Kleikamp for (i = 0; i < EXT3_SB(sb)->s_groups_count; i++) { 713*ac27a0ecSDave Kleikamp gdp = ext3_get_group_desc (sb, i, NULL); 714*ac27a0ecSDave Kleikamp if (!gdp) 715*ac27a0ecSDave Kleikamp continue; 716*ac27a0ecSDave Kleikamp desc_count += le16_to_cpu(gdp->bg_free_inodes_count); 717*ac27a0ecSDave Kleikamp brelse(bitmap_bh); 718*ac27a0ecSDave Kleikamp bitmap_bh = read_inode_bitmap(sb, i); 719*ac27a0ecSDave Kleikamp if (!bitmap_bh) 720*ac27a0ecSDave Kleikamp continue; 721*ac27a0ecSDave Kleikamp 722*ac27a0ecSDave Kleikamp x = ext3_count_free(bitmap_bh, EXT3_INODES_PER_GROUP(sb) / 8); 723*ac27a0ecSDave Kleikamp printk("group %d: stored = %d, counted = %lu\n", 724*ac27a0ecSDave Kleikamp i, le16_to_cpu(gdp->bg_free_inodes_count), x); 725*ac27a0ecSDave Kleikamp bitmap_count += x; 726*ac27a0ecSDave Kleikamp } 727*ac27a0ecSDave Kleikamp brelse(bitmap_bh); 728*ac27a0ecSDave Kleikamp printk("ext3_count_free_inodes: stored = %u, computed = %lu, %lu\n", 729*ac27a0ecSDave Kleikamp le32_to_cpu(es->s_free_inodes_count), desc_count, bitmap_count); 730*ac27a0ecSDave Kleikamp return desc_count; 731*ac27a0ecSDave Kleikamp #else 732*ac27a0ecSDave Kleikamp desc_count = 0; 733*ac27a0ecSDave Kleikamp for (i = 0; i < EXT3_SB(sb)->s_groups_count; i++) { 734*ac27a0ecSDave Kleikamp gdp = ext3_get_group_desc (sb, i, NULL); 735*ac27a0ecSDave Kleikamp if (!gdp) 736*ac27a0ecSDave Kleikamp continue; 737*ac27a0ecSDave Kleikamp desc_count += le16_to_cpu(gdp->bg_free_inodes_count); 738*ac27a0ecSDave Kleikamp cond_resched(); 739*ac27a0ecSDave Kleikamp } 740*ac27a0ecSDave Kleikamp return desc_count; 741*ac27a0ecSDave Kleikamp #endif 742*ac27a0ecSDave Kleikamp } 743*ac27a0ecSDave Kleikamp 744*ac27a0ecSDave Kleikamp /* Called at mount-time, super-block is locked */ 745*ac27a0ecSDave Kleikamp unsigned long ext3_count_dirs (struct super_block * sb) 746*ac27a0ecSDave Kleikamp { 747*ac27a0ecSDave Kleikamp unsigned long count = 0; 748*ac27a0ecSDave Kleikamp int i; 749*ac27a0ecSDave Kleikamp 750*ac27a0ecSDave Kleikamp for (i = 0; i < EXT3_SB(sb)->s_groups_count; i++) { 751*ac27a0ecSDave Kleikamp struct ext3_group_desc *gdp = ext3_get_group_desc (sb, i, NULL); 752*ac27a0ecSDave Kleikamp if (!gdp) 753*ac27a0ecSDave Kleikamp continue; 754*ac27a0ecSDave Kleikamp count += le16_to_cpu(gdp->bg_used_dirs_count); 755*ac27a0ecSDave Kleikamp } 756*ac27a0ecSDave Kleikamp return count; 757*ac27a0ecSDave Kleikamp } 758*ac27a0ecSDave Kleikamp 759