From: Jeff Layton Date: Fri, 20 Nov 2020 23:43:31 +0000 (-0500) Subject: client: when STATX_NLINK is requested request FsLs caps X-Git-Tag: v15.2.9~11^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1c5b96dc0c73d63654bc49edd5843a5b1f391591;p=ceph.git client: when STATX_NLINK is requested request FsLs caps We currently determine the getattr request mask prior to doing the lookup, so we don't necessarily know whether the terminal entry is a directory or something else. Directory nlink count is governed by the dirstats, and those are under Fs caps. Request both Fs and Ls if the request mask includes STATX_NLINK. Fixes: https://tracker.ceph.com/issues/48313 Signed-off-by: Jeff Layton (cherry picked from commit e2ea2214cbb1ff4bd7332bb28db4f3477efb37df) --- diff --git a/src/client/Client.cc b/src/client/Client.cc index d577eeb5052b..d75ddbb159cd 100755 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -7351,7 +7351,7 @@ unsigned Client::statx_to_mask(unsigned int flags, unsigned int want) mask |= CEPH_CAP_AUTH_SHARED; if (want & (CEPH_STATX_NLINK|CEPH_STATX_CTIME|CEPH_STATX_VERSION)) mask |= CEPH_CAP_LINK_SHARED; - if (want & (CEPH_STATX_ATIME|CEPH_STATX_MTIME|CEPH_STATX_CTIME|CEPH_STATX_SIZE|CEPH_STATX_BLOCKS|CEPH_STATX_VERSION)) + if (want & (CEPH_STATX_NLINK|CEPH_STATX_ATIME|CEPH_STATX_MTIME|CEPH_STATX_CTIME|CEPH_STATX_SIZE|CEPH_STATX_BLOCKS|CEPH_STATX_VERSION)) mask |= CEPH_CAP_FILE_SHARED; if (want & (CEPH_STATX_VERSION|CEPH_STATX_CTIME)) mask |= CEPH_CAP_XATTR_SHARED;