]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: cast m->get_client_tid() to compare to 16-bit Inode::flushing_cap_tid 2842/head
authorGreg Farnum <greg@inktank.com>
Thu, 23 Oct 2014 00:16:31 +0000 (17:16 -0700)
committerGreg Farnum <greg@inktank.com>
Thu, 23 Oct 2014 00:30:02 +0000 (17:30 -0700)
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
Signed-off-by: Greg Farnum <greg@inktank.com>
(cherry picked from commit 7cda0e52924787f4be6f80cf7c3edcef1c995728)

src/client/Client.cc

index 440292439de0c5cc6ab81ea642d74d682e91e706..ec03ec7b8d96bbdd011aa03261087f0e379aa36a 100644 (file)
@@ -3513,9 +3513,10 @@ void Client::handle_cap_flush_ack(MetaSession *session, Inode *in, Cap *cap, MCl
   int mds = session->mds_num;
   int dirty = m->get_dirty();
   int cleaned = 0;
+  uint16_t flush_ack_tid = (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;
   }