On Sat, Apr 19, 2008 at 04:37:32PM -0400, Bob Copeland wrote: > +static int omfs_get_imap(struct super_block *sb) > +{ > + int bitmap_size; > + int array_size; > + int count; > + struct omfs_sb_info *sbi = OMFS_SB(sb); > + struct buffer_head *bh; > + unsigned long **ptr; > + sector_t block; > + > + bitmap_size = (sbi->s_num_blocks + 7) / 8; > + array_size = (bitmap_size + sb->s_blocksize - 1) / sb->s_blocksize; these are DIV_ROUND_UP > + > + if (sbi->s_bitmap_ino == ~0ULL) > + goto out; > + > + sbi->s_imap_size = array_size; > + sbi->s_imap = kzalloc(array_size * sizeof(unsigned long *), GFP_KERNEL); > + if (!sbi->s_imap) > + goto nomem; > + > + block = clus_to_blk(sbi, sbi->s_bitmap_ino); > + ptr = sbi->s_imap; > + for (count = bitmap_size; count > 0; count -= sb->s_blocksize) { > + bh = sb_bread(sb, block++); > + if (!bh) > + goto nomem_free; > + *ptr = kmalloc(sb->s_blocksize, GFP_KERNEL); > + if (!*ptr) { > + brelse(bh); > + goto nomem_free; > + } > + memcpy(*ptr, bh->b_data, sb->s_blocksize); > + if (count < sb->s_blocksize) > + memset((void *)*ptr + count, 0xff, > + sb->s_blocksize - count); > + brelse(bh); > + ptr++; > + } > +out: > + return 0; > + > +nomem_free: > + for (count = 0; count < array_size; count++) > + kfree(sbi->s_imap[count]); > + > + kfree(sbi->s_imap); > +nomem: > + sbi->s_imap = NULL; > + sbi->s_imap_size = 0; > + return -ENOMEM; > +} > + > +static void set_block_shift(struct omfs_sb_info *sbi) > +{ > + unsigned int scale = sbi->s_blocksize / sbi->s_sys_blocksize; > + sbi->s_block_shift = 0; > + for (scale >>= 1; scale; scale >>= 1) > + sbi->s_block_shift++; > +} isn't it get_bitmask_order(scale - 1)? Marcin -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html