From: Xiubo Li Date: Mon, 3 Aug 2020 04:01:14 +0000 (+0800) Subject: client: make the root member under the client_lock X-Git-Tag: v16.1.0~1457^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d7904c29a4b5219ee10025fbbde96a60542b3ff5;p=ceph.git client: make the root member under the client_lock Fixes: https://tracker.ceph.com/issues/46649 Signed-off-by: Xiubo Li --- diff --git a/src/client/Client.cc b/src/client/Client.cc index a4e1ee59838f..f20b20bfc11b 100755 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -10306,7 +10306,7 @@ int Client::statfs(const char *path, struct statvfs *stbuf, ceph_statfs stats; C_SaferCond cond; - std::scoped_lock lock(client_lock); + std::unique_lock lock(client_lock); const vector &data_pools = mdsmap->get_data_pools(); if (data_pools.size() == 1) { objecter->get_fs_stats(stats, data_pools[0], &cond); @@ -10314,11 +10314,12 @@ int Client::statfs(const char *path, struct statvfs *stbuf, objecter->get_fs_stats(stats, boost::optional(), &cond); } - client_lock.unlock(); + lock.unlock(); int rval = cond.wait(); + lock.lock(); + assert(root); total_files_on_fs = root->rstat.rfiles + root->rstat.rsubdirs; - client_lock.lock(); if (rval < 0) { ldout(cct, 1) << "underlying call to statfs returned error: "