summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-05-17 12:06:18 -0700
committerSage Weil <sage@inktank.com>2013-06-24 21:21:47 -0700
commit5dfe5e502be1156788878714e7e53d31488d26f0 (patch)
treefb0d30c9313b95378f4750887d689468da8bb2cc
parent37a20174fd22a79938ba9c93046e8830f4a3306f (diff)
downloadceph-5dfe5e502be1156788878714e7e53d31488d26f0.tar.gz
client: add debugging around traceless reply failures
Tracking down #5021 Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/client/Client.cc23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/client/Client.cc b/src/client/Client.cc
index 45ad949cb73..34e5d8d1ed7 100644
--- a/src/client/Client.cc
+++ b/src/client/Client.cc
@@ -1185,18 +1185,25 @@ int Client::verify_reply_trace(int r,
Inode *target = 0; // ptarget may be NULL
Dentry *d = request->dentry();
if (d) {
- // rename is special: we handle old_dentry unlink explicitly in insert_dentry_inode(), so
- // we need to compensate and do the same here.
+ // rename is special: we handle old_dentry unlink explicitly
+ // in insert_dentry_inode(), so we need to compensate and do
+ // the same here.
Dentry *od = request->old_dentry();
if (od) {
unlink(od, false);
}
- ldout(cct, 10) << "make_request got traceless reply, looking up #"
- << d->dir->parent_inode->ino << "/" << d->name
- << " got_ino " << got_created_ino
- << " ino " << created_ino
- << dendl;
- r = _do_lookup(d->dir->parent_inode, d->name, &target);
+
+ if (d->dir) {
+ ldout(cct, 10) << "make_request got traceless reply, looking up #"
+ << d->dir->parent_inode->ino << "/" << d->name
+ << " got_ino " << got_created_ino
+ << " ino " << created_ino
+ << dendl;
+ r = _do_lookup(d->dir->parent_inode, d->name, &target);
+ } else {
+ // if the dentry is not linked, just do our best. see #5021.
+ assert(0 == "how did this happen? i want logs!");
+ }
} else {
Inode *in = request->inode();
ldout(cct, 10) << "make_request got traceless reply, forcing getattr on #"