GOTO(out_root, err = -EBADF);
}
- ll_i2info(root)->lli_fid = sbi->ll_root_fid;
-
err = ll_close_thread_start(&sbi->ll_lcq);
if (err) {
CERROR("cannot start close thread: rc %d\n", err);
CERROR("new_inode -fatal: rc %d\n", rc);
GOTO(out, rc);
}
- ll_i2info(*inode)->lli_fid = md.body->fid1;
}
rc = obd_checkmd(sbi->ll_dt_exp, sbi->ll_md_exp,
struct inode *ll_iget(struct super_block *sb, ino_t hash,
struct lustre_md *md)
{
+ struct ll_inode_info *lli;
struct inode *inode;
LASSERT(hash != 0);
inode = iget_locked(sb, hash);
if (inode) {
if (inode->i_state & I_NEW) {
+ lli = ll_i2info(inode);
ll_read_inode2(inode, md);
+ lli->lli_fid = md->body->fid1;
unlock_new_inode(inode);
} else {
+ /* inode is not new, no chamges to fid
+ * should take place. */
ll_update_inode(inode, md);
}
CDEBUG(D_VFSTRACE, "inode: %lu/%u(%p)\n",
inode = iget4(sb, hash, NULL, md);
if (inode) {
- if (!(inode->i_state & (I_FREEING | I_CLEAR)))
+ if (!(inode->i_state & (I_FREEING | I_CLEAR))) {
ll_update_inode(inode, md);
+ down(&inode->i_sem);
+ lli->lli_fid = md->body->fid1;
+ up(&inode->i_sem);
+ }
CDEBUG(D_VFSTRACE, "inode: %lu/%u(%p)\n",
inode->i_ino, inode->i_generation, inode);