Hi Joseph, I use ftrace's function tracer to record some code flow. There's a question that makes me confused - why does ocfs2_cancel_convert() be called here in ocfs2dc thread? In other words, what do we expect it to do here?
ocfs2_unblock_lock(){ ... if(lockres->l_flags & OCFS2_LOCK_BUSY){ ... ocfs2_cancel_convert() ... } } From what I understand, ocfs2_cancel_convert()->ocfs2_dlm_unlock()->user_dlm_unlock()->dlm_unlock(DLM_LKF_CANCEL) puts the lock back on the the grand queue at its old grant mode. In my case, you know, read/write the same shared file from two nodes, I think the up-conversion can only happen on the writing node - (PR->EX), while on the reading node, no up-conversion is need, right? But, the following output from writing and reading nodes, shows that ocfs2_cancel_convert() has been called on both nodes. why could this happen in this scenario? On 11/16/15 09:40, Joseph Qi wrote: >> Sorry, I'm confused about b). You mean b) is also part of ocfs2cmt's >> work? Does b) have something to do with a)? And what's the meaning of "evict >> inode"? >> Actually, I can hardly understand the idea of b). > You can go through the code flow: > iput->iput_final->evict->evict_inode->ocfs2_evict_inode > ->ocfs2_clear_inode->ocfs2_checkpoint_inode->ocfs2_start_checkpoint > > It happens that one node do not use the inode any longer (but not > delete), and will free its related lockres. OK, thanks~ Eric _______________________________________________ Ocfs2-devel mailing list Ocfs2-devel@oss.oracle.com https://oss.oracle.com/mailman/listinfo/ocfs2-devel