};
WRITE_CLASS_ENCODER(object_locator_t)
+inline bool operator==(const object_locator_t& l, const object_locator_t& r) {
+ return l.pool == r.pool && l.preferred == r.preferred && l.key == r.key;
+}
+inline bool operator!=(const object_locator_t& l, const object_locator_t& r) {
+ return !(l == r);
+}
+
inline ostream& operator<<(ostream& out, const object_locator_t& loc)
{
out << "@" << loc.pool;
osd->reply_op_error(op, r);
return;
}
+
+ // make sure locator is consistent
+ if (op->get_object_locator() != obc->obs.oi.oloc) {
+ dout(10) << " provided locator " << op->get_object_locator()
+ << " != object's " << obc->obs.oi.oloc
+ << " on " << obc->obs.oi.soid << dendl;
+ osd->clog.warn() << "bad locator " << op->get_object_locator()
+ << " on object " << obc->obs.oi.oloc
+ << " loc " << op->get_object_locator()
+ << " op " << *op << "\n";
+ }
if ((op->may_read()) && (obc->obs.oi.lost)) {
// This object is lost. Reading from it returns an error.