From ee77667211e9a18d60cc78d56079a89840b244ff Mon Sep 17 00:00:00 2001 From: Dhairya Parmar Date: Mon, 4 Mar 2024 14:11:38 +0530 Subject: [PATCH] mds: do not use item item_caps in two different lists make use of item_to_flush instead of item_caps in Locker::need_snapflush_inodes Fixes: https://tracker.ceph.com/issues/64008 Signed-off-by: Dhairya Parmar (cherry picked from commit 207a9beac4b7863f071ce82b04b37ce8766e9178) --- src/mds/Locker.cc | 12 ++++++------ src/mds/MDCache.cc | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index cdb39e6081c..9817f10fb64 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -72,7 +72,7 @@ public: }; Locker::Locker(MDSRank *m, MDCache *c) : - need_snapflush_inodes(member_offset(CInode, item_caps)), mds(m), mdcache(c) {} + need_snapflush_inodes(member_offset(CInode, item_to_flush)), mds(m), mdcache(c) {} void Locker::dispatch(const cref_t &m) @@ -2311,7 +2311,7 @@ void Locker::file_update_finish(CInode *in, MutationRef& mut, unsigned flags, lock->put_wrlock(); } in->item_open_file.remove_myself(); - in->item_caps.remove_myself(); + in->item_to_flush.remove_myself(); eval_cap_gather(in, &need_issue); } } @@ -3179,15 +3179,15 @@ void Locker::snapflush_nudge(CInode *in) _rdlock_kick(hlock, true); } else { // also, requeue, in case of unstable lock - need_snapflush_inodes.push_back(&in->item_caps); + need_snapflush_inodes.push_back(&in->item_to_flush); } } void Locker::mark_need_snapflush_inode(CInode *in) { ceph_assert(in->last != CEPH_NOSNAP); - if (!in->item_caps.is_on_list()) { - need_snapflush_inodes.push_back(&in->item_caps); + if (!in->item_to_flush.is_on_list()) { + need_snapflush_inodes.push_back(&in->item_to_flush); utime_t now = ceph_clock_now(); in->last_dirstat_prop = now; dout(10) << "mark_need_snapflush_inode " << *in << " - added at " << now << dendl; @@ -4295,7 +4295,7 @@ void Locker::caps_tick() CInode *in = need_snapflush_inodes.front(); if (in->last_dirstat_prop >= cutoff) break; - in->item_caps.remove_myself(); + in->item_to_flush.remove_myself(); snapflush_nudge(in); if (in == last) break; diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 0226ce32f71..97bab8b24b2 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -333,6 +333,7 @@ void MDCache::remove_inode(CInode *o) inode_map.erase(o->ino()); } else { o->item_caps.remove_myself(); + o->item_to_flush.remove_myself(); snap_inode_map.erase(o->vino()); } -- 2.39.5