Re: [PATCH v2] ext4:Teach ext4_ext_split to caculate extents efficiently.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, May 23, 2011 at 05:30:57PM +0800, Yongqiang Yang wrote:
> @@ -982,20 +997,13 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
>  			err = -EIO;
>  			goto cleanup;
>  		}
> -		while (path[i].p_idx <= EXT_MAX_INDEX(path[i].p_hdr)) {
> -			ext_debug("%d: move %d:%llu in new index %llu\n", i,
> -					le32_to_cpu(path[i].p_idx->ei_block),
> -					ext4_idx_pblock(path[i].p_idx),
> -					newblock);
> -			/*memmove(++fidx, path[i].p_idx++,
> -					sizeof(struct ext4_extent_idx));
> -			neh->eh_entries++;
> -			BUG_ON(neh->eh_entries > neh->eh_max);*/
> -			path[i].p_idx++;
> -			m++;
> -		}
> +		/* start copy indexes */
> +		m = EXT_MAX_INDEX(path[i].p_hdr) - path[i].p_idx++;
> +		ext_debug("cur 0x%p, last 0x%p\n", path[i].p_idx,
> +				EXT_MAX_INDEX(path[i].p_hdr));
> +		ext4_ext_show_move(inode, path, newblock, i);
>  		if (m) {
> -			memmove(++fidx, path[i].p_idx - m,
> +			memmove(++fidx, path[i].p_idx,
>  				sizeof(struct ext4_extent_idx) * m);
>  			le16_add_cpu(&neh->eh_entries, m);
>  		}

So the old code mutates path[i].p_idx, where as your new code doesn't.
The one thing that scares me is that ext4_ext_insert_index() is passed
&path[at], the function preferences path[at].p_idx.

Have you looked at this case?

					- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux