diff options
author | Sage Weil <sage@inktank.com> | 2013-05-17 12:06:18 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-06-24 21:21:47 -0700 |
commit | 5dfe5e502be1156788878714e7e53d31488d26f0 (patch) | |
tree | fb0d30c9313b95378f4750887d689468da8bb2cc | |
parent | 37a20174fd22a79938ba9c93046e8830f4a3306f (diff) | |
download | ceph-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.cc | 23 |
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 #" |