From 999530eeff5849183d8849688fd0f54dbd62c0f3 Mon Sep 17 00:00:00 2001 From: Oleg Drokin Date: Wed, 10 Aug 2011 16:35:59 -0400 Subject: [PATCH] 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 --- lustre/llite/llite_nfs.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) 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, -- 1.8.3.1