]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: skip sync statx when only AT_STATX_DONT_SYNC flag is set 46679/head
authorXiubo Li <xiubli@redhat.com>
Mon, 11 Apr 2022 02:34:16 +0000 (10:34 +0800)
committerXiubo Li <xiubli@redhat.com>
Wed, 15 Jun 2022 01:47:26 +0000 (09:47 +0800)
From the posix and the initial statx supporting commit comments,
the AT_STATX_DONT_SYNC is a lightweight stat flag and the
AT_STATX_FORCE_SYNC is a heaverweight one. And also checked all
the other current usage about these two flags they are all doing
the same, that is only when the AT_STATX_FORCE_SYNC is not set
and the AT_STATX_DONT_SYNC is set will they skip sync retriving
the attributes from storage.

Fixes: https://tracker.ceph.com/issues/55253
Signed-off-by: Xiubo Li <xiubli@redhat.com>
(cherry picked from commit 2184c3247e546b4f67bee0774e2c97ec2d35a2f3)

src/client/Client.cc

index 3513de3518b3a5263f57407bd256fe6d5b4ae955..949bb69b3c27cea1aab2afb72b23ab23e5037f86 100644 (file)
@@ -7903,8 +7903,8 @@ unsigned Client::statx_to_mask(unsigned int flags, unsigned int want)
 {
   unsigned mask = 0;
 
-  /* if AT_STATX_DONT_SYNC is set, then we don't need any -- just use what's in cache */
-  if (flags & AT_STATX_DONT_SYNC)
+  /* The AT_STATX_FORCE_SYNC is always in higher priority than AT_STATX_DONT_SYNC. */
+  if ((flags & AT_STATX_SYNC_TYPE) == AT_STATX_DONT_SYNC)
     goto out;
 
   /* Always set PIN to distinguish from AT_STATX_DONT_SYNC case */