From: Yan, Zheng Date: Tue, 20 Sep 2016 10:07:56 +0000 (+0800) Subject: client: fix readdir vs fragmentation race X-Git-Tag: v10.2.4~66^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=0a17741861faa1643bc338459397072268e469bd;p=ceph.git client: fix readdir vs fragmentation race following sequence of events tigger the race client readdir frag 0* -> got item 'A' MDS merges frag 0* and frag 1* client send readdir request (frag 1*, offset 2, readdir_start 'A') MDS reply items (that are after item 'A') in frag * Fixes: http://tracker.ceph.com/issues/17286 Signed-off-by: Yan, Zheng (cherry picked from commit feb63776d4f2b03ece189715fdd75da5cae2afc2) --- diff --git a/src/client/Client.cc b/src/client/Client.cc index b465cadec55f2..473874298b64a 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -1147,7 +1147,7 @@ void Client::insert_readdir_results(MetaRequest *request, MetaSession *session, << ", readdir_start " << readdir_start << dendl; if (diri->snapid != CEPH_SNAPDIR && - fg.is_leftmost() && readdir_offset == 2) { + fg.is_leftmost() && readdir_offset == 2 && readdir_start.empty()) { dirp->release_count = diri->dir_release_count; dirp->ordered_count = diri->dir_ordered_count; dirp->start_shared_gen = diri->shared_gen;