X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Fllite%2Fllite_nfs.c;h=d6937095f666c44bdd26654d6517ab559124fc44;hb=025f0dc848e4e5eb6785886d473f8b47c293c35e;hp=d052b2d655819ee6c708e7d2f599c68353239bb8;hpb=9d4b898b1c1c7c318fda5f0c345ed726c774c06a;p=fs%2Flustre-release.git diff --git a/lustre/llite/llite_nfs.c b/lustre/llite/llite_nfs.c index d052b2d..d693709 100644 --- a/lustre/llite/llite_nfs.c +++ b/lustre/llite/llite_nfs.c @@ -37,6 +37,21 @@ __u32 get_uuid2int(const char *name, int len) return (key0 << 1); } +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +static int ll_nfs_test_inode(struct inode *inode, unsigned long ino, + void *opaque) +#else +static int ll_nfs_test_inode(struct inode *inode, void *opaque) +#endif +{ + struct lustre_id *iid = opaque; + + if (inode->i_ino == id_ino(iid) && + inode->i_generation == id_gen(iid)) + return 1; + + return 0; +} static struct inode * search_inode_for_lustre(struct super_block *sb, unsigned long ino, unsigned long generation, @@ -45,29 +60,33 @@ static struct inode * search_inode_for_lustre(struct super_block *sb, struct ptlrpc_request *req = NULL; struct ll_sb_info *sbi = ll_s2sbi(sb); struct lustre_id id; - unsigned long valid = 0; + __u64 valid = 0; int eadatalen = 0, rc; struct inode *inode = NULL; - - inode = ILOOKUP(sb, ino, NULL, NULL); + struct lustre_id iid; + + id_ino(&iid) = (__u64)ino; + id_gen(&iid) = generation; + inode = ILOOKUP(sb, ino, ll_nfs_test_inode, &iid); if (inode) return inode; if (S_ISREG(mode)) { - eadatalen = obd_size_diskmd(sbi->ll_lov_exp, NULL); + eadatalen = obd_size_diskmd(sbi->ll_dt_exp, NULL); valid |= OBD_MD_FLEASIZE; } - id.li_stc.u.e3s.l3s_type = mode; - id.li_stc.u.e3s.l3s_ino = (__u64)ino; - id.li_stc.u.e3s.l3s_gen = generation; + id_type(&id) = mode; + id_ino(&id) = (__u64)ino; + id_gen(&id) = generation; - rc = md_getattr(sbi->ll_lmv_exp, &id, valid, eadatalen, &req); + rc = md_getattr(sbi->ll_md_exp, &id, valid, NULL, NULL, 0, + eadatalen, NULL, &req); if (rc) { CERROR("failure %d inode %lu\n", rc, ino); return ERR_PTR(rc); } - rc = ll_prep_inode(sbi->ll_lov_exp, sbi->ll_lmv_exp, + rc = ll_prep_inode(sbi->ll_dt_exp, sbi->ll_md_exp, &inode, req, 0, sb); if (rc) { ptlrpc_req_finished(req); @@ -94,20 +113,17 @@ static struct dentry *ll_iget_for_nfs(struct super_block *sb, unsigned long ino, if (IS_ERR(inode)) { return ERR_PTR(PTR_ERR(inode)); } - if (is_bad_inode(inode) - || (generation && inode->i_generation != generation) - ){ + if (is_bad_inode(inode) || + (generation && inode->i_generation != 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, - atomic_read(&inode->i_count), - inode->i_generation, - generation); + CERROR(" Inode %lu, Bad count: %lu %d or version %u %u\n", + inode->i_ino, (unsigned long)inode->i_nlink, + atomic_read(&inode->i_count), inode->i_generation, + generation); iput(inode); return ERR_PTR(-ESTALE); } - + /* now to find a dentry. * If possible, get a well-connected one */