[pnfs] pNFS CVS 2.6.16 to 2.6.17 merge notes

Dean Hildebrand dhildebz at eecs.umich.edu
Mon Jul 17 17:36:17 EDT 2006


Does anyone know if all of the corruption problems Andy noticed in the 
2.6.16 kernel are now fixed in 2.6.17?  Were they all related to the 
striping changes?

Dean

William A.(Andy) Adamson wrote:
> as you've seen, i've updated the pNFS CVS tree to the 2.6.17 kernel with the 
> 2.6.17- CITI_NFS4_ALL-1.diff patch applied. the merge is complete.
>
> i've only tested normal NFSv4.0 with the connectathon tests - so the pNFS code 
> path is untested. so please, test the code!
>
> here are the merge notes:
>
>  fs/nfs/read.c:
>
> pnfs_readpage_result_norpc() is the callback from a non RPC pNFS layout
> driver that used the pagecache. consequently, it needs all of the page
> management functionality, and non of the RPC stuff in nfs_result_partial()
> and nfs_result_full.
>
> in the 2.6.16 code, nfs_result_partial() and nfs_result_full() both called
> nfs_result() as the first call. so, i separated out the page management
> pieces of nfs_result_partial() to nfs_result_partial_pages() and of
> nfs_result_full()  to nfs_result_full_pages() to be able to call them
> in pnfs_readpage_result_norpc().
>
> the 2.6.17 code has changed nfs_result_partial/full(). so no more
> nfs_result_partial_pages() or nfs_result_full_pages. now
> pnfs_readpage_result_norpc() calls the page management code copied from these 
> functions.
>
> NOTE: the 2.6.16 cvs tree was corrupted! fs/nfs/read.c
> has this code 4 times. twice  in nfs_readpage_result_partial()
> once outside of any function, and once in nfs_readpage_result_full()
>
> #ifdef CONFIG_NFS_V4
>         /* Restore the data->args->offset pointer to the actual offset
>
>          * if it was changed
>          */
>         if (data->orig_offset)
>                 data->args.offset = data->orig_offset;
> #endif
>
>
> i don't know where this goes - so it has been removed.
>
>
> NOTE: corruption in fs/nfs/nfs4filelayout.c - i removed the obvious.
>
> filelayout_get_dserver_offset() is declared twice (full function occurs
> twice) plus the following:
>
>                 /* Now get the file offset on the dserver
>                  * Set the read offset to this offset, and
>                  * save the original offset in orig_offset
>                  */
>                 data->args.offset = filelayout_get_dserver_offset(offset, 
> nfslay);
>                 data->orig_offset = offset;
> /* Perform sync or async reads.*
>  * An optimization for the NFS file layout driver
>  * allows the original read/write data structs to be passed in the
>  * last argument.
>  *
>
>  * This is called after the pNFS client has already created, so I pass it
>  * in via the last argument (void*).  I think this is the only way as there
>  * are just too many NFS specific arguments in the read/write data structs
>  * to pass to the layout drivers.
>
>                 /* In the case of synchronous reads, we reset the offset here 
> */                data->args.offset = data->orig_offset;
>  *
>  * TODO:
>  * 1. This is a lot of arguments, create special non-nfs-specific structure?
>                 /* In the case of aync reads, the offset will be reset in the
>                  * call_ops->rpc_call_done() routine
>                  */
>  */
> ssize_t filelayout_read_pagelist(
>
>
>
> _______________________________________________
> pNFS mailing list
> pNFS at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
>   

-- 
Dean Hildebrand
Ph.D. Candidate
University of Michigan



More information about the pNFS mailing list