From fa59d3899d5860209e73c4a9f5d0e723ae165b2a Mon Sep 17 00:00:00 2001 From: Pinghao Wu Date: Tue, 5 Jul 2022 16:19:26 +0800 Subject: [PATCH] client: readdir_r_cb: get rstat for dir only if using rbytes for size When `client_dirsize_rbytes` is off, there should be no need for getting rstat on readdir operations. This fixes performance when `client_dirsize_rbytes` is off after #38222. Fixes: https://tracker.ceph.com/issues/61999 Signed-off-by: Pinghao Wu (cherry picked from commit 69decabd7571f7f0fa07a575ce44c4b965e21209) --- src/client/Client.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 2b7db5a894d..b8dce4b90a0 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -9269,7 +9269,7 @@ int Client::_readdir_cache_cb(dir_result_t *dirp, add_dirent_cb_t cb, void *p, } int idx = pd - dir->readdir_cache.begin(); - if (dn->inode->is_dir()) { + if (dn->inode->is_dir() && cct->_conf->client_dirsize_rbytes) { mask |= CEPH_STAT_RSTAT; } int r = _getattr(dn->inode, mask, dirp->perms); @@ -9377,6 +9377,7 @@ int Client::_readdir_r_cb(int op, bool bypass_cache) { int caps = statx_to_mask(flags, want); + int rstat_on_dir = cct->_conf->client_dirsize_rbytes ? CEPH_STAT_RSTAT : 0; RWRef_t mref_reader(mount_state, CLIENT_MOUNTING); if (!mref_reader.is_state_satisfied()) @@ -9406,7 +9407,7 @@ int Client::_readdir_r_cb(int op, uint64_t next_off = 1; int r; - r = _getattr(diri, caps | CEPH_STAT_RSTAT, dirp->perms); + r = _getattr(diri, caps | rstat_on_dir, dirp->perms); if (r < 0) return r; @@ -9439,7 +9440,7 @@ int Client::_readdir_r_cb(int op, in = diri->get_first_parent()->dir->parent_inode; int r; - r = _getattr(in, caps | CEPH_STAT_RSTAT, dirp->perms); + r = _getattr(in, caps | rstat_on_dir, dirp->perms); if (r < 0) return r; @@ -9510,7 +9511,7 @@ int Client::_readdir_r_cb(int op, if (check_caps) { int mask = caps; if(entry.inode->is_dir()){ - mask |= CEPH_STAT_RSTAT; + mask |= rstat_on_dir; } r = _getattr(entry.inode, mask, dirp->perms); if (r < 0) -- 2.39.5