Re: [PATCH 1/1 version2] Extent overlap bugfix in ext4

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

 



On Thu, Jan 04, 2007 at 01:39:24PM +0300, Alex Tomas (AT) wrote:
> >>>>> Amit K Arora (AKA) writes:
> 
>  AKA> +int ext4_ext_check_overlap(struct inode *inode,
>  AKA> +					struct ext4_extent *newext,
>  AKA> +					unsigned long *block)
>  AKA> +{
>  AKA> +	struct ext4_ext_path *path;
>  AKA> +	unsigned int depth, b1, len1;
>  AKA> +	int ret = 0;
>  AKA> +
>  AKA> +	b1 = le32_to_cpu(newext->ee_block);
>  AKA> +	len1 = le16_to_cpu(newext->ee_len);
>  AKA> +	path = ext4_ext_find_extent(inode, b1, NULL);
>  AKA> +	if (IS_ERR(path)) {
>  AKA> +		ret = PTR_ERR(path);
>  AKA> +		goto out;
>  AKA> +	}
>  AKA> +	depth = ext_depth(inode);
>  AKA> +	BUG_ON(path[depth].p_ext == NULL && depth != 0);
>  AKA> +
>  AKA> +	*block = ext4_ext_next_allocated_block(path);
>  AKA> +	if (*block == EXT_MAX_BLOCK)
>  AKA> +		goto out;
>  AKA> +
>  AKA> +	if (b1 + len1 > *block)
>  AKA> +		ret = 1;
>  AKA> +out:
>  AKA> +	return ret;
>  AKA> +}
 
> AT> I'm also not sure we need ext4_ext_find_extent() here.
Do you mean ext4_ext_next_allocated_block() above ? We anyhow have to
call find_extent() to get the possible neighbouring extent.

> AT> there are two possibilities:
> 
> AT> 1) extent in found path covers block(s) before requested ones
> AT>    then ext4_ext_next_allocated_block(path) can be used
> 
> AT> 2) extent in found path covers block(s) after request ones
> AT>    then ee_block from that extent can be used.

You are right. In the case the requested block(s) lie within a hole, when
this hole starts from the begining of the file, this will be true. i.e.,
find_blocks() will return the extent after the requested block(s). In all
other cases, it will return the extent before the requested block(s)
(assuming there is no existing extent which covers the start of the
requested blocks).

Will change the code accordingly to handle this corner case. Thanks for
pointing this out !

--
Regards,
Amit Arora
-
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