Skip to content

Commit

Permalink
Merge pull request #13755 from liewegas/wip-19131
Browse files Browse the repository at this point in the history
osd/osd_internal_types: wake snaptrimmer on put_read lock, too

Reviewed-by: Josh Durgin <jdurgin@redhat.com>
  • Loading branch information
jdurgin committed Mar 6, 2017
2 parents 5bdfc6d + 8ef5c56 commit 3580d22
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 32 deletions.
3 changes: 3 additions & 0 deletions qa/suites/rados/thrash/thrashers/none.yaml
@@ -0,0 +1,3 @@
tasks:
- install:
- ceph:
46 changes: 14 additions & 32 deletions src/osd/osd_internal_types.h
Expand Up @@ -254,50 +254,32 @@ struct ObjectContext {
rwstate.put_read(ls);
rwstate.recovery_read_marker = false;
}
void put_read(list<OpRequestRef> *to_wake) {
rwstate.put_read(to_wake);
}
void put_excl(list<OpRequestRef> *to_wake,
bool *requeue_recovery,
bool *requeue_snaptrimmer) {
rwstate.put_excl(to_wake);
if (rwstate.empty() && rwstate.recovery_read_marker) {
rwstate.recovery_read_marker = false;
*requeue_recovery = true;
}
if (rwstate.empty() && rwstate.snaptrimmer_write_marker) {
rwstate.snaptrimmer_write_marker = false;
*requeue_snaptrimmer = true;
}
}
void put_write(list<OpRequestRef> *to_wake,
bool *requeue_recovery,
bool *requeue_snaptrimmer) {
rwstate.put_write(to_wake);
if (rwstate.empty() && rwstate.recovery_read_marker) {
rwstate.recovery_read_marker = false;
*requeue_recovery = true;
}
if (rwstate.empty() && rwstate.snaptrimmer_write_marker) {
rwstate.snaptrimmer_write_marker = false;
*requeue_snaptrimmer = true;
}
}
void put_lock_type(
ObjectContext::RWState::State type,
list<OpRequestRef> *to_wake,
bool *requeue_recovery,
bool *requeue_snaptrimmer) {
switch (type) {
case ObjectContext::RWState::RWWRITE:
return put_write(to_wake, requeue_recovery, requeue_snaptrimmer);
rwstate.put_write(to_wake);
break;
case ObjectContext::RWState::RWREAD:
return put_read(to_wake);
rwstate.put_read(to_wake);
break;
case ObjectContext::RWState::RWEXCL:
return put_excl(to_wake, requeue_recovery, requeue_snaptrimmer);
rwstate.put_excl(to_wake);
break;
default:
assert(0 == "invalid lock type");
}
if (rwstate.empty() && rwstate.recovery_read_marker) {
rwstate.recovery_read_marker = false;
*requeue_recovery = true;
}
if (rwstate.empty() && rwstate.snaptrimmer_write_marker) {
rwstate.snaptrimmer_write_marker = false;
*requeue_snaptrimmer = true;
}
}
bool is_request_pending() {
return (rwstate.count > 0);
Expand Down

0 comments on commit 3580d22

Please sign in to comment.