respond_to_request(mdr, -EEXIST);
return 0;
}
+ } else {
+ dn->first = dir->inode->find_snaprealm()->get_newest_seq() + 1;
}
return dn;
}
// create
- dn = dir->add_null_dentry(dname);
+ dn = dir->add_null_dentry(dname, dir->inode->find_snaprealm()->get_newest_seq() + 1);
dn->mark_new();
dout(10) << "prepare_null_dentry added " << *dn << dendl;
return dn;
}
in->inode.rstat.rfiles = 1;
- if (follows >= dn->first)
- dn->first = follows+1;
+ assert(dn->first == follows+1);
in->first = dn->first;
// prepare finisher
MDRequestRef mdr;
CDentry *dn;
CInode *newi;
- snapid_t follows;
public:
- C_MDS_mknod_finish(MDS *m, MDRequestRef& r, CDentry *d, CInode *ni, snapid_t f) :
- MDSInternalContext(m), mdr(r), dn(d), newi(ni), follows(f) {}
+ C_MDS_mknod_finish(MDS *m, MDRequestRef& r, CDentry *d, CInode *ni) :
+ MDSInternalContext(m), mdr(r), dn(d), newi(ni) {}
void finish(int r) {
assert(r == 0);
}
}
- if (follows >= dn->first)
- dn->first = follows + 1;
+ assert(dn->first == follows + 1);
newi->first = dn->first;
dout(10) << "mknod mode " << newi->inode.mode << " rdev " << newi->inode.rdev << dendl;
PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
le->metablob.add_primary_dentry(dn, newi, true, true, true);
- journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(mds, mdr, dn, newi, follows));
+ journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(mds, mdr, dn, newi));
}
newi->inode.update_backtrace();
dout(12) << " follows " << follows << dendl;
- if (follows >= dn->first)
- dn->first = follows + 1;
+ assert(dn->first == follows + 1);
newi->first = dn->first;
// ...and that new dir is empty.
LogSegment *ls = mds->mdlog->get_current_segment();
ls->open_files.push_back(&newi->item_open_file);
- journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(mds, mdr, dn, newi, follows));
+ journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(mds, mdr, dn, newi));
}
if (!mds->locker->acquire_locks(mdr, rdlocks, wrlocks, xlocks))
return;
- snapid_t follows = dn->get_dir()->inode->find_snaprealm()->get_newest_seq();
-
unsigned mode = S_IFLNK | 0777;
CInode *newi = prepare_new_inode(mdr, dn->get_dir(), inodeno_t(req->head.ino), mode);
assert(newi);
newi->inode.version = dn->pre_dirty();
newi->inode.update_backtrace();
- if (follows >= dn->first)
- dn->first = follows + 1;
newi->first = dn->first;
// prepare finisher
mdcache->predirty_journal_parents(mdr, &le->metablob, newi, dn->get_dir(), PREDIRTY_PRIMARY|PREDIRTY_DIR, 1);
le->metablob.add_primary_dentry(dn, newi, true, true);
- journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(mds, mdr, dn, newi, follows));
+ journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(mds, mdr, dn, newi));
}
pi->ctime = mdr->get_op_stamp();
pi->version = tipv;
- snapid_t follows = dn->get_dir()->inode->find_snaprealm()->get_newest_seq();
- if (follows >= dn->first)
- dn->first = follows;
-
// log + wait
EUpdate *le = new EUpdate(mdlog, "link_local");
mdlog->start_entry(le);