Backport #16547
Updated by Nathan Cutler almost 8 years ago
In ObjectCacher::bh_read_finish, we have a nonsense snippet
<pre>
} else {
bh->bl.substr_of(bl,
oldpos-bh->start(),
bh->length());
mark_clean(bh);
}
</pre>
Here we're *trying* to map the offsets of an incoming OSD op reply's bufferlist with our BufferHeads. But oldpos==bh->start at all times. The correct offset calculation is "bh->start()-start" ("start" being a function parameter corresponding to bl's position within the object).
The patch is obviously simple enough, but I want tests verifying it as well.