From 08b4a4ef655651ca7b60e6e5b30722d28091ddbc Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 3 Aug 2008 13:56:45 -0700 Subject: [PATCH] mds: fix open_parents context deletion --- src/mds/snap.cc | 11 ++++------- src/mds/snap.h | 8 +++++++- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/mds/snap.cc b/src/mds/snap.cc index f1bb1c20fd5c9..bd528678ed452 100644 --- a/src/mds/snap.cc +++ b/src/mds/snap.cc @@ -27,20 +27,18 @@ << ".cache.snaprealm(" << inode->ino() \ << " seq " << seq << " " << this << ") " -bool SnapRealm::open_parents(Context *finish, snapid_t first, snapid_t last) +bool SnapRealm::_open_parents(Context *finish, snapid_t first, snapid_t last) { dout(10) << "open_parents [" << first << "," << last << "]" << dendl; - if (open) { - delete finish; + if (open) return true; - } // make sure my current parents' parents are open... if (parent) { dout(10) << " current parent [" << current_parent_since << ",head] is " << *parent << " on " << *parent->inode << dendl; if (last >= current_parent_since && - !parent->open_parents(finish, MAX(first, current_parent_since), last)) + !parent->_open_parents(finish, MAX(first, current_parent_since), last)) return false; } @@ -62,13 +60,12 @@ bool SnapRealm::open_parents(Context *finish, snapid_t first, snapid_t last) open_past_parents[p->second.ino] = parent->snaprealm; parent->get(CInode::PIN_PASTSNAPPARENT); } - if (!parent->snaprealm->open_parents(finish, p->second.first, p->first)) + if (!parent->snaprealm->_open_parents(finish, p->second.first, p->first)) return false; } } open = true; - delete finish; return true; } diff --git a/src/mds/snap.h b/src/mds/snap.h index f2c3df0ebf65d..cf10645f41930 100644 --- a/src/mds/snap.h +++ b/src/mds/snap.h @@ -144,7 +144,13 @@ struct SnapRealm { return false; } - bool open_parents(Context *retryorfinish, snapid_t first=1, snapid_t last=CEPH_NOSNAP); + bool _open_parents(Context *retryorfinish, snapid_t first=1, snapid_t last=CEPH_NOSNAP); + bool open_parents(Context *retryorfinish) { + if (!_open_parents(retryorfinish)) + return false; + delete retryorfinish; + return true; + } bool have_past_parents_open(snapid_t first=1, snapid_t last=CEPH_NOSNAP); void close_parents(); -- 2.39.5