]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: skip sync statx when only AT_STATX_DONT_SYNC flag is set 46680/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:49:15 +0000 (09:49 +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 2f9dafd034bb7c76bd20df30c8d88ed8aad7ef5e..55844bac97682d809fe817298836ce9575f35221 100644 (file)
@@ -7964,8 +7964,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 */