return r;
}
-int Client::get_or_create(Inode *dir, const string& name, Dentry **pdn)
+int Client::get_or_create(Inode *dir, const char* name,
+ Dentry **pdn, bool expect_null)
{
// lookup
if (dir->dir && dir->dir->dentries.count(name)) {
MDSSession &s = mds_sessions[dn->lease_mds];
if (s.cap_ttl > now &&
s.cap_gen == dn->lease_gen) {
- return -EEXIST;
+ if (expect_null)
+ return -EEXIST;
+ else return 0;
}
}
- } else {
- // link up new one
- *pdn = link(dir->dir, name.c_str(), NULL);
}
+
+ // otherwise link up a new one
+ *pdn = link(dir->dir, name, NULL);
return 0;
}
int _sync_fs();
MClientRequest* make_request_from_Meta(MetaRequest * request);
- int get_or_create(Inode *dir, const string& name, Dentry **pdn);
+ int get_or_create(Inode *dir, const char* name,
+ Dentry **pdn, bool expect_null=false);
public:
int mount();