Re: [PATCH 3/8] omfs: add inode routines
From: Marcin Slusarz
Date: Sat Apr 19 2008 - 17:29:39 EST
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-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/