[pnfs] [PATCH 02/28] pnfs: fix pnfs_{read|write}pages
Benny Halevy
bhalevy at panasas.com
Fri Mar 14 01:13:36 EDT 2008
Fredric Isaman wrote:
>
>
> On Thu, 13 Mar 2008, Benny Halevy wrote:
>
>> On Mar. 13, 2008, 20:09 +0200, Fredric Isaman
>> <iisaman at citi.umich.edu> wrote:
>>> On Wed, 12 Mar 2008, Benny Halevy wrote:
>>>
>>>> On Mar. 12, 2008, 18:23 +0200, Fredric Isaman
>>>> <iisaman at citi.umich.edu> wrote:
>>>>> On Wed, 12 Mar 2008, Benny Halevy wrote:
>>>>>
>>>>>> On Mar. 11, 2008, 21:31 +0200, Fred Isaman
>>>>>> <iisaman at citi.umich.edu> wrote:
>>>>>>> THIS WILL BREAK OTHER LAYOUT DRIVERS that rely on old behavior.
>>>>>> Fred, do you have the cycles to fix the files and objects LDs
>>>>>> for the new behavior so we can merge this patch onto the pnfs
>>>>>> branch?
>>>>>>
>>>>> Yes, I'll work on that.
>>>>>
>>>>> Fred
>>>> Thanks!
>>>>
>>>>
>>>
>>>
>>> OK, I've been glancing through the code for the other layout drivers.
>>> Basically, in the functions ld_io_ops->{read|write}_pagelist, the
>>> filelayout driver only returns 0, while the panlayout only returns 0
>>> or a
>>> negative error. So why do we have the checks for positive return
>>> value at all?
>>
>> In the past the objects LD used to return a positive count on
>> synchronous
>> completion of the I/O operation (it had nothing to do with falling back
>> to NFS I/O)
>>
>>>
>>> In addition, to clarify the intent of some of the panobject code:
>>>
>>> Does sam_read/sam_write return PAN_ERR_IN_PROGRESS iff called with a
>>> completion callback?
>>
>> Not exactly. It returns that if called with a callback function
>> and the operation continues asynchronously. If it's already
>> completed (either successfully or aborted with an error) it will
>> return the appropriate success/error status.
>>
>
> In that case, don't you have the potential for the code in the async
> case to call the done routines twice, first as the callback, then (if
> the async call finishes quickly) again in the (rc !=
> PAN_ERR_IN_PROGRESS) condition?
No, rc != PAN_ERR_IN_PROGRESS is final so the callback won't be called
in this case.
Or, said differently, the callback will be called iff rc ==
PAN_ERR_IN_PROGRESS.
Benny
>
>>> Why the check against PNFS_ISSYNC in panlayout_*_done? Don't you still
>>> need to deallocate the memory used by the request?
>>
>> Yes. Historically we wouldn't call the callback on the synchronous
>> return path. This is no longer true and this code needs to be fixed
>> accordingly.
>>
>>>
>>> On that note, it seems that PNFS_ISSYNC is never currently set/used at
>>> all. Is this true?
>>
>> True. It used to be set in the 2.6.18.3 codebase in the .{read,write}
>> paths.
>>
>
> Is this going to be resurrected by Dean's O_SYNC work, or should a
> patch be sent in removing references to it?
>
>
> Fred
>
>> Benny
>>
>>>
>>> Fred
>>>
>>>
>>
>>
>> --
>> Benny Halevy
>> Software Architect
>> Tel/Fax: +972-3-647-8340
>> Mobile: +972-54-802-8340
>> US: +1-412-203-3187
>> bhalevy at panasas.com
>>
>> Panasas, Inc.
>> The Leader in Parallel Storage
>> www.panasas.com
>>
More information about the pNFS
mailing list