From: Sage Weil Date: Thu, 3 Dec 2009 23:16:08 +0000 (-0800) Subject: mds: avoid scatter writebehind from predirty_* X-Git-Tag: v0.18~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dc2435118762bb4531407641217d055e7962a56a;p=ceph.git mds: avoid scatter writebehind from predirty_* predirty_journal_parents does wrlock_start with nowait=true. Make sure we don't then simple_lock if lock->is_updated(), as that will call scatter_writebehind, which will barf if a log event is currently open (which it is in this case). --- diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index b3f29089f19a..9f31eb461f41 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -813,8 +813,11 @@ bool Locker::wrlock_start(SimpleLock *lock, MDRequest *mut, bool nowait) if (in->is_auth()) { if (want_scatter) file_mixed((ScatterLock*)lock); - else + else { + if (nowait && lock->is_updated()) + return false; // don't do nested lock, as that may scatter_writebehind in simple_lock! simple_lock(lock); + } if (nowait && !lock->can_wrlock(client)) return false;