return r;
}
- if (dirinode->is_fscrypt_enabled()) {
- if (mask & CEPH_FILE_MODE_WR) {
- mask |= CEPH_FILE_MODE_RD;
- }
- }
-
walk_dentry_result wdr;
bool require_target = !(flags & O_CREAT);
r = path_walk(dirinode, path, &wdr, perms, {.followsym = followsym, .mask = (unsigned)mask, .require_target = require_target});
int cmode = ceph_flags_to_mode(cflags);
- if (in->fscrypt_ctx &&
- cmode & CEPH_FILE_MODE_WR) {
- cmode |= CEPH_FILE_MODE_RD;
- }
-
int want = ceph_caps_for_mode(cmode);
int result = 0;
int cmode = ceph_flags_to_mode(cflags);
- if (dir->fscrypt_ctx &&
- cmode & CEPH_FILE_MODE_WR) {
- cmode |= CEPH_FILE_MODE_RD;
- }
-
int64_t pool_id = -1;
if (data_pool && *data_pool) {
pool_id = objecter->with_osdmap(
{
int want = 0;
for (const auto &[mode, cnt] : open_by_mode)
- if (cnt)
+ if (cnt) {
want |= ceph_caps_for_mode(mode);
+
+ //want Fr cap during fscrypt rmw
+ if ((mode == CEPH_FILE_MODE_WR) && fscrypt_ctx) {
+ want |= CEPH_CAP_FILE_RD;
+ }
+ }
return want;
}