// duplicated since it was introduced at the same time as MIN_SIZE_RECOVERY
#define CEPH_FEATURE_OSD_PROXY_FEATURES (1ULL<<49) /* overlap w/ above */
#define CEPH_FEATURE_MON_METADATA (1ULL<<50)
+#define CEPH_FEATURE_OSD_PROXY_WRITE_FEATURES (1ULL<<51)
#define CEPH_FEATURE_RESERVED2 (1ULL<<61) /* slow down, we are almost out... */
#define CEPH_FEATURE_RESERVED (1ULL<<62) /* DO NOT USE THIS ... last bit! */
CEPH_FEATURE_CRUSH_V4 | \
CEPH_FEATURE_OSD_MIN_SIZE_RECOVERY | \
CEPH_FEATURE_MON_METADATA | \
+ CEPH_FEATURE_OSD_PROXY_WRITE_FEATURES | \
0ULL)
#define CEPH_FEATURES_SUPPORTED_DEFAULT CEPH_FEATURES_ALL
// older versions do not proxy the feature bits.
bool can_proxy_read = get_osdmap()->get_up_osd_features() &
CEPH_FEATURE_OSD_PROXY_FEATURES;
+ bool can_proxy_write = get_osdmap()->get_up_osd_features() &
+ CEPH_FEATURE_OSD_PROXY_WRITE_FEATURES;
OpRequestRef promote_op;
switch (pool.info.cache_mode) {
promote_object(obc, missing_oid, oloc, op);
return true;
} else if (op->may_write() || op->may_cache()) {
- do_proxy_write(op, missing_oid);
+ if (can_proxy_write) {
+ do_proxy_write(op, missing_oid);
+ } else {
+ // promote if can't proxy the write
+ promote_object(obc, missing_oid, oloc, op);
+ return true;
+ }
// Promote too?
maybe_promote(obc, missing_oid, oloc, in_hit_set,