ceph: track pending caps flushing accurately
Previously we do not trace accurate TID for flushing caps. when MDS failovers, we have no choice but to re-send all flushing caps with a new TID. This can cause problem because MDS can has already flushed some caps and has issued the same caps to other client. The re-sent cap flush has a new TID, which makes MDS unable to detect if it has already processed the cap flush. This patch adds code to track pending caps flushing accurately. When re-sending cap flush is needed, we use its original flush TID. Signed-off-by: Yan, Zheng <zyan@redhat.com>
This commit is contained in:
@@ -417,8 +417,7 @@ struct inode *ceph_alloc_inode(struct super_block *sb)
|
||||
INIT_LIST_HEAD(&ci->i_dirty_item);
|
||||
INIT_LIST_HEAD(&ci->i_flushing_item);
|
||||
ci->i_cap_flush_seq = 0;
|
||||
ci->i_cap_flush_last_tid = 0;
|
||||
memset(&ci->i_cap_flush_tid, 0, sizeof(ci->i_cap_flush_tid));
|
||||
ci->i_cap_flush_tree = RB_ROOT;
|
||||
init_waitqueue_head(&ci->i_cap_wq);
|
||||
ci->i_hold_caps_min = 0;
|
||||
ci->i_hold_caps_max = 0;
|
||||
|
Reference in New Issue
Block a user