From: Yan, Zheng Date: Wed, 27 May 2015 07:10:31 +0000 (+0800) Subject: client: don't update flushing_cap_seq when there are flushing caps X-Git-Tag: v9.0.2~37^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6bb9e158fc30a7fb1e6b3a7f500bed5c14e3de01;p=ceph.git client: don't update flushing_cap_seq when there are flushing caps Current code always updates flushing_cap_seq when marking dirty caps as flushing. If there are old flushing caps, updating flushing_cap_seq confuses Client::wait_sync_caps(uint64_t), make it think that the old caps have been flushed. Signed-off-by: Yan, Zheng --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 24e135cdeb1f..57850db6d6b1 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -3711,8 +3711,9 @@ int Client::mark_caps_flushing(Inode *in) int flushing = in->dirty_caps; assert(flushing); - if (flushing && !in->flushing_caps) { + if (!in->flushing_caps) { ldout(cct, 10) << "mark_caps_flushing " << ccap_string(flushing) << " " << *in << dendl; + in->flushing_cap_seq = ++last_flush_seq; num_flushing_caps++; } else { ldout(cct, 10) << "mark_caps_flushing (more) " << ccap_string(flushing) << " " << *in << dendl; @@ -3721,7 +3722,6 @@ int Client::mark_caps_flushing(Inode *in) in->flushing_caps |= flushing; in->dirty_caps = 0; - in->flushing_cap_seq = ++last_flush_seq; session->flushing_caps.push_back(&in->flushing_cap_item);