[PATCH v7 3/4] xfs: xfs_seek_data() refinement with unwritten extents check up from page cache

Dave Chinner david at fromorbit.com
Mon Aug 20 18:16:07 CDT 2012


On Mon, Aug 13, 2012 at 09:08:09PM +0800, Jeff Liu wrote:
> Improve xfs_seek_data() to search data offset from page cache for unwritten extents.
> 
> Signed-off-by: Jie Liu <jeff.liu at oracle.com>

One minor addition, otherwise

Reviewed-by: Dave Chinner <dchinner at redhat.com>

....
> +
> +		/*
> +		 * map[0] is hole or its an unwritten extent but
> +		 * without data in page cache.  Probably means that
> +		 * we are reading after EOF if nothing in map[1].
> +		 */
>  		if (nmap == 1) {
>  			error = ENXIO;
>  			goto out_unlock;
>  		}
>  
> -		offset = max_t(loff_t, start,
> -			       XFS_FSB_TO_B(mp, map[1].br_startoff));
> +		/*
> +		 * Nothing was found, proceed to the next round of search
> +		 * if reading offset not beyond or hit EOF.
> +		 */

		ASSERT(i > 1);

> +		fsbno = map[i - 1].br_startoff + map[i - 1].br_blockcount;
> +		start = XFS_FSB_TO_B(mp, fsbno);
> +		if (start >= isize) {
> +			error = ENXIO;
> +			goto out_unlock;
> +		}
>  	}
>  
> +out:
>  	if (offset != file->f_pos)
>  		file->f_pos = offset;

Cheers,

Dave.
-- 
Dave Chinner
david at fromorbit.com



More information about the xfs mailing list