The existing logic appears able to cause propagation of a failed
exclusive create to the client, when it should instead have been
retried, due to disagreement about the logical write offset. (The
value of ofs here could be > 0 due to the operation of a stacked
write filter [e.g., compressor], when the RADOS write offset was
0 and hence an exclusive write that should be retried).
Rationale for fix by Casey.
http://tracker.ceph.com/issues/22790
Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
op_ret = put_data_and_throttle(filter, data, ofs, need_to_wait);
if (op_ret < 0) {
- if (!need_to_wait || op_ret != -EEXIST) {
+ if (op_ret != -EEXIST) {
ldpp_dout(this, 20) << "processor->thottle_data() returned ret="
<< op_ret << dendl;
goto done;