Merge pull request #13755 from liewegas/wip-19131

osd/osd_internal_types: wake snaptrimmer on put_read lock, too

Reviewed-by: Josh Durgin <jdurgin@redhat.com>
This commit is contained in:
Josh Durgin 2017-03-06 12:48:25 -08:00 committed by GitHub
commit 3580d224d7
2 changed files with 17 additions and 32 deletions

View File

@ -0,0 +1,3 @@
tasks:
- install:
- ceph:

View File

@ -254,35 +254,6 @@ public:
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,
@ -290,14 +261,25 @@ public:
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);