xfs
[Top] [All Lists]

Re: [PATCH v7 3/4] xfs: xfs_seek_data() refinement with unwritten extent

To: Jeff Liu <jeff.liu@xxxxxxxxxx>
Subject: Re: [PATCH v7 3/4] xfs: xfs_seek_data() refinement with unwritten extents check up from page cache
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Tue, 21 Aug 2012 09:16:07 +1000
Cc: xfs@xxxxxxxxxxx
In-reply-to: <5028FC39.5060809@xxxxxxxxxx>
References: <5028FC39.5060809@xxxxxxxxxx>
User-agent: Mutt/1.5.21 (2010-09-15)
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@xxxxxxxxxx>

One minor addition, otherwise

Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx>

....
> +
> +             /*
> +              * 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@xxxxxxxxxxxxx

<Prev in Thread] Current Thread [Next in Thread>