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)
{
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 */