Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ceph: fix flush tid comparision

TID of cap flush ack is 64 bits, but ceph_inode_info::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-bits one
to 16 bits.

Reflects ceph.git commit a5184cf46a6e867287e24aeb731634828467cd98.

Signed-off-by: Yan, Zheng <zyan@redhat.com>
Reviewed-by: Ilya Dryomov <idryomov@redhat.com>

authored by

Yan, Zheng and committed by
Ilya Dryomov
3231300b 206c5f60

+1 -1
+1 -1
fs/ceph/caps.c
··· 2638 2638 2639 2639 for (i = 0; i < CEPH_CAP_BITS; i++) 2640 2640 if ((dirty & (1 << i)) && 2641 - flush_tid == ci->i_cap_flush_tid[i]) 2641 + (u16)flush_tid == ci->i_cap_flush_tid[i]) 2642 2642 cleaned |= 1 << i; 2643 2643 2644 2644 dout("handle_cap_flush_ack inode %p mds%d seq %d on %s cleaned %s,"