On Wed, 2016-08-10 at 16:08 -0400, Patrick Donnelly wrote: > On Wed, Aug 10, 2016 at 12:30 PM, Jeff Layton <jlayton@xxxxxxxxxx> > wrote: > > > > The CEPH_INO_DOTDOT thing is quite strange. Under most OS (Linux > > included), the parent of the root is itself. IOW, at the root, '.' > > and > > '..' refer to the same inode. > > > > Change the ceph client to do the same, as this allows users to get > > valid stat info for '..', as well as elimnating some special- > > casing. > > > > Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx> > > Don't forget Client::_lookup: > > if (dname == "..") { > if (dir->dn_set.empty()) > r = -ENOENT; > else > *target = dir->get_first_parent()->dir->parent_inode; //dirs > can't be hard-linked > goto done; > } > > Otherwise LGTM. > Ahh, thanks. So will dir->dn_set.empty() be true at the root? If so, then something like the patch below? Note that this patch is not strictly necessary, but it does simplify some other changes that I have queued up: diff --git a/src/client/Client.cc b/src/client/Client.cc index 5ab0ace4d3df..287baaf20536 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -5924,7 +5924,7 @@ int Client::_lookup(Inode *dir, const string& dname, int mask, if (dname == "..") { if (dir->dn_set.empty()) - r = -ENOENT; + *target = dir; else *target = dir->get_first_parent()->dir->parent_inode; //dirs can't be hard-linked goto done; -- Jeff Layton <jlayton@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html