[pnfs] porting/merging/rebasing 2.6.18 -> 2.6.24

Dean Hildebrand seattleplus at gmail.com
Fri Nov 16 20:08:07 EST 2007


Hmmmm, the patch gets me worried.  It seems to indicate that there is 
already *some* pnfs client code in the 2.6.14 pnfs kernel.  Have we 
already ported some pnfs client code forward?  If so, what was it?  I 
know server pnfs code went forward, but do we know what 2.6.18 pnfs 
client code went into 2.6.24?

Anyways, we are obviously need to make a tough decision.   Let me try a 
summary of the previous emails:
-----------
Method 1) One way is to port "features" forward from 2.6.18 to 2.6.24, 
e.g., the read path, the write path, etc, using the 2.6.18 code as a 
*guide*.
Advantages:
i) Opportunity to implement features correctly and avoid porting forward 
*bad* code
ii) The code has changed so much that porting forward a large pnfs patch 
would be difficult if not impossible, so this method may be easier.

Disadvantages:
i) Possibly miss bits of code in the port, causing us to redo lots of 
bug fixing
ii) We still need to compare final port of 2.6.24 with a 2.6.18 pnfs 
patch to ensure we didn't miss anything.

Personally, I think this works well if
a) We know what features we have in 2.6.18.  I actually don't think we 
really know this information.  I know there is a lot of code there that 
handles each of the layout drivers requirements.
b) We know what code in 2.6.18 maps to each feature.  When we moved to 
cvs, the patches for each feature were lost and so this mapping is tough...
-----------
Method 2) The other way it seems is to port the entire 2.6.18 pnfs 
kernel forward to 2.6.24.  *Somehow* get a pnfs patch, which hopefully 
doesn't include any sessions code, and apply it to 2.6.24.
Advantages:
1) Ensure every bit of code makes it into the latest kernel, so we can 
avoid re-implementing and/or re-debugging pNFS.
2) Once all code has been ported forward, we can worry about improving 
the code. 

Disadvantages:
1) The patch script may apply functions or modify functions that it 
shouldn't in 2.6.24 due to the vast difference between the kernel versions.
2) Port forward existing bugs and/or code hacks. 

I think 2.6.24 already has a very basic but working version of a 
client/server implementation of sessions.  So for this to work we need 
to get a 2.6.18 pNFS patch WITHOUT sessions (which we also need for 
Method 1) and then figure out what each individual change is for and how 
it should be implemented in 2.6.24.  Not an easy task!
-----------

Method 3: Post-track kernel versions from 2.6.18 to 2.6.24
I wonder if Bruce's suggestion of re-basing 2.6.18-pnfs one kernel 
version forward at a time is the best way to go.  It would allow us to 
slowly adapt to the kernel changes while ensuring that we don't *lose* 
any pnfs code along the way.  Obviously we can use Andy's patches in the 
process.  If *tracking* the kernel is supposedly the best way to solve 
this mess, then this method of post-tracking seems like possibly the 
best answer.  In the end, moving forward one kernel version at a time is 
the work we were supposed to do in the first place and it may turn out 
to be less work than Method 1 or 2 above.

I think all 3 will work and all 3 will be painful.  Anyways, something 
we can talk about at the pNFS conf call in 2 weeks.

Dean


andros at umich.edu wrote:
> From: Andy Adamson <andros at umich.edu>
>
> Remove unimplemented pnfs operations from pnfs_v41_clientops so that
> the nfslayoutdriver works. Will add opeations as implemented.
>
> Signed off by: Andy Adamson<andros at umich.edu>
> ---
>  fs/nfs/nfs4proc.c |    8 ++++----
>  1 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> index 87df222..c355c2d 100644
> --- a/fs/nfs/nfs4proc.c
> +++ b/fs/nfs/nfs4proc.c
> @@ -5202,7 +5202,7 @@ const struct nfs_rpc_ops pnfs_v41_clientops = {
>  	.file_inode_ops	= &nfs4_file_inode_operations,
>  	.getroot	= nfs4_proc_get_root,
>  	.getattr	= nfs4_proc_getattr,
> -	.setattr	= pnfs4_proc_setattr,
> +	.setattr	= nfs4_proc_setattr,
>  	.lookupfh	= nfs4_proc_lookupfh,
>  	.lookup		= nfs4_proc_lookup,
>  	.access		= nfs4_proc_access,
> @@ -5224,10 +5224,10 @@ const struct nfs_rpc_ops pnfs_v41_clientops = {
>  	.set_capabilities = nfs4_server_capabilities,
>  	.decode_dirent	= nfs4_decode_dirent,
>  	.read_setup	= nfs4_proc_read_setup,
> -	.read_done	= pnfs4_read_done,
> +	.read_done	= nfs4_read_done,
>  	.write_setup	= nfs4_proc_write_setup,
> -	.write_done	= pnfs4_write_done,
> -	.commit_setup	= pnfs4_proc_commit_setup,
> +	.write_done	= nfs4_write_done,
> +	.commit_setup	= nfs4_proc_commit_setup,
>  	.commit_done	= nfs4_commit_done,
>  	.file_open      = nfs_open,
>  	.file_release   = nfs_release,
>   


More information about the pNFS mailing list