[pnfs] pNFS CVS 2.6.16 to 2.6.17 merge notes

William A.(Andy) Adamson andros at citi.umich.edu
Thu Jul 13 13:24:00 EDT 2006


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(





More information about the pNFS mailing list