xfs
[Top] [All Lists]

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

To: Dave Chinner <david@xxxxxxxxxxxxx>
Subject: Re: [PATCH v7 3/4] xfs: xfs_seek_data() refinement with unwritten extents check up from page cache
From: Jie Liu <jeff.liu@xxxxxxxxxx>
Date: Tue, 21 Aug 2012 13:07:06 +0800
Cc: xfs@xxxxxxxxxxx
In-reply-to: <20120820231607.GK19235@dastard>
References: <5028FC39.5060809@xxxxxxxxxx> <20120820231607.GK19235@dastard>
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120714 Thunderbird/14.0
On 08/21/12 07:16, Dave Chinner wrote:
> 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);
Will add this check up.

Thanks,
-Jeff
>
>> +            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.

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