From edc1e3496b5084dbfe12238d343d132aa876bc13 Mon Sep 17 00:00:00 2001 From: Xiubo Li Date: Mon, 11 Apr 2022 10:34:16 +0800 Subject: [PATCH] client: skip sync statx when only AT_STATX_DONT_SYNC flag is set 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 (cherry picked from commit 2184c3247e546b4f67bee0774e2c97ec2d35a2f3) --- src/client/Client.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 3513de3518b3a..949bb69b3c27c 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -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 */ -- 2.39.5