m->get_client_tid() is 64 bits (as it should be), but Inode::flushing_cap_tid
is only 16 bits. 16 bits should be plenty to let the cap flush updates
pipeline appropriately, but we need to cast in the proper direction when
comparing these differently-sized versions. So downcast the 64-bit one
to 16 bits.
Fixes: #9869
Backport: giant, firefly, dumpling
Signed-off-by: Greg Farnum <greg@inktank.com>
mds_rank_t mds = session->mds_num;
int dirty = m->get_dirty();
int cleaned = 0;
+ uint16_t flush_ack_tid = static_cast<uint16_t>(m->get_client_tid());
for (int i = 0; i < CEPH_CAP_BITS; ++i) {
if ((dirty & (1 << i)) &&
- (m->get_client_tid() == in->flushing_cap_tid[i]))
+ (flush_ack_tid == in->flushing_cap_tid[i]))
cleaned |= 1 << i;
}