From: Oleg Drokin Date: Wed, 10 Aug 2011 20:35:59 +0000 (-0400) Subject: LU-565 Update llite_nfc.c to 2.x interop fid API X-Git-Tag: v1_8_6_81~14 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F06%2F1206%2F3;p=fs%2Flustre-release.git LU-565 Update llite_nfc.c to 2.x interop fid API It seems we forgot to update lustre NFS code when converting everything to FID interop API. This lead to ESTALE errors trying to export NFS from 1.8 client that ewas mounting 2.x MDT due to inode generation and fid generation mismatch (inode generation always 0 for interop). Signed-off-by: Oleg Drokin Change-Id: Ic88671826da73b19857a42ceb9ac8dd0fd35b244 --- diff --git a/lustre/llite/llite_nfs.c b/lustre/llite/llite_nfs.c index d75c4e6..976cc15 100644 --- a/lustre/llite/llite_nfs.c +++ b/lustre/llite/llite_nfs.c @@ -77,9 +77,21 @@ static struct inode * search_inode_for_lustre(struct super_block *sb, unsigned long valid = 0; int eadatalen = 0, rc; struct inode *inode = NULL; + struct ll_fid *fid = iid; ENTRY; - inode = ILOOKUP(sb, iid->id, ll_nfs_test_inode, iid); + if (!fid_is_igif((struct lu_fid*)iid)) { + OBD_ALLOC_PTR(fid); + if (!fid) + RETURN(ERR_PTR(-ENOMEM)); + fid->id = ll_fid_build_ino(iid, 0); + fid->generation = ll_fid_build_gen(sbi, iid); + } + + inode = ILOOKUP(sb, fid->id, ll_nfs_test_inode, fid); + + if (fid != iid) + OBD_FREE_PTR(fid); if (inode) RETURN(inode); @@ -122,7 +134,8 @@ static struct dentry *ll_iget_for_nfs(struct super_block *sb, RETURN(ERR_PTR(PTR_ERR(inode))); if (is_bad_inode(inode) || - (iid->generation && inode->i_generation != iid->generation)) { + ((fid_is_igif((struct lu_fid*)iid) && iid->generation) && + inode->i_generation != iid->generation)) { /* we didn't find the right inode.. */ CERROR("Inode %lu, Bad count: %lu %d or version %u %u\n", inode->i_ino, (unsigned long)inode->i_nlink,