CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%lu\n", lli->lli_st_ino,
lli->lli_st_generation);
- /* XXX don't do anything for '/'. but how to find the root pnode? */
+ if (llu_is_root_inode(inode))
+ RETURN(0);
/* still opened by others? */
if (--lli->lli_open_count)
int rc;
rc = llu_file_release(inode);
- if (!llu_i2info(inode)->lli_open_count)
- llu_i2info(inode)->lli_stale_flag = 1;
+ /* if open count == 0 && stale_flag is set, should we
+ * remove the inode immediately? */
return rc;
}
inode = _sysio_i_find(fs, &fileid);
if (inode) {
- if (llu_i2info(inode)->lli_st_generation ==
- md->body->generation) {
+ struct llu_inode_info *lli = llu_i2info(inode);
+
+ if (lli->lli_stale_flag ||
+ lli->lli_st_generation == md->body->generation)
+ I_RELE(inode);
+ else {
llu_update_inode(inode, md->body, md->lsm);
return inode;
- } else
- I_RELE(inode);
+ }
}
inode = llu_new_inode(fs, &fid);
inop_gone: llu_iop_gone,
};
+#warning "time_after() defined in liblustre.h need to be rewrite in userspace"