]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: when STATX_NLINK is requested request FsLs caps 38950/head
authorJeff Layton <jlayton@redhat.com>
Fri, 20 Nov 2020 23:43:31 +0000 (18:43 -0500)
committerVicente Cheng <freeze.bilsted@gmail.com>
Mon, 18 Jan 2021 14:38:12 +0000 (14:38 +0000)
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 <jlayton@redhat.com>
(cherry picked from commit e2ea2214cbb1ff4bd7332bb28db4f3477efb37df)

src/client/Client.cc

index 9e87d63d460613426df08c5f357a52b7720ebcff..1020dd7ee0430592396e5e3cdf5b5a7c759efdfd 100755 (executable)
@@ -7289,7 +7289,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;