[Ocfs2-devel] [PATCH 3/3] Ocfs2: Add a new code 'OCFS2_INFO_FREEFRAG' for o2info ioctl.

Joel Becker Joel.Becker at oracle.com
Mon Dec 6 17:11:59 PST 2010


On Tue, Nov 16, 2010 at 06:13:42PM +0800, Tristan Ye wrote:
> +static void o2ffg_update_histogram(struct ocfs2_info_free_chunk_list *hist,
> +				   unsigned int chunksize)
> +{
> +	int index;
> +
> +	index = __ilog2_u32(chunksize);
> +	if (index >= OCFS2_INFO_MAX_HIST)
> +		index = OCFS2_INFO_MAX_HIST - 1;
> +
> +	hist->fc_chunks[index]++;
> +	hist->fc_clusters[index] += chunksize;
> +}
> +
> +static void o2ffg_update_stats(struct ocfs2_info_freefrag_stats *stats,
> +			       unsigned int chunksize)
> +{
> +	if (chunksize > stats->ffs_max)
> +		stats->ffs_max = chunksize;
> +
> +	if (chunksize < stats->ffs_min)
> +		stats->ffs_min = chunksize;
> +
> +	stats->ffs_avg += chunksize;
> +	stats->ffs_free_chunks_real++;
> +}

	MUCH more readable.

> +int ocfs2_info_freefrag_scan_bitmap(struct ocfs2_super *osb,
> +				    struct inode *gb_inode, u64 blkno,
> +				    struct ocfs2_info_freefrag *ffg)
> +{
> +	u32 chunks_in_group;
> +	int status = 0, unlock = 0, i;
> +
> +	struct buffer_head *bh = NULL;
> +	struct ocfs2_chain_list *cl = NULL;
> +	struct ocfs2_chain_rec *rec = NULL;
> +	struct ocfs2_dinode *gb_dinode = NULL;
> +
> +	if (gb_inode)
> +		mutex_lock(&gb_inode->i_mutex);
> +
> +	if (o2info_coherent(*ffg)) {
> +		status = ocfs2_inode_lock(gb_inode, &bh, 0);
> +		if (status < 0) {
> +			mlog_errno(status);
> +			goto bail;
> +		}
> +		unlock = 1;
> +	} else {
> +		status = ocfs2_read_blocks_sync(osb, blkno, 1, &bh);
> +		if (status < 0) {
> +			mlog_errno(status);
> +			goto bail;
> +		}
> +	}
> +
> +	gb_dinode = (struct ocfs2_dinode *)bh->b_data;
> +	cl = &(gb_dinode->id2.i_chain);

	This is safe because we never remove a chain entry from an
inode.  However, if we ever shrink disks, we'll need to coordinate with
this code.  Perhaps we should comment that.

Joel

-- 

"Also, all of life's big problems include the words 'indictment' or
	'inoperable.' Everything else is small stuff."
	- Alton Brown

Joel Becker
Senior Development Manager
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127



More information about the Ocfs2-devel mailing list